#积分 #科学 #API 绑定

cuba

Rust 对 C Cuba 集成库的包装

19 个版本

使用旧的 Rust 2015

0.2.4 2020 年 12 月 5 日
0.2.3 2020 年 9 月 8 日
0.2.2 2020 年 3 月 30 日
0.1.14 2020 年 3 月 26 日
0.1.3 2018 年 10 月 30 日

1216 in 数学

MIT 许可证

370KB
708

Rust Cuba 接口

该库提供对 Cuba 集成库(版本 4.2.1)的安全访问。

示例

以下我们展示了将测试函数与用户数据(可以是任何类型)集成的示例

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

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

#[inline(always)]
fn integrand(
    x: &[f64],
    f: &mut [f64],
    user_data: &mut UserData,
    nvec: usize,
    _core: i32,
    _weight: &[f64],
    _iter: usize,
) -> Result<(), &'static str> {
    for i in 0..nvec {
        f[i * 2] = (x[i * 2] * x[i * 2]).sin() * user_data.f1;
        f[i * 2 + 1] = (x[i * 2 + 1] * x[i * 2 + 1]).cos() * user_data.f2;
    }

    Ok(())
}

fn main() {
    let mut ci = CubaIntegrator::new();
    ci.set_mineval(10)
        .set_maxeval(10000000)
        .set_epsrel(0.0001)
        .set_seed(0) // use quasi-random numbers
        .set_cores(2, 1000);

    let data = UserData { f1: 5., f2: 7. };
    let r = ci.vegas(2, 2, 4, CubaVerbosity::Progress, 0, integrand, data);

    println!("{:#?}", r);
}

依赖项