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
- 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
- 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
- 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
- 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