I've derived the x + Ky form for the univariate kalman filter.
I completely reordered material, cutting about 10 pages (pdf)
of material. I made the connection between the bayesian form
and orthogonal form more explicit.
Probably there are a lot of grammatical errors, but I wanted to get
these checked in.
I also altered the css - mainly the font.
Added the likelihood equations/form from the discrete bayes
chapter to better tie in that form of reasoning. then I converted
the 1d equations to the orthogonal projection form to show how
the Kalman gain is computed and where the residual comes from
computationally. This should make the full KF equations much more
approachable.
All my code in this chapter hard coded the computation of the
likelihood inside the update() function, where it had no business.
Also, my treatment of the likelihood was rather hand wavey. By
pulling it out of update() and maing it explicit I have created
a firm foundation for the rest of the book.
I was using a bunch of variable names that weren't consistent
with the rest of the book (but perhaps are more consistent with
the literature). It just made everything more challenging than
it needed to be, so instead of \mu and \sigma (e.g.) I use
\bar x and \bar P.
I also am in the middle of rewriting some sections for clarity,
but that work is not completed.
I added titles so you can see where in the processing the
graph is.
This surfaced a bug in matplotlib 1.5 (#5399) so I added
some code to work around that.
Pretty happy with it now. Needs copy editing, and probably an
easier introduction to convey the basic idea. Moved from a class
based approach to a procedural approach, and I like that very much.
Changed default sizes of plots, changed the book template for
pdf creation, and lots of minor edits, most changing bold to
italic, and removing italic for emphasis.
Moved book_format out of code to simplify importing it into the
notebooks. Added code to it to suppress future warnings from
matplotlib 1.4.3, and to set the numpy print precision to 3
decimal places.
Matplotlib 1.5 deprecrates the use of axes.color_cycle in favor
of axes.prop_cycle
I prefer to use the new styles coming from matplotlib, but for now,
to maintain backwards compatibility, I am hand coding the styles
still.
Content is largely the same, but I reduced the number of functions
that the code uses to minimize the amount of scrolling back and
forth. I move the dog simulation back into the notebook so that
it is easily inspected - people have been confused about what it
is doing.
This code did not work for Python 2.x becaus I was not
importing from future. While I was altering all the files
I updated the header to include license information.
I was saying 'blue curve' 'green curve', but those have no meaning,
especially if printed in black and white. Switched to explicit
$\sigma=0.2$.
Also added second std in the chart showing the 68-95-99.7 rule.
User ulenka on gitter suggest changing the color for the
residual line. I found my changes garish, so I switched
to a thicker black line and changed the grids to dotted.
I was specifying the Neo-Euler font, which renders poorly
on nbviewer. This is a test to make sure it works before
checking in all notebooks. (I have to re-execute the notebook)
so that the script from the css file gets embedded into the
notebook).
Also found a mistake in the text about computing the residual
of angles that was duplicated in the EKF chapter, so I fixed the
error in that chapter as well.
I pulled out the 'track in a circle' example as it is the usual
sort of textbook nonsense problem that no one cares about. I created
an 'old-content' Notebook in case anyone still wants to see it; I
may put more content there as I continue to edit.
There is more than that here. I had a bad commit of a bunch of temporary
files, I had to reset back in time, and now I am doing a massive commit.
Sorry.
All these changes are to make the book easier to run from
cloud.sagemath.org. You can share individual notebooks there,
but not entire projects.By putting everything under code at the
user only needs to grab that one directory.
More on sagemath later, if I decide to pursue that as a delivery
mechanism...
I made a separate filterpy.stats module becuase it made
little sense to import filterpy.common for stats
functions. This required a lot of changes in the notebooks
and supporting code.