カルマンフィルターの実装では、「予測された推定共分散」、P(k | k-1)(ここのwikiを参照)が特異行列である可能性はありますか?そうでない場合、私のコードに何か問題がありますか?
これは状態空間モデルです
% y{t}=Z{t} b{t} + eps{t}, eps{t} ~ N(0,H{t})
% b{t} = Pi{t} b{t-1} + tao{t} tao{t} ~ N(0,Q{t})
% b{1} ~ N(b0,P0)
% t=1,...,T
これは、カルマンフィルターアルゴリズムの主要部分としての後方再帰です。
for t=1:T
v{t} = y{t} - Z{t} * b_tt_1{t};
M{t} = P_tt_1{t} * Z{t}';
F{t} = Z{t} * M{t} + H{t};
F_{t}= inv(F{t});
MF_{t}= M{t} * F_{t};
b_tt{t}=b_tt_1{t} + MF_{t} * v{t};
P_tt{t}=P_tt_1{t} - MF_{t} * M{t}';
b_tt_1{t+1} = Pi{t} * b_tt{t};
P_tt_1{t+1} = Pi{t} * P_tt{t} * Pi{t}' + Q{t};
end
これは、実際のデータを使用したときに発生しました。問題がどこにあるかを確認するために、ランダムな状態空間モデルを生成するコードを作成しました(必要に応じてコードを提供できます)。
Tが大きい場合、あるt0の後、P_tt_1 {t0}は特異であり、状態(b {t0})は発散します。
編集:共分散更新方程式の「ジョセフ形式」を使用しました(ウィキペディアを参照)。それは役に立ちましたが、状態空間モデルが大きい場合(方程式または状態の数の意味で)、結果は依然として発散します。これは、問題が数値安定性に関係していることを意味していると思います。これを解決する方法はありますか?