8个版本
使用旧Rust 2015
0.0.8 | 2022年12月21日 |
---|---|
0.0.7 | 2021年6月17日 |
0.0.6 | 2019年12月22日 |
0.0.5 | 2019年1月17日 |
0.0.1 | 2015年3月23日 |
#17 in 数学
61,137 每月下载量
用于 62 个crates (23直接)
155KB
3K SLoC
数值求根算法的知名算法库。
功能
- 迭代逼近
- 解多项式方程
使用方法
extern crate roots;
use roots::Roots;
use roots::find_roots_cubic;
use roots::find_root_brent;
use roots::find_root_secant;
// Find the root of a complex function in the area determined by a simpler polynom
fn find_solution<F>(enormous_function: F, root_area_polynom:(f64,f64,f64,f64)) -> Option<f64>
where F: Fn(f64) -> f64
{
// de-structure polynom coefficients
match root_area_polynom {
(a3,a2,a1,a0) => {
// Find root area by solving the polynom
match find_roots_cubic(a3,a2,a1,a0) {
// Try to find the root by one of iterative methods
Roots::Three(roots) => {
// Three roots found, normal case
find_root_brent(roots[0],roots[2],enormous_function, &mut 1e-8f64).ok()
},
Roots::Two(roots) => {
// Two roots found, High precision required
find_root_brent(roots[0],roots[1],enormous_function,&mut 1e-15f64).ok()
},
Roots::One(roots) => {
// One root found, Low precision is enough
find_root_secant(roots[0]-1f64,roots[0]+1f64,enormous_function,&mut 1e-3f64).ok()
},
_ => None,
}
},
_ => None,
}
}