MatLab 中的数值不稳定性卡尔曼滤波器

use*_*919 5 matlab kalman-filter

我正在尝试运行标准卡尔曼滤波器算法来计算可能性,但在计算正态密度时我不断遇到非正定方差矩阵的问题。我做了一些研究,发现实际上可能存在一些数值不稳定的情况;尝试了一些数值方法来避免非正定矩阵,使用 choleski 分解及其变体 LDL' 分解。我正在使用MatLab。有人建议什么吗?谢谢。

Sco*_*ott 5

当我需要长时间运行卡尔曼滤波器时,我曾经遇到过可能相同的问题,但随着时间的推移,我的协方差矩阵会退化。这可能只是由于数值误差而失去对称性的问题。强制协方差矩阵(我们称之为P)保持对称的一种简单方法是:

P = (P + P')/2  # where P' is transpose(P)
Run Code Online (Sandbox Code Playgroud)

估计完之后P

  • 使用约瑟夫形式将确保协方差矩阵 P 对称并修复其他数值错误。 (2认同)

Nir*_*gev 3

发布你的代码。

根据经验,如果模型不准确并且正则化(即模型噪声矩阵 Q)不够“大”,则会发生欠拟合,并且估计器的协方差矩阵将是病态的。尝试微调您的 Q 矩阵。