Crate dorset [−] [src]
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 the crate is meant to be experimental.
Below is how to do the problem example in section 2.1 of
the Stan Math paper(Bob Carpenter, Matthew D. Hoffman, Marcus Brubaker, Daniel Lee, Peter Li, and Michael J. Betancourt. 2015. The Stan Math Library: Reverse-Mode Automatic Differentiation in C++. arXiv 1509.07164),
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 }
Re-exports
pub use core::*; |
pub use operations::*; |
Modules
core |
The core data structures for the autodiff expression graph and memory management. |
macros | |
operations |
Macros
cstack |
Initialize a new memory arena; |
var |
Constructs a new |
Structs
Rc |
A single-threaded reference-counting pointer. 'Rc' stands for 'Reference Counted'. |
RefCell |
A mutable memory location with dynamically checked borrow rules |