#quadrature #gaussian #integration #numeric

gauss-quad

用于应用高斯求积法来积分函数的库

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

Download history 34/week @ 2024-05-04 85/week @ 2024-05-11 126/week @ 2024-05-18 54/week @ 2024-05-25 69/week @ 2024-06-01 48/week @ 2024-06-08 76/week @ 2024-06-15 60/week @ 2024-06-22 270/week @ 2024-06-29 81/week @ 2024-07-06 51/week @ 2024-07-13 256/week @ 2024-07-20 494/week @ 2024-07-27 505/week @ 2024-08-03 434/week @ 2024-08-10 291/week @ 2024-08-17

每月下载量 1,790
9 个软件包中使用(直接使用 4 个)

MIT/Apache 许可协议

275KB
2.5K SLoC

gauss-quad

Latest Version Build Status codecov

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