Full Normal Forms

The normal module provides full normal form computations for complete dynamical reduction.

_lie_transform()

The _lie_transform() function performs full Lie series normalization of polynomial Hamiltonian.

hiten.algorithms.hamiltonian.normal._lie._lie_transform()[source]

Perform full Lie series normalization of polynomial Hamiltonian.

Eliminates all non-resonant terms using the complete resonance condition (k, omega) = 0, producing the maximally simplified canonical form.

Parameters:
  • point (object) – Linear dynamics object with linear_modes attribute containing (lambda, omega1, omega2) frequency values.

  • poly_init (List[ndarray]) – Initial polynomial Hamiltonian coefficients by degree.

  • psi (ndarray) – Combinatorial lookup table from polynomial indexing.

  • clmo (ndarray) – Coefficient layout mapping objects.

  • degree (int) – Maximum polynomial degree to include.

  • tol (float, optional) – Tolerance for cleaning small coefficients. Default is 1e-30.

  • resonance_tol (float, optional) – Tolerance for identifying resonant terms. Default is 1e-14.

Returns:

  • poly_trans (List[ndarray]) – Fully normalized Hamiltonian containing only resonant terms.

  • poly_G_total (List[ndarray]) – Complete generating function for the normalization.

  • poly_elim_total (List[ndarray]) – Eliminated terms at each degree.

Return type:

tuple[List[ndarray], List[ndarray], List[ndarray]]

Notes

Uses the full resonance condition (k, omega) = 0 where k is the multi-index and omega = [lambda, -lambda, i*omega1, -i*omega1, i*omega2, -i*omega2].

Differs from partial normal form by eliminating all non-resonant terms rather than just those with k[0] != k[3]. May encounter small divisor problems for nearly resonant terms.

See also

_select_nonresonant_terms()

Term selection

_lie_transform()

Partial version

_select_nonresonant_terms()

The _select_nonresonant_terms() function identifies non-resonant terms using full resonance condition.

hiten.algorithms.hamiltonian.normal._lie._select_nonresonant_terms()[source]

Identify non-resonant terms using full resonance condition.

JIT-compiled function that selects terms for elimination based on the complete frequency analysis (k, omega) = 0.

Parameters:
  • p_n (ndarray) – Coefficient array for homogeneous terms of degree n.

  • n (int) – Degree of the homogeneous terms.

  • omega (ndarray, shape (6,)) – Frequency vector [lambda, -lambda, i*omega1, -i*omega1, i*omega2, -i*omega2].

  • clmo (ndarray) – Coefficient layout mapping objects.

  • resonance_tol (float, optional) – Tolerance for identifying resonant terms. Default is 1e-14.

Returns:

Coefficient array with only non-resonant terms.

Return type:

ndarray

Notes

A term with multi-index k = [k0, k1, k2, k3, k4, k5] is resonant if:

(k, omega) = (k3-k0)*lambda + (k4-k1)*i*omega1 + (k5-k2)*i*omega2 ~ 0

Unlike partial normalization (k[0] = k[3]), this considers all frequency combinations for more complete term elimination.

See also

_decode_multiindex()

Multi-index decoding

_select_terms_for_elimination()

Partial version