#mathematics #science #integration

cuba

A Rust wrapper for the C Cuba integration library

13 releases

new 0.1.12 May 17, 2019
0.1.11 Mar 27, 2019
0.1.9 Nov 28, 2018
0.1.3 Oct 30, 2018

#51 in Math

Download history 1/week @ 2019-02-01 1/week @ 2019-02-08 1/week @ 2019-02-22 20/week @ 2019-03-01 13/week @ 2019-03-08 27/week @ 2019-03-15 66/week @ 2019-03-22 6/week @ 2019-03-29 17/week @ 2019-04-05 5/week @ 2019-04-12 1/week @ 2019-04-19 2/week @ 2019-04-26 13/week @ 2019-05-03 23/week @ 2019-05-10

66 downloads per month

MIT license

366KB
399 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