1 个不稳定版本
0.11.0 | 2021 年 8 月 26 日 |
---|
#481 在 科学
用于 soco
575KB
13K SLoC
Rust 中的科学计算
功能
- 初值问题求解
- 根查找算法
- 多项式
- 多项式插值
- 科学常数
- 特殊函数/多项式
- 数值积分
- 数值微分
功能的解释可以在 这里 找到。
初值问题
实现了两种自适应 Runge-Kutta 方法,两种 Adams 预测-校正器,以及两种自适应逆向微分公式。所有求解器的接口都是相同的。以下代码示例使用 Runge-Kutta-Fehlberg 方法求解 y' = y。
use bacon_sci::ivp::{RK45, RungeKuttaSolver};
use nalgebra::{VectorN, U1};
fn deriv(_t: f64, y: &[f64], _params: &mut ()) -> Result<VectorN<f64, U1>, String> {
Ok(VectorN::<f64, U1>::from_column_slice(y))
}
fn solve() -> Result<(), String> {
let solver = RK45::new()
.with_dt_min(0.01)?
.with_dt_max(0.1)?
.with_tolerance(1e-4)?
.with_initial_conditions(&[1.0])?
.with_start(0.0)?
.with_end(10.0)?
.build();
let _solution = solver.solve_ivp(deriv, &mut ())?;
Ok(())
}
在 bacon_sci::ivp 中还有一个 solve_ivp
函数,它尝试第五阶预测-校正器,然后是 Runge-Kutta-Fehlberg 方法,然后是 BDF6。
根查找算法
bacon_sci::roots
实现了二分法、牛顿法、割线法、多项式牛顿法和 Müller 多项式法。
以下代码示例使用初始猜测 0.1 和 -0.1 查找 x^3
的根。
use bacon_sci::roots::secant;
use nalgebra::{VectorN, U1};
fn cubic(x: &[f64]) -> VectorN<f64, U1> {
VectorN::<f64, U1>::from_iterator(x.iter.map(|x| x.powi(3)))
}
fn solve() -> f64 {
secant((&[-0.1], &[0.1]), cubic, 0.001, 1000).unwrap()
}
多项式和多项式插值
bacon_sci::polynomial
实现了一个多项式结构体。 bacon_sci::interp
实现了拉格朗日插值、赫尔米特插值和三次样条插值。
科学常数
在 bacon_sci::constants 中定义了几个科学常数。数据来自 NIST。2018 CODATA 完整列表作为 hashmap 可用。
特殊函数和多项式
目前,bacon_sci::special
允许您获取勒让德多项式、赫尔米特多项式、拉格朗日多项式和切比雪夫多项式。
数值微分和求积
bacon_sci::differentiate
允许对一阶和二阶导数进行数值评估。 bacon_sci::integrate
实现了Tanh-Sinh求积法、自适应辛普森法则、Romberg积分以及几种自适应高斯积分方案。
依赖项
约3.5MB
约74K SLoC