#solver #runge-kutta #f32 #config #points

ode

各种常微分方程(ODE)求解器

2 个版本

使用旧的 Rust 2015

0.1.2 2017年2月18日
0.1.0 2016年9月13日

#6 in #runge-kutta

MIT 许可证

14KB
201

ODE.rs

Build Status Published Version Documentation

提供使用不同方法的通用常微分方程(ODE)求解器。同时,允许用户选择他们希望用于该问题的数据类型,无论是 f32u8 或某些非标准大数类型。

目前绝对不适用于任何严重的用途。代码需要清理,还有许多内容尚未实现。

示例

use ode::{Method, Solver};

let ini_cond: Vec<f32> = vec![1., 2.];

// simple config
Solver::new(&ini_cond, |t: &f32, _: &Vec<f32>| vec![2.*t])
    .method(Method::RK4)
    .run();

// complex config
let mut s = Solver::new(&ini_cond, |t: &f32, _: &Vec<f32>| vec![2.*t] );
s.method(Method::RK4);

// run the solver
let (times, pos) = s.run();

当前目标

对于下一个次要版本(0.2.0)

  • 更多和更好的文档;
  • 重新实现四阶龙格-库塔方法;
  • 至少有几个测试和示例;
  • 稳定 API。

对于下一个主要版本(1.0.0)

  • 找出一种通用的方式来编写所有的龙格-库塔变体,既易于维护,又易于阅读;
  • 实现所有计划中的龙格-库塔变体;
    • 2;
    • 3;
    • 4;
    • 5.

发行说明

  • 0.?.? [进行中]

  • 0.1.2: 兼容性中断

    将 Number 特性修改为使用 num_traits 插件,以便接受的数据类型与社区中已有的类型更一致。

    为了保持函数名的连贯性,solver::Solver::change_weight() 现在称为 solver::Solver::weights()

    此外,还有一些文档。

    RK4 已上线,目前是唯一可用的方法。

  • 0.1.1 [不可用]: 兼容性中断

    关闭问题 #1,这摒弃了 MATLAB 风格,转而采用更 Rust 风格的方式。这还开始了构建版本 0.2.0 的过程,试图稳定 API。

    这是一个不可用的版本,因为 solver::Solver::run() 总是返回空向量。

  • 0.1.0: 第一稿

    开始此项目是为了尝试将 MATLAB 风格的常微分方程(ODE)求解器引入 Rust。API 完全不稳定,可能随时更改。

    目前只有 RK4 方法可用,用法非常基础。

依赖项

~240KB