Halo 初始猜测
e2m2e.algorithm.family.halo_initial_guess 模块提供 Richardson 三阶解析近似,
用于生成 Halo 轨道的初始猜测参数。
Richardson 三阶近似
Richardson (1980) 给出共线平动点附近 Halo 轨道的三阶解析解:
from e2m2e.algorithm.family.halo_initial_guess import compute_halo_initial_guess
guess = compute_halo_initial_guess(mu=0.01215, z_amplitude=0.001, L=1, halo_class=0)
print(f"x0 = {guess['x0']}") # x 方向初始位置
print(f"vy0 = {guess['vy0']}") # y 方向初始速度
print(f"T_half = {guess['T_half']}") # 半周期
参数说明:
mu— CR3BP 质量参数z_amplitude— z 方向振幅(无量纲)L— 平动点编号(1=L1,2=L2)halo_class— Halo 族分支(0=北族,1=南族)
内部求解过程
求解平动点到次天体的距离参数 γ(五次方程,Brent 方法)
计算面内振荡频率 ω_p
计算 Richardson 三阶系数(A、B、C、D 等)
组装三阶解析解,返回初始状态参数
与微分修正的配合
解析近似作为微分修正的初始猜测:
from e2m2e.algorithm.family.halo_initial_guess import compute_halo_initial_guess
from e2m2e.algorithm.solver import DifferentialCorrection
from e2m2e.data.types.orbit import Orbit
import numpy as np
# 1. 解析近似(小振幅种子,Richardson 近似精度高)
guess = compute_halo_initial_guess(mu=system.mu, z_amplitude=0.001, L=1, halo_class=0)
# 2. 组装初始状态
initial_state = np.array([
guess["x0"], 0.0, 0.001,
0.0, guess["vy0"], 0.0,
])
# 3. 微分修正
corrector = DifferentialCorrection(dynamics)
corrector.setup_halo_orbit_fixed_z0(z0=0.001, libration_point=1)
initial_guess = Orbit(
states=initial_state.reshape(1, -1),
times=np.array([0.0]),
system=system,
)
initial_guess.period = guess["T_half"] * 2
halo_result = corrector.iterate_correction(initial_guess=initial_guess)
halo = halo_result.orbit # 修正后的轨道(None 表示失败)
参考
Richardson D L. Analytical construction of a periodic solution about the collinear points[J]. Celestial Mechanics, 1980, 22(3): 303-320.