#ode #solve #systems #equations #fortran #linspace #odepack

lsode

使用Fortran编写的ODEPACK库中的LSODE子程序解决微分方程组的系统

12个版本

0.2.8 2020年12月9日
0.2.7 2020年3月7日
0.1.3 2020年3月5日

#866 in 数学

35 每月下载量

MIT 协议

1MB
11K SLoC

FORTRAN Legacy 11K SLoC // 0.6% comments Rust 106 SLoC

文档在此处:https://docs.rs/lsode.

解决微分方程组

此包使用Fortran库ODEPACK解决常微分方程组的系统。

我创建此包主要是为了能够在Rust中解决 刚性 ODE问题。

示例

此示例基于DifferentialEquations.jl文档中的示例.

use lsode::{linspace, solve_ode};

fn main() {
    let l: f64 = 1.0;
    let m: f64 = 1.0;
    let g: f64 = 9.81;
    let torque = |t: &f64| 0.1*t.sin();

    let f = |y: &[f64], t: &f64 | {
        let mut dy = vec![0.0, 0.0];
        dy[0] = y[1];
        dy[1] = -3.0*g/(2.0*l)*y[0].sin() + 3.0/(m*l*l)*torque(t);
        dy
    };

    let y0 = [0.01, 0.0];
    let ts = linspace(0.0, 10.0, 1000);
    let (atol, rtol) = (1e-6, 1e-6);

    let sol = solve_ode(f, &y0, ts.clone(), atol, rtol);

    for (i, t) in sol.iter().zip(ts) {
        println!("{} {} {}", t, i[0], i[1]);
    }
}

ODEPACK

我从此处获得了存在于此存储库中的ODEPACK代码。我不知道原始ODEPACK代码的许可情况,我假设它已发布到公共领域。

依赖关系

~2.9–5MB
~109K SLoC