#equation-solver #aerospace #kepler #orbits #kepler-equation

rust-kepler-solver

高效的椭圆和双曲Kepler方程求解器

1 个不稳定版本

0.1.0 2024年4月11日

#500数学

MIT 许可证

38KB
243

概述

此仓库包含椭圆Kepler方程(EKE)和双曲Kepler方程(HKE)的Rust求解器。在根目录下使用 cargo test 运行测试,在根目录下使用 cargo bench 运行基准测试。注意:此实现使用f64,使用f32可以取得更高的性能。

示例

use std::f64::consts::PI;
use rust_kepler_solver::ellipse::EllipseSolver;

fn example_ellipse() {
    let eccentricity = 1.0;
    let solver = EllipseSolver::new(eccentricity);
    println!("{}", solver.solve(1.2));
    println!("{}", solver.solve(PI / 4.0));
}
use rust_kepler_solver::hyperbola::HyperbolaSolver;

fn example_hyperbola() {
    let eccentricity = 1.0;
    let solver = HyperbolaSolver::new(eccentricity);
    println!("{}", solver.solve(1.2));
    println!("{}", solver.solve(100.0));
}

方法

EKE

EKE通过选择一个初始种子来求解,该种子由Daniele Tommasini和David N. Olivieri描述(https://doi.org/10.1051/0004-6361/20214142),然后使用拉格朗日方法迭代,直到差值低于某个阈值。根据Bruce A. Conway的说法,拉格朗日方法是求解EKE的可靠算法(https://doi.org/10.1007/BF01230852)。几乎肯定存在更有效的方法,但此实现仍然非常快。

HKE

HKE使用Baisheng Wu等人提出的一种稍微复杂的方法(https://doi.org/10.1016/j.apm.2023.12.017)。这种方法将偏心近点的区间分为两部分:一部分是有限的,另一部分是无限的。对每个区域构建一个近似,第一个使用分片Pade近似,第二个使用“HKE的解析初始近似解”。然后计算给定平均近点应使用哪个区间的阈值,并据此得到一个初始近似。这些近似如此精确,以至于只需要一步Halley迭代就可以得到非常精确的结果。

可靠性

该套件包含对EKE和HKE求解器的测试,测试了大约600万和1000万个偏心率和平均近点对的值。这些值在EKE中线性分布,以覆盖可能的偏心率和平均近点范围。对于HKE,偏心率和平均近点输入到无穷大都是技术上是有效的,因此我们使用x^2/c生成值来测试较小值范围(这里Pade近似适用)和较大值范围(这里解析近似适用)。尽管这不是完全全面的,但应该足以证明这两个求解器非常可靠。

依赖项

约0.4-1MB
约22K SLoC