#自动微分 #数字 # #梯度 #多维 #自动微分

hyperdual

具有自动微分多变量向量函数梯度的完整功能的双数实现

18个版本 (4个稳定版)

使用旧的Rust 2015

1.3.0 2024年7月7日
1.2.0 2023年2月15日
1.1.0 2022年6月1日
1.0.0 2022年3月24日
0.3.1 2019年7月16日

#68 in 数学

Download history 204/week @ 2024-05-03 220/week @ 2024-05-10 196/week @ 2024-05-17 93/week @ 2024-05-24 207/week @ 2024-05-31 193/week @ 2024-06-07 177/week @ 2024-06-14 341/week @ 2024-06-21 219/week @ 2024-06-28 273/week @ 2024-07-05 177/week @ 2024-07-12 281/week @ 2024-07-19 621/week @ 2024-07-26 291/week @ 2024-08-02 337/week @ 2024-08-09 287/week @ 2024-08-16

1,616 每月下载量
用于 6 个crates (2 个直接使用)

MIT 许可证

40KB
1K SLoC

hyperdual 构建状态

具有自动微分多变量向量函数梯度的完整功能的双数实现

使用方法

extern crate hyperdual;

use hyperdual::{Dual, Hyperdual, Float, differentiate};

fn main() {
    // find partial derivative at x=4.0
    let univariate = differentiate(4.0f64, |x| x.sqrt() + Dual::from_real(1.0));
    assert!((univariate - 0.4500).abs() < 1e-16, "wrong derivative");

    // find the partial derivatives of a multivariate function
    let x: Hyperdual<f64, 3> = Hyperdual::from_slice(&[4.0, 1.0, 0.0]);
    let y: Hyperdual<f64, 3> = Hyperdual::from_slice(&[5.0, 0.0, 1.0]);

    let multivariate = x * x + (x * y).sin() + y.powi(3);
    assert!((res[0] - 141.91294525072763).abs() < 1e-13, "f(4, 5) incorrect");
    assert!((res[1] - 10.04041030906696).abs() < 1e-13, "df/dx(4, 5) incorrect");
    assert!((res[2] - 76.63232824725357).abs() < 1e-13, "df/dy(4, 5) incorrect");
}

变更日志

版本 0.5.2

  • 重新添加对nalgebra自有向量的支持,用于尚未支持const generics的结构
先前的工作

依赖

~3MB
~57K SLoC