#积分 #物理 #数值

quad-rs

自适应高精度Gauss-Kronrod积分在Rust中

3个版本

0.1.2 2022年2月28日
0.1.1 2022年2月6日
0.1.0 2022年2月6日

#1338 in 数学

MIT/Apache

57KB
1K SLoC

quad-rs

Rust中的Gauss-Kronrod积分。

特性

  • 自适应积分器,高精度
  • 原生支持复积分和路径
  • 支持复平面上的轮廓积分

示例 - 实数积分

依赖项

[dependencies]
quad_rs = "0.1"

:

use quad_rs::prelude::*;

fn integrand(x: f64) -> f64 {
    x.exp()
}

fn main() {
    let integrator = GaussKronrod::default();
    let range = -1f64..1f64;

    let result = integrator
		        .integrate(&integrand, range, None)
            .unwrap();
}

示例 - 复数积分

依赖项

[dependencies]
num_complex = "0.4.0"
quad_rs = "0.1"

:

use quad_rs::prelude::*;
use num_complex::Complex;
use std::ops::Range;

fn integrand(z: Complex<f64>) -> Complex<f64> {
    z.exp()
}

fn main() {
    let integrator = GaussKronrod::default();
    let range = Range {
			start: Complex::new(-1f64, -1f64),
			end: Complex::new(1f64, 1f64)
		};

    let result = integrator
		        .integrate(&integrand, range, None)
            .unwrap();
}

示例 - 轮廓积分

依赖项

[dependencies]
num_complex = "0.4.0"
quad_rs = "0.1"

:

use quad_rs::{Contour, Direction, prelude::*};
use num_complex::Complex;

fn integrand(z: Complex<f64>) -> Complex<f64> {
    z.exp()
}

fn main() {
    let integrator = GaussKronrod::default();
    let x_range =-5f64..5f64;
    let y_range = -5f64..5f64;
    let contour = Contour::generate_rectangular(&x_range, &y_range, Direction::Clockwise);

    let result = integrator
		        .path_integrate(&integrand, contour)
            .unwrap();
}

依赖项

~3.5MB
~77K SLoC