src/newton.rs

changeset 37
d7cd14b8ccc0
child 46
90cc221eb52b
equal deleted inserted replaced
34:aa6129697116 37:d7cd14b8ccc0
1 /*!
2 Newton method in 2D.
3 */
4
5 use alg_tools::types::*;
6
7 #[inline]
8 pub fn newton_sym1x1<F : Float>(
9 g : impl Fn(F) -> (F, F),
10 mut x : F,
11 iters : usize
12 ) -> F {
13 for _i in 0..iters {
14 let (a, b) = g(x);
15 x -= b / a
16 }
17 x
18 }
19
20 #[inline]
21 pub fn newton_sym2x2<F : Float>(
22 g : impl Fn(F, F) -> ([F; 3], [F; 2]),
23 [mut x1, mut x2] : [F; 2],
24 iters : usize
25 ) -> [F; 2] {
26 for _i in 0..iters {
27 let ([a11, a12, a22], [b1, b2]) = g(x1, x2);
28 let q = a11 * a22 - a12 * a12;
29 x1 -= (a22 * b1 - a12 * b2) / q;
30 x2 -= (a11 * b2 - a12 * b1) / q;
31 }
32 [x1, x2]
33 }
34

mercurial