Function rv::misc::try_quad[][src]

pub fn try_quad<F, E>(func: F, a: f64, b: f64) -> Result<f64, E> where
    F: Fn(f64) -> Result<f64, E>, 

Adaptive Simpson’s quadrature on functions that can fail.

Example

Integrate f: x2 over the interval [0, 1].

use rv::misc::try_quad;

let func = |x: f64| {
    if x > 2.0 {
        Err(String::from("> 2.0"))
    } else {
        Ok(x.powi(2))
    }
};
let q = try_quad(func, 0.0, 1.0).unwrap();

assert!((q - 1.0/3.0).abs() < 1E-8);

Errors if the function to evaluate returns an error

use rv::misc::try_quad;

let func = |x: f64| {
    if x > 0.5 {
        Err(String::from("whoops"))
    } else {
        Ok(x.powi(2))
    }
};
let q = try_quad(func, 0.0, 1.0);

assert!(q.is_err());