extern crate au;
use au::{signals::discrete, Ssd};
fn main() {
let susceptible = 0;
let infected = 1;
let recovered = 2;
let deceased = 3;
let a = [
0.95, 0.04, 0.00, 0.00, 0.05, 0.85, 0.00, 0.00, 0.00, 0.10, 1.00, 0.00, 0.00, 0.01, 0.00, 1.00, ];
let b = [0., 0., 0., 0.];
let c = [
1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 1., ];
let d = [0., 0., 0., 0.];
let sys = Ssd::new_from_slice(4, 1, 4, &a, &b, &c, &d);
println!("{}", &sys);
let steps = 200;
let initial_state = [1., 0., 0., 0.];
let te = sys.evolution_fn(steps, discrete::zero(1), &initial_state);
println!("Time Susceptible Infected Recovered Deceased");
for step in te.step_by(10) {
println!(
"{}\t{:.3}\t{:.3}\t{:.3}\t{:.3}",
step.time(),
step.output()[susceptible],
step.output()[infected],
step.output()[recovered],
step.output()[deceased],
);
}
}