autodiff

An auto-differentiation library.

On crates.io On docs.rs Build status

Currently supported features:

To compute a derivative with respect to a variable using this library:

  1. create a variable of type F, which implements the Float trait from the num-traits crate.

  2. compute your function using this variable as the input.

  3. request the derivative from this variable using the deriv method.

Disclaimer

This library is a work in progress and is not ready for production use.

Examples

The following example differentiates a 1D function defined by a closure.

``rust // Define a functionf(x) = e^{-0.5*x^2}`. let f = |x: F| (-x * x / F::cst(2.0)).exp();

// Differentiate `f` at zero.
println!("{}", diff(f, 0.0)); // prints `0`

```

To compute the gradient of a function, use the function grad as follows:

``rust // Define a functionf(x,y) = x*y^2`. let f = |x: &[F]| x[0] * x[1] * x[1];

// Differentiate `f` at `(1,2)`.
let g = grad(f, &vec![1.0, 2.0]);
println!("({}, {})", g[0], g[1]); // prints `(4, 4)`

```

Compute a specific derivative of a multi-variable function:

``rust // Define a functionf(x,y) = x*y^2`. let f = |v: &[F]| v[0] * v[1] * v[1];

 // Differentiate `f` at `(1,2)` with respect to `x` (the first unknown) only.
 let v = vec![
     F::var(1.0), // Create a variable.
     F::cst(2.0), // Create a constant.
 ];
 println!("{}", f(&v).deriv()); // prints `4`

```

License

This repository is licensed under either of

at your option.

Acknowledgements

This library started as a fork of rust-ad.