34个版本
0.16.1 | 2024年3月2日 |
---|---|
0.15.0 | 2024年2月24日 |
0.14.0 | 2023年9月2日 |
0.13.1 | 2021年11月21日 |
0.8.2 | 2020年12月30日 |
#43 in 科学
用于 eorst
585KB
13K SLoC
Rust中的科学计算
功能
- 初值问题求解
- 求根算法
- 多项式
- 多项式插值
- 科学常数
- 特殊函数/多项式
- 数值积分
- 数值微分
功能的说明可以在这里找到。
初值问题
实现了两种自适应Runge-Kutta方法,两种Adams预测-校正器,以及两种自适应Backward Differentiation Formulas。所有求解器的接口都是相同的。以下代码示例使用Runge-Kutta-Fehlberg方法求解方程 y' = y。
use bacon_sci::ivp::{RK45, RungeKuttaSolver};
use nalgebra::SVector;
fn deriv(_t: f64, y: &[f64], _params: &mut ()) -> Result<SVector<f64, 1>, String> {
Ok(SVector::<f64, 1>::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::SVector;
fn cubic(x: &[f64]) -> SVector<f64, 1> {
SVector::<f64, 1>::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
实现了Lagrange插值、Hermite插值和三次样条插值。
科学常数
在 bacon_sci::constants
中定义了几个科学常数。数据来自NIST。2018 CODATA完整列表可作为哈希表提供。
特殊函数和多项式
目前,bacon_sci::special
允许您获取勒让德多项式、埃尔米特多项式、拉格朗日多项式和切比雪夫多项式。
数值微分和求积
bacon_sci::differentiate
允许数值计算一阶和二阶导数。 bacon_sci::integrate
实现了双曲正割-辛普森求积法、自适应辛普森规则、龙贝格积分以及几种自适应高斯积分方案。
依赖关系
~3.5MB
~77K SLoC