1#![allow(non_snake_case)]
2
3pub mod aberth;
4pub mod horner;
5pub mod matrix2;
6pub mod rootfinding;
7pub mod vector2;
8pub use crate::aberth::{aberth, aberth_mt, initial_aberth};
11pub use crate::matrix2::Matrix2;
12pub use crate::rootfinding::{
13 horner_eval, initial_autocorr, initial_guess, pbairstow_autocorr, pbairstow_autocorr_mt,
14 pbairstow_even, pbairstow_even_mt, Options,
15};
16pub use crate::vector2::Vector2;
17
18#[cfg(test)]
19mod tests {
20 use super::*;
21
22 #[test]
23 fn it_works() {
24 let a = Vector2::<f64>::new(1.2, 2.3);
25 a.scale(3.4);
26 a.unscale(3.4);
27 println!("{:?}", a.norm_sqr());
28 println!("{:?}", a.l1_norm());
29
30 let b = Vector2::<f64>::new(3.4, 4.5);
31 println!("{:?}", a + b);
32 println!("{:?}", a - b);
33
34 let mut a = Vector2::<f64>::new(4.2, 5.3);
35 a += b;
36 a -= b;
37 a *= 3.4;
38 a /= 3.4;
39 println!("{:?}", -a);
40 println!("{:?}", a * 3.4);
41 println!("{:?}", 3.4 * a);
42 println!("{:?}", a / 3.4);
43
44 let mm = Vector2::<Vector2<f64>>::new(a, b);
45 println!("{:?}", mm);
46
47 let mm = Matrix2::<f64>::new(a, b);
48 println!("{:?}", mm);
49
50 let b = Vector2::<i32>::new(42, 53);
51 println!("{:?}", b % 3);
52
53 let options = Options {
54 max_iters: 2000,
55 tol: 1e-14,
56 tol_ind: 1e-15,
57 };
58
59 let coeffs = vec![10.0, 34.0, 75.0, 94.0, 150.0, 94.0, 75.0, 34.0, 10.0];
60
61 let mut vrs = initial_guess(&coeffs);
62 let (niter, _found) = pbairstow_even(&coeffs, &mut vrs, &options);
63 println!("{niter}");
64
65 let mut vrs = initial_guess(&coeffs);
66 let (niter, _found) = pbairstow_even_mt(&coeffs, &mut vrs, &options);
67 println!("{niter}");
68
69 let mut vrs = initial_autocorr(&coeffs);
70 let (niter, _found) = pbairstow_autocorr(&coeffs, &mut vrs, &options);
71 println!("{niter}");
72
73 let mut vrs = initial_autocorr(&coeffs);
74 let (niter, _found) = pbairstow_autocorr_mt(&coeffs, &mut vrs, &options);
75 println!("{niter}");
76
77 let options = Options {
78 max_iters: 2000,
79 tol: 1e-12,
80 tol_ind: 1e-15,
81 };
82
83 let mut zs = initial_aberth(&coeffs);
84 let (niter, _found) = aberth(&coeffs, &mut zs, &options);
85 println!("{niter}");
86
87 let mut zs = initial_aberth(&coeffs);
88 let (niter, _found) = aberth_mt(&coeffs, &mut zs, &options);
89 println!("{niter}");
90 }
91}