标准形化简流水线
标准形(Normal Form)把圆型限制性三体问题(CR3BP)平动点附近的复杂动力学 化简为一组作用量-角变量形式的"表征参数",让轨道设计师用几个常数描述一条 本需六个状态量随时间演化的轨道。
NormalFormPipeline 把这条化简路径串成一行调用:
星历轨道初值 → 动力学替代轨道 → quasi-Floquet 变换 → 中心流形化简 → 表征参数
特性
一行代码完成"星历轨道 → 表征参数"
返回的
NormalFormResult同时暴露化简诊断与坐标变换入口平动点(L1–L5)、历元、展开阶数由
NormalFormContext统一配置
使用方法
from e2m2e.algorithm.normal_form import NormalFormContext, NormalFormPipeline
from e2m2e.algorithm.dynamics import CR3BP_System, LibrationPoint
system = CR3BP_System(mu=1.215058560962404e-2, primary="Earth", secondary="Moon")
context = NormalFormContext(
system=system,
libration_point=LibrationPoint.L1,
epoch=2451545.0,
order=4,
)
# rho 坐标初值 [ρ, ρ̇](无量纲)
x0 = [1e-3, -1e-3, 0.0, 0.0, 1e-4, -1e-4]
result = NormalFormPipeline(context).reduce(x0)
# rho 坐标 → 表征参数 [q1, p1, I2, θ2, I3, θ3]
param = result.catalog_transformer.rho_to_param(x0, t=0.0)
result 是一个不可变容器,既给出整条流水线的收敛诊断
(success、substitute_residual、message、metadata),也把四个子结果作为一等公民
字段暴露,供需要深入到某一层的调用方使用。residual 是
substitute_residual 的向后兼容别名,新代码应使用后者。
结果保存与加载
NormalFormResult 可序列化到磁盘,便于把化简结果存档复用:
from e2m2e.algorithm.normal_form import NormalFormResult
# 保存为 .npz(全部子结果与 context 参数一并序列化)
result.save("result.npz")
# 重建;catalog_transformer 由三个子结果自动复原
result = NormalFormResult.load("result.npz")
catalog_transformer 不单独存储,加载时由动力学替代、quasi-Floquet、
中心流形三个子结果重建,与原始对象在 rho_to_param / param_to_rho
上数值等价。
可配置旋钮
构造 NormalFormPipeline 时可覆盖默认行为:
quasi_floquet_method:matrix(默认,36 维直接积分)或 lie_algebra(21 维 sp(6) 参数化,自动保辛)center_max_order:中心流形 Lie 变换截断阶数,默认 10center_steps:化简步骤元组,默认 ("invariant", "center")dynamical_kwargs:透传给动力学替代 corrector 的覆盖项(如 {"t_total": 8.0})
子模块
流水线内部依次调用以下 reducer,需要单独访问某一层结果时可经
result.ds_result / result.qf_result / result.cm_result 取得:
动力学替代:
DynamicalSubstituteCorrectorquasi-Floquet 变换:
QuasiFloquetReducer中心流形化简:
CenterManifoldReducer表征参数目录:
LibrationCatalogTransformer