Skip to content
Snippets Groups Projects

Algebraic Harmonic Balance Method

This package provides a Python 3.10 implementation of the algebraic harmonic balance method (algebraic HBM) as proposed by [1].

Installation

The following commands install algebraic_hbm from the Python Package Index. You will need a working installation of Python and pip.

pip install algebraic-hbm

Theoretic background

We are considering second order ordinary differential equations (ODEs) with polynomial coefficients in the state x : \mathbb T \subset \mathbb R \to \mathbb R, that is ODEs of the form

r(t,x;u) = \rho x''(t) + \delta x'(t) + \sum_{i=1}^q \alpha_i x^i(t) - u(t) = 0 \,, \quad u(t) = \hat u \cos(\Omega t) \,.

The idea of the HBM is to yield approximations x_n(t) = c_0 + \sum_{i=1}^n c_{2i-1} \cos(i \Omega t) + c_{2i} \sin(i \Omega t) of stationary periodic solutions x of the ODE. Given a excitation frequency \Omega, the algebraic HBM of order n yields a system of multivariate polynomials R_i, i=0,1,\ldots,2n, in the variables c_0,c_1,\ldots,c_{2n} that solve the algebraic system

F_n(\mathbf c; \Omega) = [R_i(\mathbf c; \Omega)]_{i=0}^{2n} = 0

where \mathbf c = [c_0,c_1,\ldots,c_{2n}] \in \mathbb R^{2n+1}. A solution \mathbf c \leftrightarrow x_n of F_n(\mathbf c; \Omega) = 0 is also a solution of the (original) HBM defining system of integral equations

\langle r(x_n), \phi_j\rangle = \frac{1}{T} \int_0^T r(t,x_n(t)) \phi_j(t) \, \mathrm d t \,, \quad j = 0,1,\ldots,2n \,,

with basis functions \phi_0(t) = 1, \phi_{2i-1}(t) = \cos(i \Omega t) and \phi_{2i}(t) = \sin(i \Omega t), i=1,\ldots,n. Note that building and evaluating F_n does not require the computation of integrals as e.g. in the classical or Alternating Frequency-Time HBM [2].

Usage

Evaluation

This example shows how to use the algebraic HBM framework to generate a system of executable functions that can be evaluated. This example can also be found here.

Required imports:

import algebraic_hbm

Define the classical softening Duffing oscillator

r(t,x) = x''(t) + 0.4 x'(t) - 0.4 x^3(t) - 0.3 \cos(\Omega t) = 0

as a second order ODE with polynomial coefficients via

ode = ODE_2nd_Order_Poly_Coeffs(mass=1, damping=.4, stiffness=1, excitation=(0,.3), monomials={3: -.4})

Then, initialize the algebraic HBM for ansatz order n.

HBM = Algebraic_HBM(ODE=ode, order=n)

Now generate the multivariate polynomials that define the algebraic equation system of the algebraic HBM.

HBM.generate_multivariate_polynomials()

Compile multivariate polynomials into excecutable functions F_n and \mathrm DF_n=(\frac{\mathrm d F_n}{\mathrm d \mathbf c}, \frac{\mathrm d F_n}{\mathrm d a}).

F, DF = HBM.compile()

The system F_n and its Jacobian \mathrm D F_n may now be used to perform a bifurcation analysis of the system. For example, computing the frequency response of the system for different initial guesses [3].

Coefficient matrix for Macaulay framework

This example shows how to build the coefficient matrix of the algebraic representation that can be used in conjunction with the Macaulay matrix framework [4]. This example can also be found here.

Most of the steps are as in the above example, but instead of compiling executable functions we request the coefficient matrix at a given excitation frequency \Omega = 3.14 by invoking HBM.get_monomial_coefficient_matrix.

import algebraic_hbm

n, a = 1, 3.14
ode = ODE_2nd_Order_Poly_Coeffs(mass=1, damping=.4, stiffness=1, excitation=(0,.3), monomials={3: -.4})
HBM = Algebraic_HBM(ODE=ode, order=n)
HBM.generate_multivariate_polynomials()
A = HBM.get_monomial_coefficient_matrix(a)

References

  1. Hannes Dänschel and Lukas Lentz. "An Algebraic Representation of the Harmonic Balance Method for Ordinary Differential Equations with Polynomial Coefficients". Manuscript PDF: /algebraic_hbm.pdf
  2. Malte Krack and Johann Gross. "Harmonic Balance for Nonlinear Vibration Problems". Springer, 2019. isbn: 978-3-030-14022-9. DOI: 10.1007/978-3-030-14023-6
  3. Hannes Dänschel, Lukas Lentz, and Utz von Wagner. "Error Measures and Solution Artifacts of the Harmonic Balance Method on the Example of the Softening Duffing Oscillator". In: Journal of Theoretical and Applied Mechanics 62.2 (Apr. 2024), pp. 435–455. DOI: 10.15632/jtam-pl/186718
  4. Philippe Dreesen, Kim Batselier, and Bart De Moor. "Back to the Roots: Polynomial System Solving, Linear Algebra, Systems Theory". In: IFAC Proceedings Volumes 45.16 (2012), pp. 1203–1208. issn: 1474-6670. DOI: 10.3182/20120711-3-BE-2027.00217