diff -r aa6129697116 -r d7cd14b8ccc0 src/newton.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/newton.rs Wed Dec 04 23:19:46 2024 -0500 @@ -0,0 +1,34 @@ +/*! +Newton method in 2D. +*/ + +use alg_tools::types::*; + +#[inline] +pub fn newton_sym1x1( + g : impl Fn(F) -> (F, F), + mut x : F, + iters : usize +) -> F { + for _i in 0..iters { + let (a, b) = g(x); + x -= b / a + } + x +} + +#[inline] +pub fn newton_sym2x2( + g : impl Fn(F, F) -> ([F; 3], [F; 2]), + [mut x1, mut x2] : [F; 2], + iters : usize +) -> [F; 2] { + for _i in 0..iters { + let ([a11, a12, a22], [b1, b2]) = g(x1, x2); + let q = a11 * a22 - a12 * a12; + x1 -= (a22 * b1 - a12 * b2) / q; + x2 -= (a11 * b2 - a12 * b1) / q; + } + [x1, x2] +} +