#自动微分 #stan

多塞特

A rust implementation of Stan Math automatic differentiation library

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2018年3月10日

#36 in #自动微分

BSD-3-Clause

34KB
948

目录

  1. 多塞特,是 Stan Math 库的 Rust 实现。
    1. 示例
  2. 许可协议

多塞特,是 Stan Math 库的 Rust 实现。

本项目并非打算作为 Math 的精确移植,而是作为一个证明概念,利用 Rust 中的自动微分的一些特性,因此旨在作为实验性质。

示例

以下是如何使用 多塞特 来完成 Stan Math 论文中第 2.1 节的问题示例

#[macro_use]
extern crate dorset;
use dorset::*;

fn main() {
    let y: Real = 1.3;
    let s = cstack!();
    let (mu, sigma) = (var!(s, 0.5), var!(s, 1.2));
    let mut lp = var!(s);
    lp = &lp - 0.5 * (2.0 * PI).ln();
    lp = &lp - ln(&sigma);
    lp = &lp - 0.5 * pow((y - &mu) / &sigma, 2.0);
    lp.grad();
    println!("f(mu, sigma) = {0:.6}", lp.val()); // f(mu, sigma) = -1.323482
    println!("d.f/d.mu = {0:.6}", mu.adj());     // d.f/d.mu = 0.555556
    println!("d.f/d.sigma = {0:.6}", sigma.adj()); // d.f/d.sigma = -0.462963
}

许可协议

BSD-3-Clause

依赖项

~320KB