1use crate::structure::polynomial::Polynomial;
2
3pub fn least_square(node_x: Vec<f64>, node_y: Vec<f64>) -> Polynomial {
23 let l = node_x.len();
24 assert_eq!(l, node_y.len());
25
26 let mut x_bar = 0f64;
27 let mut t_bar = 0f64;
28 let mut xt_bar = 0f64;
29 let mut x_sq_bar = 0f64;
30 for i in 0..l {
31 let x = node_x[i];
32 let t = node_y[i];
33
34 x_bar += x;
35 t_bar += t;
36 xt_bar += x * t;
37 x_sq_bar += x * x;
38 }
39 x_bar /= l as f64;
40 t_bar /= l as f64;
41 xt_bar /= l as f64;
42 x_sq_bar /= l as f64;
43
44 let x_bar_sq = x_bar.clone() * x_bar.clone();
45 let x_bar_t_bar = x_bar.clone() * t_bar.clone();
46
47 let w1 = (xt_bar - x_bar_t_bar) / (x_sq_bar - x_bar_sq);
48 let w0 = t_bar - w1 * x_bar;
49
50 Polynomial::new(vec![w1, w0])
51}
52
53