#automatic-differentiation #stan

dorset

A rust implementation of Stan Math automatic differentiation library

1 unstable release

Uses old Rust 2015

0.1.0 Mar 10, 2018

#44 in #automatic-differentiation

BSD-3-Clause

34KB
948 lines

Table of Contents

  1. dorset, a rust implementation of Stan Math library.
    1. Example
  2. Lisense

dorset, a rust implementation of Stan Math library.

The project is not intended to be an exact port of Math, but as a proof of concept to take advantage of some Rust features in automatic differentiation, hence meant to be experimental.

Example

Below is how to do the problem example in section 2.1 of the Stan Math paper, using dorset.

#[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
}

Lisense

BSD-3-Clause

Dependencies

~325KB