#微分 #数值

已删除 num-hyperdual

广义(超)双重数,用于精确(偏)导数的计算

0.1.1 2021年6月23日
0.1.0 2021年5月3日

#18 in #微分

MIT/Apache

110KB
2.5K SLoC

num-hyperdual

crate documentation minimum rustc 1.51

广义、递归、标量和向量(超)双重数,用于自动和精确计算(偏)导数。

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
num-hyperdual = "0.1"

示例

此示例定义了一个泛型函数,可以使用任何(超)双重数调用,并自动计算导数。

use num_hyperdual::*;
fn f<D: DualNum<f64>>(x: D, y: D) -> D {
    x.powi(3) * y.powi(2)
}
fn main() {
    let (x, y) = (5.0, 4.0);
    // Calculate a simple derivative
    let x_dual = Dual64::from(x).derive();
    let y_dual = Dual64::from(y);
    println!("{}", f(x_dual, y_dual));                      // 2000 + 1200ε
    // Calculate a gradient
    let x_dual2 = DualN64::<2>::from(x).derive(0);
    let y_dual2 = DualN64::<2>::from(y).derive(1);
    println!("{}", f(x_dual2, y_dual2).eps);                // [1200, 1000]
    // Calculate a Hessian
    let x_hyperdual2 = HyperDualN64::<2>::from(x).derive(0);
    let y_hyperdual2 = HyperDualN64::<2>::from(y).derive(1);
    println!("{}", f(x_hyperdual2, y_hyperdual2).hessian);  // [[480, 600], [600, 250]]
    // for x=cos(t) and y=sin(t) calculate the third derivative w.r.t. t
    let t = HD3_64::from(1.0).derive();
    println!("{}", f(t.cos(), t.sin()).v3);                 // 7.358639755305733
}

依赖项

~0.1–17MB
~215K SLoC