1 个不稳定版本

使用旧的 Rust 2015

0.0.0 2018年3月23日

#8 in #na

CC0 许可协议

6KB

sl:一个科学库

分析包

  • na
    • diff(数值微分)
    • quad(数值积分)
    • ode(常微分方程)
    • interpolation(从数据中获得函数)

数学函数包

  • mf(数学函数)
    • sf(特殊函数)

参见 特殊函数的实现

绘图包

  • gx
    • Canvas(绘图画布)

示例

extern crate sl;

use sl::na::quad::gauss;
use sl::na::ode::euler;

// Calculate ln(x) = integral(1 to x) 1/t dt
// by Gaussian quadrature.
fn ln(x: f64) -> f64 {
    return gauss(&|t| 1.0/t, 1.0, x, 10);
}

fn main() {
    // Calculate exp(x) from the ODE y'=y by the Euler method.
    // We have y'=g(x,y), g(x,y)=y.
    let g = |_,y| y;
    let x0 = 0.0;
    let y0 = 1.0;
    let h = 0.001;
    let n = 10000;

    let exp = euler(Box::new(g),x0,y0,h,0,n);

    for i in 1..6 {
        let x = i as f64;
        println!("{:8.4} |{:8.4} |{:8.4} |{:8.4}",x,ln(x),exp(x),exp(ln(x)));
    }
}

// Output:
// 1.0000 |  0.0000 |  2.7169 |  1.0000
// 2.0000 |  0.6931 |  7.3817 |  1.9993
// 3.0000 |  1.0986 | 20.0555 |  2.9984
// 4.0000 |  1.3863 | 54.4891 |  3.9972
// 5.0000 |  1.6094 |148.0428 |  4.9960

依赖

~520KB
~11K SLoC