KF_卡尔曼滤波中协方差更新的两种不同形式:标准形式和对称/等效形式

卡尔曼滤波协方差更新的两种形式对比

这是一个非常好的问题,涉及到卡尔曼滤波中协方差更新的两种不同形式:标准形式和对称/等效形式。你提到的两个公式:

P = (I - K @ H) @ P @ (I - K @ H).T + K @ R @ K.T
P = (I - K @ H) @ P

它们看似不同,但实际上在理论正确性、数值稳定性、适用场景上有重要区别。下面我们详细分析。
✅ 正确的协方差更新公式(理论完整版)
🟩 完整对称形式(更精确):

Pk∣k=(I−KkHk)Pk∣k−1(I−KkHk)T+KkRkKkT
Pk∣k​=(I−Kk​Hk​)Pk∣k−1​(I−Kk​Hk​)T+Kk​Rk​KkT​

这是从协方差传播定律直接推导出的完整表达式,它考虑了两个噪声源的影响:

预测误差(通过 (I−KH)P(⋅)T(I−KH)P(⋅)T 传播)
测量噪声引入的新不确定性(通过 KRKTKRKT 加入)

✅ 优点:

    数学上最严谨
    保持协方差矩阵的对称性和正定性更好(尤其在浮点计算中)
    更适合平方根滤波或数值稳定性要求高的场景

⚠️ 缺点:

    计算量稍大(多一次矩阵乘法)

🟨 简化形式(常用标准形式)
标准教科书形式:

Pk∣k=(I−KkHk)Pk∣k−1
Pk∣k​=(I−Kk​Hk​)Pk∣k−1​

这个公式是上面完整形式的一个代数简化结果,前提是在卡尔曼增益取最优值(即卡尔曼增益)时,两个表达式在数学上是等价的!
🔍 为什么可以简化?

因为在最优卡尔曼增益下,有如下恒等式成立:

(I−KH)Pk∣k−1=Pk∣k−1HT(HPk∣k−1HT+R)−1(HPk∣k−1)
(I−KH)Pk∣k−1​=Pk∣k−1​HT(HPk∣k−1​HT+R)−1(HPk∣k−1​)

经过一系列代数变换(涉及矩阵逆引理),可以证明:

(I−KH)Pk∣k−1(I−KH)T+KRKT=(I−KH)Pk∣k−1
(I−KH)Pk∣k−1​(I−KH)T+KRKT=(I−KH)Pk∣k−1​

✅ 所以,在卡尔曼增益是按标准公式计算的前提下,这两个公式是数学等价的。
🔍 二者对比总结
特性 公式1:完整对称形式
P = (I-KH)@P@(I-KH).T + K@R@K.T 公式2:简化形式
P = (I-KH)@P
数学正确性 ✅ 完全正确 ✅ 在最优K下等价
对称性保持 ✅ 更好(显式对称结构) ❌ 可能因数值误差失去对称性
正定性 ✅ 更稳定 ⚠️ 可能出现微小负特征值
计算开销 ⬆️ 稍高(多矩阵乘) ⬇️ 更低
推荐使用场景 高精度、鲁棒性要求高、平方根滤波 一般应用、教学、快速实现
🛠 实际建议

一般情况下:使用简化形式 P = (I - K@H) @ P 即可,这是绝大多数教材和代码库(如 filterpy)采用的形式。

高精度或稳定性敏感场景(如航天、惯导):
    推荐使用对称形式,或进一步使用平方根卡尔曼滤波(用Cholesky分解维护协方差矩阵的平方根)。

数值实现技巧:
    即使使用简化形式,也建议最后对 PP 做对称化处理:
        深色版本

        P = (P + P.T) / 2
    以强制保持对称性。

✅ 示例代码对比(Python)

python
深色版本

import numpy as np

假设已有

P_pred = np.array([[4.0, 1.0], [1.0, 3.0]])
H = np.array([[1.0, 0.0]])
R = np.array([[1.0]])
K = P_pred @ H.T @ np.linalg.inv(H @ P_pred @ H.T + R)  # K shape: (2,1)

KH = K @ H  # (2,2)

方法1:完整对称形式

P1 = (np.eye(2) - KH) @ P_pred @ (np.eye(2) - KH).T + K @ R @ K.T

方法2:简化形式

P2 = (np.eye(2) - KH) @ P_pred

检查是否接近

print("P1 ≈ P2:", np.allclose(P1, P2))  # 应该为 True

✅ 结论

两个公式在理论最优条件下是等价的。
P = (I - KH) @ P 是标准简化形式,推荐日常使用。
P = (I-KH)@P@(I-KH).T + K@R@K.T 更严谨,适合高精度或稳定性要求高的系统。
实际编程中,无论用哪个,都建议最后对 PP 进行对称化处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值