reverse_diff

Function reverse_diff 

Source
pub fn reverse_diff<T, F>(f: F, x: T) -> (T, T)
where T: Float, F: FnOnce(Var<T>) -> Var<T>,
Expand description

Computes the value and derivative of a function using reverse-mode AD.

This is the reverse-mode equivalent of forward-mode differentiation. The function f is evaluated at x, and both the value and derivative are returned.

§Examples

use autodiff::reverse_diff;

// f(x) = x² at x = 3
let (val, deriv) = reverse_diff(|x| x.clone() * x, 3.0);
assert_eq!(val, 9.0);    // f(3) = 9
assert_eq!(deriv, 6.0);  // f'(3) = 2x = 6

Reuse the same function at different points:

use autodiff::{reverse_diff, Var};

let f = |x: Var<f64>| x.clone() * x.clone() - x;

let (v1, d1) = reverse_diff(f, 2.0);
let (v2, d2) = reverse_diff(f, 5.0);

assert_eq!((v1, d1), (2.0, 3.0));   // f(2) = 2, f'(2) = 3
assert_eq!((v2, d2), (20.0, 9.0));  // f(5) = 20, f'(5) = 9