5 个版本 (1 个稳定版本)

1.0.0 2023年6月17日
0.1.3 2022年3月24日
0.1.2 2022年3月24日
0.1.1 2021年10月13日
0.1.0 2021年10月13日

813算法 中排名

Download history 42/week @ 2024-03-10 37/week @ 2024-03-17 12/week @ 2024-03-24 27/week @ 2024-03-31 21/week @ 2024-04-07 4/week @ 2024-04-14 13/week @ 2024-04-21 1/week @ 2024-04-28 12/week @ 2024-05-05 2/week @ 2024-05-12 28/week @ 2024-05-19 41/week @ 2024-05-26 31/week @ 2024-06-02 35/week @ 2024-06-09 10/week @ 2024-06-16 31/week @ 2024-06-23

每月下载量 110

MIT/Apache

29KB
755 代码行

这个crate是(据我所知)使用Dormand-Prince公式对的5(4)阶显式Runge-Kutta方法的最高效实现。它与scipy的实现相同。这个crate可用于求解常微分方程。

我已经不再使用这个crate,也没有打算增加项目范围,但我将解决/修复每个报告的问题。在我看来,这是一个小但非常精心编写和文档化的crate。

示例

struct HarmonicOde {}
impl fast_ode::DifferentialEquation<2> for HarmonicOde {
    fn ode_dot_y(&self, _t: f64, y: &fast_ode::Coord<2>) -> (fast_ode::Coord<2>, bool) {
        let x = y.0[0];
        let v = y.0[1];
        (fast_ode::Coord::<2>([v, -x]), true)
    }
}
let ode = HarmonicOde {};
let res = fast_ode::solve_ivp(&ode, (0., 10.), fast_ode::Coord([0., 1.]), |_, _| true, 1e-6, 1e-3);
let numerical_sol = match res {
    fast_ode::IvpResult::FinalTimeReached(y) => y.0,
    _ => panic!(),
};
let theoretical_sol = [10_f64.sin(), 10_f64.cos()];
assert!(numerical_sol[0]-theoretical_sol[0] < 1e-2);
assert!(numerical_sol[1]-theoretical_sol[1] < 1e-2);

依赖项

~17KB