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);