bairstow/
lib.rs

1#![allow(non_snake_case)]
2
3pub mod aberth;
4pub mod horner;
5pub mod matrix2;
6pub mod rootfinding;
7pub mod vector2;
8// pub mod robin;
9
10pub 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}