Fri, 06 Dec 2024 14:27:14 -0500
Adjust plot style
37 | 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 |