Center Manifold Normal Forms
The center module provides partial normal form computations for center manifold analysis.
_lie_transform()
The _lie_transform()
function performs Lie series normalization of polynomial Hamiltonian for center manifold.
- hiten.algorithms.hamiltonian.center._lie._lie_transform()[source]
Perform Lie series normalization of polynomial Hamiltonian.
Implements the partial normal form algorithm that systematically eliminates non-resonant terms from a polynomial Hamiltonian using Lie series transformations. The process preserves the Hamiltonian structure while simplifying the dynamics.
- Parameters:
point (object) – Linear dynamics object containing eigenvalues and frequencies of the linearized system. Must have a linear_modes attribute with (lambda, omega1, omega2) values.
poly_init (List[ndarray]) – Initial polynomial Hamiltonian coefficients organized by degree. Each element contains coefficients for homogeneous terms of that degree.
psi (ndarray) – Combinatorial lookup table from polynomial indexing system.
clmo (ndarray) – Coefficient layout mapping objects for polynomial operations.
degree (int) – Maximum polynomial degree to include in normalization.
tol (float, optional) – Tolerance for cleaning small coefficients. Default is 1e-30.
- Returns:
poly_trans (List[ndarray]) – Normalized Hamiltonian with non-resonant terms eliminated.
poly_G_total (List[ndarray]) – Complete generating function used for the normalization.
poly_elim_total (List[ndarray]) – Eliminated terms at each degree (useful for verification).
- Return type:
Notes
The normalization process operates degree by degree:
Term Selection: Identifies non-resonant terms using resonance condition
Homological Equation: Solves for generating function to eliminate these terms
Lie Transform: Applies transformation to modify all polynomial terms
Iteration: Continues until all degrees are processed
A term is considered resonant if k[0] = k[3] where k is the multi-index of exponents. Non-resonant terms are systematically eliminated while preserving the essential dynamics captured by resonant terms.
The transformation is canonical, preserving the symplectic structure of the Hamiltonian system.
See also
_select_terms_for_elimination()
Identifies non-resonant terms
_solve_homological_equation()
Solves for generators
_apply_poly_transform()
Applies Lie transform
_get_homogeneous_terms()
The _get_homogeneous_terms()
function extracts homogeneous terms of specified degree from polynomial.
- hiten.algorithms.hamiltonian.center._lie._get_homogeneous_terms()[source]
Extract homogeneous terms of specified degree from polynomial.
JIT-compiled function that extracts the coefficient array corresponding to homogeneous terms of a specific degree from a polynomial representation.
- Parameters:
poly_H (List[ndarray]) – Polynomial represented as list of coefficient arrays by degree.
n (int) – Degree of homogeneous terms to extract.
psi (ndarray) – Combinatorial lookup table for polynomial indexing.
- Returns:
Coefficient array for degree-n homogeneous terms. Returns appropriately-sized zero array if degree n is not present.
- Return type:
ndarray
Notes
Used internally by normalization routines to access specific degrees
Handles cases where polynomial doesn’t contain the requested degree
JIT-compiled for efficient repeated access during normalization
See also
_make_poly()
Creates zero polynomial arrays
_select_terms_for_elimination()
The _select_terms_for_elimination()
function identifies non-resonant terms for elimination in Lie normalization.
- hiten.algorithms.hamiltonian.center._lie._select_terms_for_elimination()[source]
Identify non-resonant terms for elimination in Lie normalization.
JIT-compiled function that selects polynomial terms to be eliminated based on resonance conditions. Terms are classified as resonant or non-resonant according to their multi-index structure.
- Parameters:
p_n (ndarray) – Coefficient array for homogeneous polynomial terms of degree n.
n (int) – Degree of the homogeneous terms being processed.
clmo (ndarray) – Coefficient layout mapping objects for multi-index decoding.
- Returns:
Coefficient array containing only non-resonant terms to eliminate. Resonant terms are set to zero in the returned array.
- Return type:
ndarray
Notes
Resonance Condition: A monomial with multi-index k = [k0, k1, k2, k3, k4, k5] is considered resonant if k[0] = k[3], where:
k[0], k[3] correspond to the hyperbolic (center) mode exponents
k[1], k[2], k[4], k[5] correspond to the elliptic mode exponents
Non-resonant terms (k[0] != k[3]) are “bad” monomials that can be eliminated through canonical transformations without affecting the essential dynamics.
The function creates an independent copy to avoid modifying the input and processes each coefficient individually for thread safety.
See also
_decode_multiindex()
Multi-index decoding
_lie_transform()
Uses this function for term selection
_lie_expansion()
The _lie_expansion()
function computes coordinate transformations using Lie series expansions.
- hiten.algorithms.hamiltonian.center._lie._lie_expansion()[source]
Compute coordinate transformations using Lie series expansions.
Performs Lie series transformations to compute polynomial expansions that relate center manifold coordinates to the original (or intermediate) coordinate system. Can operate in forward or inverse mode.
- Parameters:
poly_G_total (List[ndarray]) – Complete set of generating functions for the Lie transformation, organized by polynomial degree.
degree (int) – Maximum polynomial degree for the transformation series.
psi (ndarray) – Combinatorial lookup table for polynomial indexing.
clmo (ndarray) – Coefficient layout mapping objects for polynomial operations.
tol (float, optional) – Tolerance for cleaning small coefficients. Default is 1e-30.
inverse (bool, optional) – Transformation direction. If False, applies generators in ascending order (forward). If True, applies in descending order (inverse). Default is False.
sign (int or None, optional) – Sign for generator application. If None, determined by inverse flag: +1 for forward, -1 for inverse. Default is None.
restrict (bool, optional) – Whether to restrict results to center manifold by eliminating terms containing q1 or p1. Default is True.
- Returns:
Six polynomial expansions representing the coordinate transformation: [q1_expansion, q2_expansion, q3_expansion, p1_expansion, p2_expansion, p3_expansion] Each expansion is a list of coefficient arrays by degree.
- Return type:
List[List[ndarray]]
Notes
Lie Series Method: The transformation uses the Lie series expansion:
exp(L_G) * X = X + {X,G} + (1/2!){{X,G},G} + (1/3!){{X,G},G},G} + …
where L_G is the Lie derivative operator, {,} denotes Poisson brackets, and G is the generating function.
Coordinate Systems:
Forward Mode: From normalized to original coordinates
Inverse Mode: From original to normalized coordinates
Restriction: Eliminates dependence on hyperbolic variables (q1, p1)
See also
_apply_coord_transform()
Applies transformation to single coordinate
_zero_q1p1()
Restricts expansions to center manifold
_evaluate_transform()
Evaluates expansions at specific points
_apply_coord_transform()
The _apply_coord_transform()
function applies Lie series transformation to single coordinate polynomial.
- hiten.algorithms.hamiltonian.center._lie._apply_coord_transform()[source]
Apply Lie series transformation to single coordinate polynomial.
JIT-compiled function that applies a Lie series transformation to transform a coordinate polynomial using a generating function. Implements the series expansion with automatic truncation and factorial coefficients.
- Parameters:
poly_X (List[ndarray]) – Input coordinate polynomial to transform, organized by degree.
poly_G (List[ndarray]) – Generating function polynomial for the transformation.
N_max (int) – Maximum polynomial degree for the output series.
psi (ndarray) – Combinatorial lookup table for polynomial indexing.
clmo (ndarray) – Coefficient layout mapping objects.
encode_dict_list (List[dict]) – Encoding dictionaries for polynomial operations.
tol (float) – Tolerance for coefficient cleaning during computation.
- Returns:
Transformed coordinate polynomial with same degree structure as input.
- Return type:
List[ndarray]
Notes
Lie Series Formula: Computes the transformation:
exp(L_G) * X = X + {X,G} + (1/2!){{X,G},G} + (1/3!){{X,G},G},G} + …
where:
L_G is the Lie derivative operator generated by G
{,} denotes the Poisson bracket operation
Factorial coefficients ensure proper series convergence
Algorithm Steps:
Initialize result with input polynomial X
Iteratively compute higher-order Poisson brackets
Apply factorial coefficients (1/k!) for k-th order terms
Accumulate contributions up to maximum degree
Clean small coefficients at each step
Truncation: Series is automatically truncated when terms would exceed N_max degree or when the generating function degree limits further terms.
See also
_polynomial_poisson_bracket()
Poisson bracket computation
_factorial()
Factorial computation
_evaluate_transform()
The _evaluate_transform()
function evaluates coordinate transformation at specific center manifold point.
- hiten.algorithms.hamiltonian.center._lie._evaluate_transform()[source]
Evaluate coordinate transformation at specific center manifold point.
JIT-compiled function that evaluates six polynomial expansions representing coordinate transformations at a given point in center manifold coordinates. Used to convert between coordinate systems.
- Parameters:
expansions (List[List[ndarray]]) – Six polynomial expansions from Lie series transformation: [q1_expansion, q2_expansion, q3_expansion, p1_expansion, p2_expansion, p3_expansion] Each expansion is organized by polynomial degree.
coords_cm_complex (ndarray, shape (6,)) – Center manifold coordinates [q1, q2, q3, p1, p2, p3] where evaluation is performed. Complex-valued for generality.
clmo (ndarray) – Coefficient layout mapping objects for polynomial evaluation.
- Returns:
Transformed coordinates [q1_tilde, q2_tilde, q3_tilde, p1_tilde, p2_tilde, p3_tilde] Complex-valued result from polynomial evaluation.
- Return type:
ndarray, shape (6,)
Notes
Evaluation Process: For each coordinate i = 0, 1, …, 5:
Takes the i-th polynomial expansion from the transformation
Evaluates this polynomial at the given center manifold point
Returns the complex result as the i-th transformed coordinate
Coordinate Mapping:
Input: Center manifold coordinates (usually restricted to q2, p2, q3, p3)
Output: Transformed coordinates in original or intermediate system
Complex arithmetic preserves full generality of the transformation
See also
_polynomial_evaluate()
Core polynomial evaluation
_lie_expansion()
Generates the expansions used here
_zero_q1p1()
The _zero_q1p1()
function restricts polynomial expansions to center manifold subspace.
- hiten.algorithms.hamiltonian.center._lie._zero_q1p1()[source]
Restrict polynomial expansions to center manifold subspace.
Eliminates all terms in coordinate expansions that depend on the hyperbolic variables q1 or p1, effectively restricting the expansions to the center manifold. This produces parameterizations that depend only on the stable center manifold coordinates.
- Parameters:
expansions (List[List[ndarray]]) – Six coordinate expansions to restrict. Each expansion is organized by polynomial degree.
clmo (ndarray) – Coefficient layout mapping objects for multi-index operations.
tol (float, optional) – Tolerance for coefficient cleaning. Default is 1e-30.
- Returns:
Restricted coordinate expansions depending only on (q2, p2, q3, p3). Structure matches input but with hyperbolic terms eliminated.
- Return type:
List[List[ndarray]]
Notes
Center Manifold Restriction: The center manifold in CR3BP applications typically corresponds to the stable/neutral directions associated with the elliptic modes, while q1, p1 correspond to the hyperbolic mode.
Term Elimination: For each polynomial term with multi-index k:
If k[0] != 0 or k[3] != 0: Term depends on q1 or p1 -> eliminate
Otherwise: Term depends only on (q2, p2, q3, p3) -> keep
Result Properties:
All six coordinate expansions become functions of 4 variables only
Expansions represent the center manifold embedding in full phase space
Suitable for reduced-order modeling and long-term dynamics analysis
See also
_decode_multiindex()
Multi-index decoding
_lie_expansion()
Often used with restrict=True to call this function