robotology / bayes-filters-lib

A flexible, modern, C++ recursive Bayesian estimation library.
https://robotology.github.io/bayes-filters-lib/doc/html/index.html
Other
69 stars 30 forks source link

Cholesky update #76

Open claudiofantacci opened 5 years ago

claudiofantacci commented 5 years ago

Originally posted by @traversaro in https://github.com/robotology/bayes-filters-lib/issues/61#issuecomment-496127064

I am relative sure it does not apply to your case, but it may be interesting for you to know that in some context (where you have a lot of low-rank updates) the computation of the inverse matrix via repeated uses of the Sherman–Morrison–Woodbury identity is numerically noisy/unstable ( https://epubs.siam.org/doi/abs/10.1137/0907034?journalCode=sijcd4 ). For Symmetric Positive Definite matrices it is sometimes preferred to use the Cholesky Update, see for example https://www.semanticscholar.org/paper/Low-Rank-Updates-for-the-Cholesky-Decomposition-Seeger/8e22b71338d20c884bbb904155f12227781eb750 .


Originally posted by @xEnVrE in https://github.com/robotology/bayes-filters-lib/issues/61#issuecomment-496132693

Thank you @traversaro for your point. I wasn't aware of this. If I am not wrong, Cholesky Update is also used in the square root form of the Unscented Kalman Filter exactly for this reason.

In the end, the paper from which we are taking this kind of usage of the SMW identity, rewrites the covariance matrix using a sort of Cholesky factorization but the inner structure of the factors is exactly known. Don't know if, by using Cholesky updates, it is possible to obtain the same speedup as we are getting with SMW. I'll read the references you pointed out.


Originally posted by @traversaro in https://github.com/robotology/bayes-filters-lib/issues/61#issuecomment-496152846

If you are interested in this, we can also check out Section 3.3 of http://pasa.lira.dist.unige.it/pasapdf/1228_Gijsberts+Metta2012.pdf (that is actually the reason I am aware of this stuff).


Originally posted by @traversaro in https://github.com/robotology/bayes-filters-lib/issues/61#issuecomment-496153815

We actually still have the code from the Cholesky update in icub-main, see: