mgh 0.1.16

A Collection of Moré-Garbow-Hilstrom https://dl.acm.org/doi/pdf/10.1145/355934.355936
Documentation
pub fn beale(x: &[f64]) -> f64 {
    let &[x1, x2] = x else {
        panic!("input dimension must be 2");
    };
    let y = [1.5, 2.25, 2.625];

    let mut res = 0.0;
    for i in 1..4 {
        let index = i - 1;

        // f_i(x) = y_i - x_1(1 - x_2^i)
        let f = y[index] - x1 * (1. - x2.powi(i as i32));
        res += f.powi(2);
    }
    res
}

pub fn init() -> Vec<f64> {
    vec![1., 1.]
}

pub fn min() -> Vec<f64> {
    vec![3., 0.5]
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_beale() {
        let x = init();
        let val = beale(&x);
        assert!(val.is_finite());
    }

    #[test]
    fn test_min() {
        let x = min();
        let val = beale(&x);
        assert_eq!(val, 0.);
    }
}