Here are some items to get you started on Project 5C.
I have put two data files here:
http://www-users.math.umd.edu/~bhunt/data/
The file xvals.txt contains x values that you are trying to estimate,
and you can't download this file at this point. Your first task is to
download the file yvals.txt and use this data ("simulated
observations") to estimate the x values. I generated the data from
the following equations (in MATLAB notation):
x(n) = 0.99*x(n-1) + 0.1*randn
y(n) = x(n) + randn
Here randn represents (and in MATLAB, generates) a normally
distributed (pseudo-)random number with mean 0 and variance 1. In the
notation of the project handout, this means a=0.99, b=0.01 (this is
0.1 squared b/c b is a variance), and r=1.
At the end of class on Wednesday, I talked about applying the Kalman
filter to this type of model, but I didn't write down equations
specific to the model. Here is a source with scalar Kalman filter
equations and derivation:
http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ScalarKalman.html
Its notation is similar to the Wikipedia Kalman filter page's
notation, and differs from mine in the following ways (among others).
Both pages include a "control variable" u that you should ignore, i.e.
use u=0. They also use z, w, v (whereas I use y, delta, epsilon) to
represent observations, model noise, and observation noise
respectively.
You should start by programming and applying the scalar Kalman filter
to the data I'm giving you in yvals.txt. When I let you see the
values in xvals.txt, you can see how good your estimates are. But in
real life we have to evaluate the quality of our estimate of x values
without ever knowing the real x values. So it is useful to learn
another of evaluating the quality of your results, looking at
"forecast errors". If you estimate x(n) by xhat(n), then you can use
the model to predict the next observation y(n+1) to be 0.99*xhat(n).
As a baseline, you can compute the RMS difference between y(n+1) and
0.99*y(n). Then when you get estimates xhat(n) from the Kalman
filter, compute the RMS difference between y(n+1) and 0.99*xhat(n);
you should see an improved forecast error.
One way to think of the forecast error approach is that we are looking
at the problem of estimating/predicting y(n+1) from y(1), y(2), ...,
y(n), which is closely related to the data assimilation problem of
estimating x(n) from y(1), y(2), ..., y(n).
Let me know if you have any questions, any problems loading the data
(if you use MATLAB, "load" should work), and if not let me know when
you have some results -- then I'll let you look at xvals.txt and
discuss next steps.
Brian Hunt
Associate Chair for Undergraduate Studies
Department of Mathematics, University of Maryland