11 个版本
新版本 0.2.1 | 2024年8月24日 |
---|---|
0.2.0 | 2024年7月29日 |
0.1.9 | 2024年6月30日 |
0.1.8 | 2023年11月21日 |
0.1.3 | 2019年11月30日 |
在 数学 类别下排名 54
每月下载量 1,790
在 9 个软件包中使用(直接使用 4 个)
275KB
2.5K SLoC
gauss-quad
gauss-quad
软件包是一个小型库,用于通过高斯求积法计算以下类型的积分
$$\int_a^b f(x) w(x) \mathrm{d}x$$
。
要使用该软件包,必须在程序中包含所需的求积规则,例如对于高斯-勒让德规则
use gauss_quad::GaussLegendre;
通用的调用结构是首先初始化 n 点求积规则,通过
let quad = QUADRATURE_RULE::new(n)?;
设置度数 n,其中 QUADRATURE_RULE 目前可以设置为计算以下内容
QUADRATURE_RULE | 积分 |
---|---|
中点 | $$\int_a^b f(x) \mathrm{d}x$$ |
辛普森法 | $$\int_a^b f(x) \mathrm{d}x$$ |
高斯-勒让德 | $$\int_a^b f(x) \mathrm{d}x$$ |
高斯-雅可比 | $$\int_a^b f(x)(1-x)^\alpha (1+x)^\beta \mathrm{d}x$$ |
高斯-拉盖尔 | $$\int_{0}^\infty f(x)x^\alpha e^{-x} \mathrm{d}x$$ |
高斯-埃尔米特 | $$\int_{-\infty}^\infty f(x) e^{-x^2} \mathrm{d}x$$ |
对于需要额外参数的求积规则,如高斯-拉盖尔和高斯-雅可比,必须在初始化时添加参数,例如
let quad = GaussLaguerre::new(n, alpha)?;
然后,要计算函数的积分,调用
let integral = quad.integrate(a, b, f(x));
其中 a 和 b(都是 f64)是积分界限,f(x) 是被积函数(Fn(f64) -> f64)。例如,要积分从 0..1 的抛物线,可以使用 lambda 表达式作为被积函数,并调用
let integral = quad.integrate(0.0, 1.0, |x| x*x);
如果积分是不恰当的,如在高斯-拉盖尔和高斯-埃尔米特积分的情况下,不应传递积分界限,调用将简化为
let integral = quad.integrate(f(x));
规则可以嵌套到双重和更高阶的积分中
let double_integral = quad.integrate(a, b, |x| quad.integrate(c(x), d(x), |y| f(x, y)));
如果被积函数的计算时间很大(> 100µs),可以使用 rayon 功能在多个核心上并行化计算(对于低计算量,任何增益都会被并行化的开销所掩盖)
let slow_integral = quad.par_integrate(a, b, |x| f(x));
依赖项
~5MB
~99K SLoC