【问题标题】:Matlab : How do I ensure that the covariance matrix is positive definite when using Kalman FilterMatlab:使用卡尔曼滤波器时如何确保协方差矩阵是正定的
【发布时间】:2017-04-10 10:12:28
【问题描述】:

对于复值数据,我发现很难确保协方差矩阵是正定的。举个例子,

P =

  10.0000 +10.0000i        0                  0          
        0            10.0000 +10.0000i        0          
        0                  0            10.0000 +10.0000i

我可以使用 cholesky 或下面解释的特征值来检查 P 的正定性。

(一)

[R1,p1] = chol(P)

R1 =

     []


p1 =

     1

由于 p1 > 0,A 不是正定的

(B) 使用特征值:如果特征值是正的,那么 P 应该是正定的。

[r p]=eig(P)

r =

     1     0     0
     0     1     0
     0     0     1


p =

  10.0000 +10.0000i        0                  0          
        0            10.0000 +10.0000i        0          
    0                  0            10.0000 +10.0000i

但是,做svd(P) 会给出所有积极的特征! 我在哪里出错了,我应该怎么做才能防止 P 矩阵变为非正定矩阵。在运行时和现实世界场景中,很难确保 P 的正确定性。是否有破解或出路?非常感谢

【问题讨论】:

    标签: linear-algebra covariance svd eigenvalue kalman-filter


    【解决方案1】:

    检查复矩阵的正定性:

    首先,this question at math.stackexchange 的回答说:

    复矩阵 A 的充要条件 正定是 Hermitian 部分 A_H = 1/2·(A+A^H) 是正定的, 其中A^H 表示共轭转置。

    为什么P矩阵变成非正定矩阵:

    然后,关于为什么 P 失去其“正定性”的问题,通常的罪魁祸首是浮点表示/算术。

    标准卡尔曼滤波器算法可以在某些敏感操作中显示数值稳定性问题,例如在计算卡尔曼增益时取矩阵 S 的逆,或者在应用优化时使用更新时误差协方差的简化表达式步P+ = (I - K·H)·P-

    还有其他错误来源,如错误的实现或使用错误的数据(例如,定义本身不是正定的过程/测量协方差矩阵)。

    如何避免该问题:

    我将重点关注第一个错误来源:数值稳定性。 有许多替代方案通常用于使卡尔曼滤波器更稳定并避免协方差矩阵问题:

    • 在每次迭代时纠正 P 中的小错误(formally not correct,但效果很好)。过去我已经成功地将简单的P = 1/2 (P + P') 与实矩阵一起使用,但还有更精细的方案。
    • 使用square-root Kalman filter,或任何其他提高稳定性的配方。由于它们保留并更新了 P 的一种平方根,因此不对称不再是问题。它们还总体上减少了正定问题。
    • 转到 64 位 FP 算法。比使用单精度稳定得多。
    • 通过缩放一些变量来改进数值条件。数字之间的巨大差异会加剧不准确性,因此如果 P 将 10^+3 顺序的对角线值与 10^-6 顺序的其他值混合,则将后一个变量的单位更改为微缩小差距。

    使用这些因素中的一个或组合可能会奏效。但是,我没有在复杂域中使用过卡尔曼滤波器,所以请告诉我它如何适用于您的情况。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多