1 个不稳定版本
0.1.0 | 2024年4月11日 |
---|
#500 在 数学 中
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