#integration #numerical #physics

quad-rs

Adaptive Gauss-Kronrod Integration in Rust

3 releases

0.1.2 Feb 28, 2022
0.1.1 Feb 6, 2022
0.1.0 Feb 6, 2022

#1206 in Math

MIT/Apache

57KB
1K SLoC

quad-rs

Gauss-Kronrod Integration in Rust.

Features

  • Adaptive integrator with high-accuracy
  • Native support for complex integrals and paths
  • Support for contour integration in the complex plane

Example - Real Integration

Dependencies:

[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();
}

Example - Complex Integration

Dependencies:

[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();
}

Example - Contour Integration

Dependencies:

[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();
}

Dependencies

~3.5MB
~77K SLoC