Putting things together
Here is how to set up and run this model using our KalmanFilter struct.
use nalgebra::{DMatrix, DVector};
use kalman_filter::KalmanFilter;
fn main() {
// Define matrices
let a_state = DMatrix::from_row_slice(2, 2, &[1.0, 1.0,
0.0, 1.0]);
let h_obs = DMatrix::from_row_slice(1, 2, &[1.0, 0.0]);
let q = DMatrix::identity(2, 2) * 0.01;
let r = DMatrix::identity(1, 1) * 0.1;
// Initial state (position=0, velocity=1)
let init_state = DVector::from_row_slice(&[0.0, 1.0]);
let init_cov = DMatrix::identity(2, 2);
// Build the filter
let mut kf = KalmanFilter::new(
Some(init_state),
Some(init_cov),
a_state,
h_obs,
q,
r,
).unwrap();
// Simulate one step with an observation
let observation = DVector::from_row_slice(&[0.9]);
kf.step(Some(observation)).unwrap();
println!("Updated state: {:?}", kf.state());
}