動機:私は、MATLAB(無香料カルマンフィルター)で状態推定器を書いています。これは、反復ごとに(つまり、共分散行列に対して)共分散行列の(上三角)平方根の更新を要求します。、)であることは事実です。必要な計算を実行するには、MATLAB 関数を使用して、ランク1のコレスキー更新とダウンデートを行う必要があります。P P = S S Tcholupdate
問題:残念ながら、反復の過程で、この行列は正定性を失う場合があります。コレスキーのダウンデートは、非PDマトリックスでは失敗します。
私の質問は、MATLABで正定にする簡単で信頼できる方法はありますか?
(またはより一般的には、任意の共分散行列を正定にする良い方法はありますか?)
注:
- はフルランクです
- 私は固有分解アプローチを試しました(これは機能しませんでした)。これは基本的に見つけ、すべての負の要素を設定し、新しいを再構築することを含み、ここでは正の要素のみをもつ行列です。 V 、D = 1 × 10 − 8 S ′ = V ′ D ′ V ′ T V ′、D ′
- Highamアプローチ(Rとしてとして実装されています
nearpd
)は知っていますが、最も近いPSD行列にのみ投影されるようです。コレスキー更新にPDマトリックスが必要です。