Motivation : Ich schreibe einen Zustandsschätzer in MATLAB (dem nicht parfümierten Kalman-Filter), der die Aktualisierung der (oberen Dreiecks-) Quadratwurzel einer Kovarianzmatrix bei jeder Iteration ( dh für eine Kovarianzmatrix P ) fordert ist es wahr, dass P = S S T ). Damit ich die erforderlichen Berechnungen durchführen kann, muss ich mithilfe der MATLAB- Funktion ein Cholesky-Update und -Downdate vom Rang 1 durchführen .cholupdate
Problem : Leider kann diese Matrix im Verlauf der Iterationen manchmal an positiver Bestimmtheit verlieren. Das Cholesky-Downdate schlägt bei Nicht-PD-Matrizen fehl.
Meine Frage ist : Gibt es in MATLAB einfache und zuverlässige Möglichkeiten, positiv-definitiv zu machen ?
( oder allgemeiner, gibt es eine gute Möglichkeit, eine bestimmte Kovarianz- Matrix positiv-definitiv zu machen? )
Anmerkungen :
- ist voller Rang
- Ich habe den Eigendekompositionsansatz ausprobiert (der nicht funktioniert hat). Dies beinhaltete im Wesentlichen das Finden von , das Setzen aller negativen Elemente von V , D = 1 × 10 - 8 und das Rekonstruieren eines neuen S ' = V ' D ' V ' T, wobei V ' , D ' nur Matrizen mit sind positive Elemente.
- Ich kenne den Higham-Ansatz (der in R as implementiert ist
nearpd
), aber er scheint nur auf die nächste PSD-Matrix zu projizieren. Ich benötige eine PD-Matrix für das Cholesky-Update.