#root-finding #auto-diff #newton #derivable #rootsearch #num-dual #shoulders

rusty-rootsearch

此包实现了基于num_dual crate肩上构建的一般一维根查找算法。

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 数学

Download history 2/week @ 2024-04-13 1/week @ 2024-05-25 5/week @ 2024-06-29 53/week @ 2024-07-06 18/week @ 2024-07-27

71 每月下载量

MIT许可证

12KB
263 代码行

rusty-rootsearch

这是一个小的Rust包,它使用二分法对函数的根进行牛顿法求解。

它完全依赖于num_dual crate,该crate实现了浮点数的自动微分。

为了泛化实现,定义了DerivableCoercable traits,允许用户定义自己的类型,这些类型可以在root_searchnewtonfind_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