3个版本
使用旧的Rust 2015
0.1.2 | 2017年1月9日 |
---|---|
0.1.1 | 2016年12月12日 |
0.1.0 | 2016年12月12日 |
#1436 in 数学
10,089 每月下载量
在 6 crates 中使用
53KB
971 行
此库提供了一维、实值函数在有限区间上的快速数值积分。它是纯安全Rust,且跨平台。
主要函数是 quadrature::integrate
,它使用双指数算法。它是将C++中的快速数值积分移植到Rust。原始代码由John D. Cook编写,并使用BSD许可证。
双指数算法具有自然自适应性,当误差减少到所需阈值以下时停止调用被积函数。它也不进行内存分配。没有box,没有vec等。它有一个硬编码的最大约350次函数评估。这保证了算法将返回。算法的误差随着函数评估次数的指数级减少,具体为O(exp(-cN/log(N)))。因此,如果350次函数评估没有给出所需的精度,那么程序员可能需要通过在奇点处分割范围或其他准备技术来提供一些指导。
其他算法
提供与 quadrature::integrate
具有相同签名的 clenshaw_curtis
模块。实现的Clenshaw-Curtis求积是自适应的,但是每次自适应时权重都会改变。不幸的是,这意味着需要重新计算每一层的和。它也不在堆上进行内存分配,但是它使用一个 [f64; 129]
来存储函数值。它有一个硬编码的最大约257次函数评估。这保证了算法将返回。Clenshaw-Curtis算法可以精确积分N次多项式。此实现从约5的N开始,增加到约257。一般来说,算法的误差随着函数评估次数的指数级减少。总之,Clenshaw-Curtis通常比双指数算法使用更多的栈空间,并且运行得更慢,除非Clenshaw-Curtis可以得到精确解。
测试
我已经使用以下进行测试 rust 1.0
> rustup override set 1.0.0
> cargo test
> rustup override set nightly
> cargo test
> cargo bench