9个版本
0.4.0 | 2024年4月6日 |
---|---|
0.3.1 | 2023年6月11日 |
0.2.1 | 2023年6月11日 |
0.1.4 | 2023年6月11日 |
0.1.2 | 2023年5月4日 |
#556 in 数学
71 每月下载量
12KB
263 代码行
rusty-rootsearch
这是一个小的Rust包,它使用二分法对函数的根进行牛顿法求解。
它完全依赖于num_dual crate,该crate实现了浮点数的自动微分。
为了泛化实现,定义了Derivable
和Coercable
traits,允许用户定义自己的类型,这些类型可以在root_search
、newton
和find_bisections
函数中使用。 Derivable
trait用于定义数字的导数,在当前实现中与num_dual
crate配合良好。 Coercable
trait用于将浮点数转换为可导的类型。例如,当使用f64
类型时,该类型不可导,但可以转换为由num_dual
crate公开的Dual
类型。
示例
use rusty_rootsearch::{root_search};
use num_dual::*;
fn find_sine_roots() {
fn sine<D: DualNum<f32>>(x: D) -> D {
x.sin()
}
let roots = root_search::<_,Dual32,f32>(&sine, -5.0, 5.0, 2000, 1000, 0.0001);
for root in &roots.0 {
println!("root: {}", root);
}
assert_eq!(roots.0.len(), 3);
assert!(roots.0.contains(&std::f32::consts::PI));
assert!(roots.0.contains(&(-std::f32::consts::PI)));
assert!(roots.0.contains(&0.0));
}
依赖关系
~3MB
~62K SLoC