Skip to main content

finite_difference_gradient_dyn_par

Function finite_difference_gradient_dyn_par 

Source
pub fn finite_difference_gradient_dyn_par<T: FloatScalar + Send + Sync>(
    f: impl Fn(&DynVector<T>) -> T + Sync + Send,
    x: &DynVector<T>,
) -> DynVector<T>
Expand description

Parallel forward-difference gradient (requires the rayon feature).

The parallel counterpart of finite_difference_gradient_dyn: the n components are computed across threads into disjoint elements (result independent of thread count). Requires Fn + Sync + Send; kept separate so enabling rayon never changes the sequential routine’s signature.

§Example

use numeris::optim::finite_difference_gradient_dyn_par;
use numeris::DynVector;

let x = DynVector::from_slice(&[3.0_f64, 4.0]);
let g = finite_difference_gradient_dyn_par(
    |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);