Skip to main content

finite_difference_gradient_dyn

Function finite_difference_gradient_dyn 

Source
pub fn finite_difference_gradient_dyn<T: FloatScalar>(
    f: impl FnMut(&DynVector<T>) -> T,
    x: &DynVector<T>,
) -> DynVector<T>
Expand description

Approximate the gradient of f: R^n → R using forward finite differences.

Uses step size h_j = sqrt(ε) * max(|x_j|, 1) for each component, requiring n + 1 function evaluations.

§Example

use numeris::optim::finite_difference_gradient_dyn;
use numeris::DynVector;

let x = DynVector::from_slice(&[3.0_f64, 4.0]);
let g = finite_difference_gradient_dyn(
    |x: &DynVector<f64>| x[0] * x[0] + x[1] * x[1] * 2.0,
    &x,
);
assert!((g[0] - 6.0).abs() < 1e-5);
assert!((g[1] - 16.0).abs() < 1e-5);