#mathematics #science #integration

cuba

A Rust wrapper for the C Cuba integration library

17 releases

0.2.2 Mar 30, 2020
0.2.1 Mar 29, 2020
0.1.14 Mar 26, 2020
0.1.13 May 26, 2019
0.1.3 Oct 30, 2018

#38 in Math

Download history 15/week @ 2020-03-14 67/week @ 2020-03-21 66/week @ 2020-03-28 22/week @ 2020-04-04 104/week @ 2020-04-11 3/week @ 2020-04-18 2/week @ 2020-04-25 4/week @ 2020-05-02 2/week @ 2020-05-09 22/week @ 2020-05-23 35/week @ 2020-05-30 22/week @ 2020-06-06 17/week @ 2020-06-13 17/week @ 2020-06-27

134 downloads per month

MIT license

370KB
708 lines

Rust Cuba interface

This library provides safe access to the Cuba integration library.

Example

Below we show an example of an integration of a test function with user data (this can be of any type):

extern crate cuba;
use cuba::{CubaIntegrator, CubaVerbosity};

#[derive(Debug)]
struct TestUserData {
    f1: f64,
    f2: f64,
}

#[inline(always)]
fn test_integrand(x: &[f64], f: &mut [f64], user_data: &mut TestUserData) -> i32 {
    f[0] = (x[0] * x[1]).sin() * user_data.f1;
    f[1] = (x[1] * x[1]).cos() * user_data.f2;
    0
}

fn main() {
    let mut ci = CubaIntegrator::new(test_integrand);
    ci.set_mineval(10).set_maxeval(10000);

    let r = ci.vegas(
        2,
        2,
        CubaVerbosity::Progress,
        TestUserData { f1: 5., f2: 7. },
    );
    println!("{:#?}", r);
}

lib.rs:

Rust binding for the Cuba integrator.

Cuba (http://www.feynarts.de/cuba/) is written by Thomas Hahn.

Usage

Create a CubaIntegrator and supply it with a function of the form

fn test_integrand(x: &[f64], f: &mut [f64], user_data: &mut T) -> i32 {
}

where T can be any type. If you don't want to provide user data, simply make T a usize and provide any number.

Example

extern crate cuba;
use cuba::{CubaIntegrator, CubaVerbosity};

#[derive(Debug)]
struct TestUserData {
    f1: f64,
    f2: f64,
}

#[inline(always)]
fn test_integrand(x: &[f64], f: &mut [f64], user_data: &mut TestUserData) -> i32 {
    f[0] = (x[0] * x[1]).sin() * user_data.f1;
    f[1] = (x[1] * x[1]).cos() * user_data.f2;
    0
}

fn main() {
    let mut ci = CubaIntegrator::new(test_integrand);
    ci.set_mineval(10).set_maxeval(10000);

    let r = ci.vegas(
        2,
        2,
        CubaVerbosity::Progress,
        TestUserData { f1: 5., f2: 7. },
    );
    println!("{:#?}", r);
}

Dependencies