pub fn gradient_descent<F, G>(
_f: &F,
grad: &G,
start: &[f64],
learning_rate: f64,
max_iter: usize,
) -> Vec<f64>Expand description
Optimize using gradient descent
§Arguments
f- Objective function to minimizegrad- Gradient functionstart- Starting pointlearning_rate- Step size (default: 0.01)max_iter- Maximum iterations (default: 1000)
§Example
use dodecet_encoder::calculus;
let f = |p: &[f64]| (p[0] - 1.0).powi(2) + (p[1] - 2.0).powi(2);
let grad = |p: &[f64]| vec![2.0 * (p[0] - 1.0), 2.0 * (p[1] - 2.0)];
let result = calculus::gradient_descent(&f, &grad, &[0.0, 0.0], 0.1, 100);
assert!((result[0] - 1.0).abs() < 0.1);
assert!((result[1] - 2.0).abs() < 0.1);