1pub mod state_space;
2
3pub use state_space::*;
4
5#[cfg(test)]
6mod tests {
7 use array_matrix::{MAdd, MMul};
8
9 use crate::StateSpace;
10
11 #[test]
12 fn step()
13 {
14 let ss = StateSpace::new_control_canonical_form([10.0, 2.0], [0.0, 1.0]);
15
16 let mut x = [[0.0]; 2];
17 let mut y = vec![];
18 let mut u = 0.0;
19
20 const FS: f64 = 100.0;
21 const T: f64 = 20.0;
22 const N: usize = (T*FS) as usize;
23 let dt = 1.0/FS;
24
25 for _ in 0..N
26 {
27 y.push(ss.y(x, u));
28 x = x.add(ss.dxdt(x, u).mul(dt));
29 u = 1.0;
30 }
31
32 let y_str: Vec<String> = y.iter().map(|yn| yn.to_string()).collect();
33
34 println!("{}", y_str.join(", "));
35 }
36
37 #[test]
38 fn steady_state_error()
39 {
40 let ss = StateSpace::new_control_canonical_form([10.0, 1.0], [0.0, 1.0]);
41
42 let mut x = [[0.0]; 2];
43 let mut u = 0.0;
44
45 const FS: f64 = 100.0;
46 const T: f64 = 200.0;
47 const N: usize = (T*FS) as usize;
48 let dt = 1.0/FS;
49
50 for _ in 0..N
51 {
52 x = x.add(ss.dxdt(x, u).mul(dt));
53 u = 1.0;
54 }
55 let y_ss = ss.y(x, u);
56 let e_ss = y_ss - u;
58 println!("{}", e_ss)
59 }
60}