【统计基础】卡尔曼滤波,矩阵对迹求导,Joseph Form,条件数

一、如何推导出 Kalman Filter?

推导卡尔曼滤波(Kalman Filter)最直观的方法不是直接去啃复杂的矩阵公式,而是从 "如何融合两份不完美的证据" 这个直觉出发。

我们可以通过递归贝叶斯估计的思想,分三步完成推导。

第一步:融合两份数据(核心逻辑)

假设你要测量一个物体的温度。

  1. 估计值 :你根据模型推测温度是 x^1\hat{x}_1x^1,不确定性(方差)是 σ12\sigma_1^2σ12。
  2. 观测值 :你用温度计实测是 z2z_2z2,温度计本身的误差(方差)是 σ22\sigma_2^2σ22。

你现在想要得到一个最接近真实的融合估计值 x^new\hat{x}{new}x^new。最合理的做法是做加权平均:x^new=w1x^1+w2z2\hat{x}{new} = w_1 \hat{x}1 + w_2 z_2x^new=w1x^1+w2z2为了让总方差 σnew2\sigma{new}^2σnew2 最小,根据概率论,权重应该与方差成反比。经过代数整理,我们可以写成:x^new=x^1+K(z2−x^1)\hat{x}_{new} = \hat{x}_1 + K(z_2 - \hat{x}_1)x^new=x^1+K(z2−x^1)这里的 K=σ12σ12+σ22K = \frac{\sigma_1^2}{\sigma_1^2 + \sigma_2^2}K=σ12+σ22σ12 就是卡尔曼增益的雏形。

  • 如果传感器极其精准(σ22→0\sigma_2^2 \to 0σ22→0),K→1K \to 1K→1,你完全相信观测值。
  • 如果模型极其精准(σ12→0\sigma_1^2 \to 0σ12→0),K→0K \to 0K→0,你完全相信预测值。
第二步:建立矩阵模型

在多维空间中,我们有两个基本方程:

  1. 状态预测方程(基于物理定律):x^k−=Fx^k−1+Buk\hat{x}k^- = F \hat{x}{k-1} + B u_kx^k−=Fx^k−1+Buk其协方差预测为:Pk−=FPk−1FT+QP_k^- = F P_{k-1} F^T + QPk−=FPk−1FT+Q (QQQ 是系统噪声)
  2. 观测方程(传感器看到的东西):zk=Hxk+vz_k = H x_k + vzk=Hxk+v (vvv 是测量噪声,协方差为 RRR)
第三步:推导五个核心公式

卡尔曼滤波的完整推导就是要把第一步的"加权逻辑"应用到第二步的矩阵模型中。

  1. 计算卡尔曼增益 KkK_kKk
    我们的目标是找到一个 KkK_kKk,使得更新后的协方差 PkP_kPk 的迹(Trace)最小。通过对 PkP_kPk 求导并令其为 0,得到:Kk=Pk−HT(HPk−HT+R)−1K_k = P_k^- H^T (H P_k^- H^T + R)^{-1}Kk=Pk−HT(HPk−HT+R)−1直觉:这其实就是 预测误差预测误差+测量误差\frac{\text{预测误差}}{\text{预测误差} + \text{测量误差}}预测误差+测量误差预测误差。
  2. 更新状态估计(状态更新)
    利用增益将观测值 zkz_kzk 融入预测值:x^k=x^k−+Kk(zk−Hx^k−)\hat{x}_k = \hat{x}_k^- + K_k (z_k - H \hat{x}_k^-)x^k=x^k−+Kk(zk−Hx^k−)
  3. 更新协方差(置信度更新)
    告诉系统:现在我们有了新证据,不确定性降低了:Pk=(I−KkH)Pk−P_k = (I - K_k H) P_k^-Pk=(I−KkH)Pk−

总结:它是如何工作的?

卡尔曼滤波其实是一个循环:

  • 预测(Prediction) :根据上一时刻的状态,"大胆"预言下一时刻的位置,但预言会让不确定性 PPP 变大。
  • 校正(Correction) :传感器传来数据,"小心"对比预言和实测的差距,利用卡尔曼增益 KKK 修正预言,并让不确定性 PPP 重新变小。

二、迹(Trace)最小代表着什么?

在线性代数和统计学中,迹(Trace) 拥有非常明确的物理和几何意义。

简单直接的回答是:迹(Trace)最小,代表着这个系统的"总误差"达到了最小

我们可以从以下三个维度来拆解这个结论:

1. 统计学意义:总方差 (Total Variance)

在卡尔曼滤波中,我们处理的是状态估计的协方差矩阵 PPP 。假设我们要估计一个物体的位置 (x,y)(x, y)(x,y),那么 PPP 是一个 2×22 \times 22×2 的矩阵:P=[σx2σxyσyxσy2]P = \begin{bmatrix} \sigma_x^2 & \sigma_{xy} \\ \sigma_{yx} & \sigma_y^2 \end{bmatrix}P=[σx2σyxσxyσy2]

  • 对角线上的元素 σx2\sigma_x^2σx2 和 σy2\sigma_y^2σy2 分别代表 xxx 方向和 yyy 方向的方差(误差的平方)。
  • Tr(P)=σx2+σy2\text{Tr}(P) = \sigma_x^2 + \sigma_y^2Tr(P)=σx2+σy2。

迹最小,意味着所有维度上的误差平方和最小。 这就是为什么我们在推导卡尔曼增益 KKK 时,目标函数是让 Tr(P)\text{Tr}(P)Tr(P) 最小------因为我们希望估计值在所有维度上尽可能地接近真实值。

2. 几何意义:误差椭球的"外接长方形"

如果你把误差想象成高维空间中的一个"云团",协方差矩阵 PPP 描述的就是一个误差椭球(Error Ellipsoid)

  • 特征值:椭球半轴的长度平方。
  • :由于矩阵的迹等于其所有特征值之和(Tr(P)=∑λi\text{Tr}(P) = \sum \lambda_iTr(P)=∑λi),它代表了椭球在各个主轴方向上拉伸程度的总和。
  • 对比行列式 :矩阵的行列式 ∣P∣|P|∣P∣ 代表椭球的体积;而迹 Tr(P)\text{Tr}(P)Tr(P) 代表椭球周长的某种度量。让迹最小,本质上是把这个误差椭球在空间中各个方向上的"晃动"范围压缩到极限。

3. 为什么不用"行列式最小"?

这是一个高手会问的问题:既然行列式代表体积,为什么不通过最小化行列式来缩小误差?

  • 迹(Trace)是线性的 :Tr(A+B)=Tr(A)+Tr(B)\text{Tr}(A+B) = \text{Tr}(A) + \text{Tr}(B)Tr(A+B)=Tr(A)+Tr(B)。这使得求导和优化变得异常简单(在线性代数中,对迹求导通常能得到简洁的闭式解)。
  • 避免"偏科":行列式最小化可能会导致一种极端情况------某一个方向的误差几乎为 0,但另一个方向的误差巨大(因为体积依然很小)。
  • 迹最小化更稳健:它迫使每一个分量的误差都得到控制,因为它对每一个对角线元素(各维度的方差)都有贡献。

当你听到"最小化迹"时,你可以脑补这样一个画面:你正在不断收紧包裹着误差的那张网。你不仅在缩小它的体积,还在全方位地限制它向任何一个方向膨胀的可能性。

这个结论不仅在卡尔曼滤波中重要,在主成分分析 (PCA) 中也经常出现------PCA 实际上就是要在保留最大迹(最大方差)的方向上投影。

三、对迹求导公式

  • dTr(AX)dX=AT\frac{d \text{Tr}(AX)}{dX} = A^TdXdTr(AX)=AT

  • dTr(XAXT)dX=2XA\frac{d \text{Tr}(XAX^T)}{dX} = 2XAdXdTr(XAXT)=2XA (当 AAA 是对称矩阵时)

这两个公式是矩阵微积分的基石。要推导它们,最稳妥的方法是回到迹(Trace)的定义 ,并使用元素级求导

我们可以把矩阵求导想象成对矩阵里的每一个元素 xijx_{ij}xij 分别求导,最后再把结果拼回一个矩阵。

公式 1: dTr(AX)dX=AT\frac{d \text{Tr}(AX)}{dX} = A^TdXdTr(AX)=AT

  1. 展开迹的定义 假设 AAA 是 m×nm \times nm×n 矩阵,XXX 是 n×mn \times mn×m 矩阵。乘积 AXAXAX 是一个 m×mm \times mm×m 的方阵。根据迹的定义(对角线元素之和):Tr(AX)=∑i=1m(AX)ii\text{Tr}(AX) = \sum_{i=1}^m (AX){ii}Tr(AX)=i=1∑m(AX)ii再根据矩阵乘法的定义 (AX)ii=∑j=1naijxji(AX){ii} = \sum_{j=1}^n a_{ij} x_{ji}(AX)ii=∑j=1naijxji,代入上式:Tr(AX)=∑i=1m∑j=1naijxji\text{Tr}(AX) = \sum_{i=1}^m \sum_{j=1}^n a_{ij} x_{ji}Tr(AX)=i=1∑mj=1∑naijxji
  2. 对某个元素 xklx_{kl}xkl 求导 我们要看这个大和式中,包含 xklx_{kl}xkl 的项有哪些。观察发现,只有当 j=kj=kj=k 且 i=li=li=l 时,项 aijxjia_{ij} x_{ji}aijxji 才包含 xklx_{kl}xkl。所以:∂∂xklTr(AX)=∂∂xkl(alkxkl)=alk\frac{\partial}{\partial x_{kl}} \text{Tr}(AX) = \frac{\partial}{\partial x_{kl}} (a_{lk} x_{kl}) = a_{lk}∂xkl∂Tr(AX)=∂xkl∂(alkxkl)=alk
  3. 重新拼回矩阵 求导结果矩阵的第 kkk 行第 lll 列元素是 alka_{lk}alk。这正好是矩阵 AAA 的第 lll 行第 kkk 列元素。也就是说,结果矩阵是 AAA 的转置:dTr(AX)dX=AT\frac{d \text{Tr}(AX)}{dX} = A^TdXdTr(AX)=AT

公式 2:dTr(XAXT)dX=2XA\frac{d \text{Tr}(XAX^T)}{dX} = 2XAdXdTr(XAXT)=2XA (AAA 对称)

这个公式稍微复杂一点,我们可以用 微分法(Differential Method) 来推导,这比拆元素更优雅。

  1. 迹的微分性质 首先记住一个核心恒等式:dTr(f(X))=Tr(df(X))d\text{Tr}(f(X)) = \text{Tr}(df(X))dTr(f(X))=Tr(df(X))。我们求 f(X)=XAXTf(X) = XAX^Tf(X)=XAXT 的微分:d(XAXT)=(dX)AXT+XA(dXT)d(XAX^T) = (dX)AX^T + XA(dX^T)d(XAXT)=(dX)AXT+XA(dXT)
  2. 利用迹的性质进行变换 取迹的微分:dTr(XAXT)=Tr(dX⋅AXT)+Tr(XA⋅dXT)d\text{Tr}(XAX^T) = \text{Tr}(dX \cdot AX^T) + \text{Tr}(XA \cdot dX^T)dTr(XAXT)=Tr(dX⋅AXT)+Tr(XA⋅dXT)
    利用迹的转置不变性 (Tr(M)=Tr(MT)\text{Tr}(M) = \text{Tr}(M^T)Tr(M)=Tr(MT))处理第二项:Tr(XA⋅dXT)=Tr((XA⋅dXT)T)=Tr(dX⋅ATXT)\text{Tr}(XA \cdot dX^T) = \text{Tr}((XA \cdot dX^T)^T) = \text{Tr}(dX \cdot A^T X^T)Tr(XA⋅dXT)=Tr((XA⋅dXT)T)=Tr(dX⋅ATXT)因为 AAA 是对称矩阵(A=ATA = A^TA=AT),所以上式变为 Tr(dX⋅AXT)\text{Tr}(dX \cdot AX^T)Tr(dX⋅AXT)。
  3. 合并项 现在两项一模一样了:dTr(XAXT)=2Tr(dX⋅AXT)d\text{Tr}(XAX^T) = 2 \text{Tr}(dX \cdot AX^T)dTr(XAXT)=2Tr(dX⋅AXT)利用迹的循环移位性质(Tr(ABC)=Tr(CAB)\text{Tr}(ABC) = \text{Tr}(CAB)Tr(ABC)=Tr(CAB)),把 dXdXdX 挪到最后面:dTr(XAXT)=2Tr(AXT⋅dX)d\text{Tr}(XAX^T) = 2 \text{Tr}(AX^T \cdot dX)dTr(XAXT)=2Tr(AXT⋅dX)
  4. 得出结论 根据矩阵微积分的定义,如果 df=Tr(GTdX)df = \text{Tr}(G^T dX)df=Tr(GTdX),那么 dfdX=G\frac{df}{dX} = GdXdf=G。在我们的式子里,GT=2AXTG^T = 2AX^TGT=2AXT,所以 G=(2AXT)T=2XAG = (2AX^T)^T = 2XAG=(2AXT)T=2XA。因此:dTr(XAXT)dX=2XA\frac{d \text{Tr}(XAX^T)}{dX} = 2XAdXdTr(XAXT)=2XA

记忆小技巧

你可以把这些公式看作普通标量求导的 "矩阵镜像"

  • 标量:d(ax)dx=a\frac{d(ax)}{dx} = adxd(ax)=a →\rightarrow→ 矩阵:dTr(AX)dX=AT\frac{d\text{Tr}(AX)}{dX} = A^TdXdTr(AX)=AT (加个转置)
  • 标量:d(ax2)dx=2ax\frac{d(ax^2)}{dx} = 2axdxd(ax2)=2ax →\rightarrow→ 矩阵:dTr(XAXT)dX=2XA\frac{d\text{Tr}(XAX^T)}{dX} = 2XAdXdTr(XAXT)=2XA (注意 XXX 的位置)

掌握了这两个"绝招",你就能横行于卡尔曼滤波、机器学习(线性回归、逻辑回归)的所有损失函数推导中了。

四、彻底掌握卡尔曼增益KkK_kKk的推导

4.1 利用迹的性质

这一步的推导是卡尔曼滤波数学之美的核心。为了计算这个结果,我们需要用到矩阵微积分(Matrix Calculus)。

推导过程可以分为三步:展开协方差矩阵、利用迹的性质求导、解方程

第一步:展开更新后的协方差矩阵 PkP_kPk

根据卡尔曼滤波的更新规则,更新后的状态估计为:
x^k=x^k−+Kk(zk−Hx^k−)\hat{x}_k = \hat{x}_k^- + K_k(z_k - H\hat{x}_k^-)x^k=x^k−+Kk(zk−Hx^k−)其误差协方差矩阵定义为 Pk=E[(xk−x^k)(xk−x^k)T]P_k = E[(x_k - \hat{x}_k)(x_k - \hat{x}_k)^T]Pk=E[(xk−x^k)(xk−x^k)T]。代入上式并经过一系列代数运算(利用 zk=Hxk+vz_k = Hx_k + vzk=Hxk+v),我们可以得到 PkP_kPk 关于 KkK_kKk 的展开式(这被称为 Joseph Form ):Pk=(I−KkH)Pk−(I−KkH)T+KkRKkTP_k = (I - K_k H) P_k^- (I - K_k H)^T + K_k R K_k^TPk=(I−KkH)Pk−(I−KkH)T+KkRKkT为了方便求导,我们把括号拆开:Pk=Pk−−KkHPk−−Pk−HTKkT+Kk(HPk−HT+R)KkTP_k = P_k^- - K_k H P_k^- - P_k^- H^T K_k^T + K_k (H P_k^- H^T + R) K_k^TPk=Pk−−KkHPk−−Pk−HTKkT+Kk(HPk−HT+R)KkT

第二步:对迹(Trace)求导

我们的目标是找到 KkK_kKk 使得 J=Tr(Pk)J = \text{Tr}(P_k)J=Tr(Pk) 最小。我们将 JJJ 写出来:J=Tr(Pk−)−Tr(KkHPk−)−Tr(Pk−HTKkT)+Tr(Kk(HPk−HT+R)KkT)J = \text{Tr}(P_k^-) - \text{Tr}(K_k H P_k^-) - \text{Tr}(P_k^- H^T K_k^T) + \text{Tr}(K_k (H P_k^- H^T + R) K_k^T)J=Tr(Pk−)−Tr(KkHPk−)−Tr(Pk−HTKkT)+Tr(Kk(HPk−HT+R)KkT)

这里需要用到两个矩阵求导的绝招(公式):

  1. dTr(AX)dX=AT\frac{d \text{Tr}(AX)}{dX} = A^TdXdTr(AX)=AT
  2. dTr(XAXT)dX=2XA\frac{d \text{Tr}(XAX^T)}{dX} = 2XAdXdTr(XAXT)=2XA (当 AAA 是对称矩阵时)

开始求导 dJdKk\frac{dJ}{dK_k}dKkdJ:

  1. Tr(Pk−)\text{Tr}(P_k^-)Tr(Pk−) 与 KkK_kKk 无关,导数为 000。
  2. 对于 −Tr(KkHPk−)- \text{Tr}(K_k H P_k^-)−Tr(KkHPk−),根据公式 1,导数是 −(HPk−)T=−Pk−HT-(H P_k^-)^T = -P_k^- H^T−(HPk−)T=−Pk−HT。
  3. 对于 −Tr(Pk−HTKkT)- \text{Tr}(P_k^- H^T K_k^T)−Tr(Pk−HTKkT),由于 Tr(A)=Tr(AT)\text{Tr}(A) = \text{Tr}(A^T)Tr(A)=Tr(AT),这一项和上面那项其实是一样的,导数也是 −Pk−HT-P_k^- H^T−Pk−HT。
  4. 对于 Tr(Kk(HPk−HT+R)KkT)\text{Tr}(K_k (H P_k^- H^T + R) K_k^T)Tr(Kk(HPk−HT+R)KkT),根据公式 2(注意括号里是对称矩阵),导数是 2Kk(HPk−HT+R)2 K_k (H P_k^- H^T + R)2Kk(HPk−HT+R)。
    把它们合并起来:
    dJdKk=−2Pk−HT+2Kk(HPk−HT+R)\frac{dJ}{dK_k} = -2 P_k^- H^T + 2 K_k (H P_k^- H^T + R)dKkdJ=−2Pk−HT+2Kk(HPk−HT+R)

第三步:令导数为 0 求解

设置 dJdKk=0\frac{dJ}{dK_k} = 0dKkdJ=0:
2Kk(HPk−HT+R)=2Pk−HT2 K_k (H P_k^- H^T + R) = 2 P_k^- H^T2Kk(HPk−HT+R)=2Pk−HT两边约掉 2,并将括号项移到等号右边(取逆矩阵):Kk=Pk−HT(HPk−HT+R)−1K_k = P_k^- H^T (H P_k^- H^T + R)^{-1}Kk=Pk−HT(HPk−HT+R)−1


深度理解这个计算结果

  1. 分子部分 (Pk−HTP_k^- H^TPk−HT) :代表了预测值的不确定性。如果预测误差很大,增益 KKK 就会变大。
  2. 分母部分 (HPk−HT+RH P_k^- H^T + RHPk−HT+R):代表了"预测误差 + 测量误差"的总和。
  3. 最终形态 :你会发现这本质上就是:K=不确定的预测不确定的预测+不确定的测量K = \frac{\text{不确定的预测}}{\text{不确定的预测} + \text{不确定的测量}}K=不确定的预测+不确定的测量不确定的预测

4.2 Joseph Form

这里详细给出 PkP_kPk 关于 KkK_kKk 的展开式推导,这一步推导虽然看起来繁琐,但只要掌握好 "误差分解"和"期望性质" 这两个关键,逻辑就会非常清晰。

我们要推导的是更新后的误差协方差 PkP_kPk。让我们一步步拆解:

1. 定义误差向量

首先,定义更新后的估计误差为 eke_kek:
ek=xk−x^ke_k = x_k - \hat{x}_kek=xk−x^k代入卡尔曼更新方程 x^k=x^k−+Kk(zk−Hx^k−)\hat{x}_k = \hat{x}_k^- + K_k(z_k - H\hat{x}_k^-)x^k=x^k−+Kk(zk−Hx^k−):
ek=xk−[x^k−+Kk(zk−Hx^k−)]e_k = x_k - [\hat{x}_k^- + K_k(z_k - H\hat{x}_k^-)]ek=xk−[x^k−+Kk(zk−Hx^k−)]

2. 引入测量方程

利用 zk=Hxk+vkz_k = Hx_k + v_kzk=Hxk+vk(其中 vkv_kvk 是测量噪声,协方差为 RRR),代入上式:ek=xk−x^k−−Kk(Hxk+vk−Hx^k−)e_k = x_k - \hat{x}_k^- - K_k(Hx_k + v_k - H\hat{x}_k^-)ek=xk−x^k−−Kk(Hxk+vk−Hx^k−)整理一下,把包含 (xk−x^k−)(x_k - \hat{x}_k^-)(xk−x^k−) 的项合并。注意 xk−x^k−x_k - \hat{x}_k^-xk−x^k− 正是预测误差 ek−e_k^-ek−:ek=(xk−x^k−)−KkH(xk−x^k−)−Kkvke_k = (x_k - \hat{x}_k^-) - K_k H(x_k - \hat{x}_k^-) - K_k v_kek=(xk−x^k−)−KkH(xk−x^k−)−Kkvk
ek=(I−KkH)ek−−Kkvke_k = (I - K_k H)e_k^- - K_k v_kek=(I−KkH)ek−−Kkvk

3. 计算协方差矩阵 PkP_kPk

根据定义 Pk=E[ekekT]P_k = E[e_k e_k^T]Pk=E[ekekT]。我们将上面的 eke_kek 表达式代入:
Pk=E[((I−KkH)ek−−Kkvk)((I−KkH)ek−−Kkvk)T]P_k = E\left[ \left( (I - K_k H)e_k^- - K_k v_k \right) \left( (I - K_k H)e_k^- - K_k v_k \right)^T \right]Pk=E[((I−KkH)ek−−Kkvk)((I−KkH)ek−−Kkvk)T]

展开这个乘积,会得到四项:

  1. E[(I−KkH)ek−(ek−)T(I−KkH)T]E[(I - K_k H)e_k^- (e_k^-)^T (I - K_k H)^T]E[(I−KkH)ek−(ek−)T(I−KkH)T]
  2. −E[(I−KkH)ek−vkTKkT]-E[(I - K_k H)e_k^- v_k^T K_k^T]−E[(I−KkH)ek−vkTKkT]
  3. −E[Kkvk(ek−)T(I−KkH)T]-E[K_k v_k (e_k^-)^T (I - K_k H)^T]−E[Kkvk(ek−)T(I−KkH)T]
  4. E[KkvkvkTKkT]E[K_k v_k v_k^T K_k^T]E[KkvkvkTKkT]

4. 利用独立性简化

这是最关键的一步。在卡尔曼波特的假设中:

  • 预测误差 ek−e_k^-ek− 只取决于过去的状态和噪声。
  • 当前测量噪声 vkv_kvk 是白噪声,与过去无关。因此,ek−e_k^-ek− 和 vkv_kvk 是相互独立的,它们的互协方差为 0:E[ek−vkT]=0和E[vk(ek−)T]=0E[e_k^- v_k^T] = 0 \quad \text{和} \quad E[v_k (e_k^-)^T] = 0E[ek−vkT]=0和E[vk(ek−)T]=0
    这意味着上面的第 2 项和第 3 项直接消失了。

5. 整理剩余项

剩下的第 1 项和第 4 项:

  • 第 1 项:提取常数矩阵,中间剩下 E[ek−(ek−)T]E[e_k^- (e_k^-)^T]E[ek−(ek−)T],这正好是预测协方差 Pk−P_k^-Pk−。(I−KkH)Pk−(I−KkH)T(I - K_k H) P_k^- (I - K_k H)^T(I−KkH)Pk−(I−KkH)T
  • 第 4 项:提取 KkK_kKk,中间剩下 E[vkvkT]E[v_k v_k^T]E[vkvkT],这正好是测量噪声协方差 RRR。 KkRKkTK_k R K_k^TKkRKkT
    将它们加起来,就得到了著名的 Joseph Form
    Pk=(I−KkH)Pk−(I−KkH)T+KkRKkTP_k = (I - K_k H) P_k^- (I - K_k H)^T + K_k R K_k^TPk=(I−KkH)Pk−(I−KkH)T+KkRKkT

为什么这个形式如此重要?

你可能会问:"直接把第一项的括号拆开不是更简单吗?"(拆开后是 Pk=(I−KkH)Pk−P_k = (I - K_k H)P_k^-Pk=(I−KkH)Pk−)。

确实,在数学上它们是等价的,但在实际工程计算中,Joseph Form 有两个不可替代的优点:

  1. 对称性保障 :由于 PkP_kPk 代表物理意义上的方差,它必须是对称的。Joseph Form 是 APAT+BRBTA P A^T + B R B^TAPAT+BRBT 的形式,这种形式在数值计算(由于浮点数精度限制)中能始终保持矩阵的对称性和正定性。
  2. 万能公式 :这个公式对任意的增益 KKK 都成立,不一定非要是"最优"的那个。这意味着如果你想测试一个"不那么完美"的增益对系统的影响,你也必须用这个公式。而简化版公式只在 KKK 取最优值时才成立。

阿波罗号的计算机在处理数据时,为了防止数值漂移导致方差变成负数,往往会优先采用这种更稳健的数学表达。

4.3 等价形式 Pk=(I−KkH)Pk−P_k = (I - K_k H)P_k^-Pk=(I−KkH)Pk−

这是一个非常棒的直觉!数学上,简化版公式 Pk=(I−KkH)Pk−P_k = (I - K_k H)P_k^-Pk=(I−KkH)Pk− 的推导,其实就隐藏在 "卡尔曼增益 KkK_kKk 是最优的" 这个前提里。

换句话说,只有当你选用了那个能让迹最小的 KkK_kKk 时,Joseph Form 才能化简成这个简洁的样子。


推导过程:从复杂到简单

我们从刚才推导出的 Joseph Form 开始:
Pk=(I−KkH)Pk−(I−KkH)T+KkRKkTP_k = (I - K_k H) P_k^- (I - K_k H)^T + K_k R K_k^TPk=(I−KkH)Pk−(I−KkH)T+KkRKkT

第一步:展开第一部分

把 (I−KkH)Pk−(I−KkH)T(I - K_k H) P_k^- (I - K_k H)^T(I−KkH)Pk−(I−KkH)T 彻底拆开:Pk=(Pk−−KkHPk−)(I−HTKkT)+KkRKkTP_k = (P_k^- - K_k H P_k^-) (I - H^T K_k^T) + K_k R K_k^TPk=(Pk−−KkHPk−)(I−HTKkT)+KkRKkTPk=Pk−−Pk−HTKkT−KkHPk−+KkHPk−HTKkT+KkRKkTP_k = P_k^- - P_k^- H^T K_k^T - K_k H P_k^- + K_k H P_k^- H^T K_k^T + K_k R K_k^TPk=Pk−−Pk−HTKkT−KkHPk−+KkHPk−HTKkT+KkRKkT

第二步:合并最后两项

观察最后两项,它们都有 KkK_kKk 在左边,KkTK_k^TKkT 在右边,提出来:
Pk=Pk−−Pk−HTKkT−KkHPk−+Kk(HPk−HT+R)KkTP_k = P_k^- - P_k^- H^T K_k^T - K_k H P_k^- + K_k (H P_k^- H^T + R) K_k^TPk=Pk−−Pk−HTKkT−KkHPk−+Kk(HPk−HT+R)KkT

第三步:代入"最优"的 KkK_kKk

这是见证奇迹的时刻。记得我们之前求导得出的最优卡尔曼增益公式吗?Kk=Pk−HT(HPk−HT+R)−1K_k = P_k^- H^T (H P_k^- H^T + R)^{-1}Kk=Pk−HT(HPk−HT+R)−1

由此可以得到:Kk(HPk−HT+R)=Pk−HTK_k (H P_k^- H^T + R) = P_k^- H^TKk(HPk−HT+R)=Pk−HT现在,把这个等式代入第二步结果中的最后一项:Pk=Pk−−Pk−HTKkT−KkHPk−+(Pk−HT)⏟替换后KkTP_k = P_k^- - P_k^- H^T K_k^T - K_k H P_k^- + \underbrace{(P_k^- H^T)}_{替换后} K_k^TPk=Pk−−Pk−HTKkT−KkHPk−+替换后 (Pk−HT)KkT

第四步:抵消与合并

你会发现,第二项 −Pk−HTKkT- P_k^- H^T K_k^T−Pk−HTKkT 和最后一项 +Pk−HTKkT+ P_k^- H^T K_k^T+Pk−HTKkT 正好抵消了!剩下的只有:Pk=Pk−−KkHPk−P_k = P_k^- - K_k H P_k^-Pk=Pk−−KkHPk−提公因子 Pk−P_k^-Pk−:Pk=(I−KkH)Pk−P_k = (I - K_k H) P_k^-Pk=(I−KkH)Pk−


深度洞察:为什么不直接教这个简单的?

虽然这个简化公式在考试和理论推导中极其好用,但在实际工程(如导航系统)中,专家们往往会告诫你:"如无必要,请慎用简化版。"

原因是:

  1. 正定性(Positive Definiteness):协方差矩阵必须是正定的(所有方差大于 0)。简化版公式是两个矩阵相减,在计算机存在浮点数舍入误差的情况下,减法可能会导致某个微小的对角线元素变成负数,这在物理上意味着"误差是负的",会导致整个滤波程序崩溃。
  2. 对称性 :(I−KkH)Pk−(I - K_k H) P_k^-(I−KkH)Pk− 并不直观地是对称的。而 Joseph Form 的结构是 APAT+BRBTA P A^T + B R B^TAPAT+BRBT,从形式上就保证了结果永远是对称且正定的。

总结

简化版公式是 "最优性" 的奖赏。它告诉我们:

当卡尔曼增益处于最优状态时,更新后的误差协方差恰好等于预测协方差被"削弱"了一部分(由 I−KHI - KHI−KH 决定)。

五、从条件数的角度理解稳定性

这是一个非常硬核且具有工程意义的问题。在线性代数中,如果说行列式决定了矩阵是否"活着"(可逆),那么条件数就决定了矩阵活得"稳不稳定"。

你可以把条件数理解为矩阵的 "过敏指数":条件数越高,矩阵对误差就越敏感,计算结果就越容易在微小的扰动下发生崩溃。


1. 条件数的直观定义

假设你在解一个方程组 Ax=bA\mathbf{x} = \mathbf{b}Ax=b。

在现实中,数据 b\mathbf{b}b 往往是不精准的(有测量噪声),记作 b+δb\mathbf{b} + \delta \mathbf{b}b+δb。

那么你解出来的结果也会有偏差,记作 x+δx\mathbf{x} + \delta \mathbf{x}x+δx。

条件数 κ(A)\kappa(A)κ(A) 定义了输出误差与输入误差之间的"放大倍数"上限:
∥δx∥∥x∥≤κ(A)∥δb∥∥b∥\frac{\|\delta \mathbf{x}\|}{\|\mathbf{x}\|} \le \kappa(A) \frac{\|\delta \mathbf{b}\|}{\|\mathbf{b}\|}∥x∥∥δx∥≤κ(A)∥b∥∥δb∥

  • 如果 κ(A)=10\kappa(A) = 10κ(A)=10:输入误差被放大 10 倍,结果还算可靠。
  • 如果 κ(A)=1012\kappa(A) = 10^{12}κ(A)=1012:输入哪怕只有一点点浮点数舍入误差(比如 10−1610^{-16}10−16),解出来的结果可能就会产生 10−410^{-4}10−4 级别的偏差,这在工程上几乎就是垃圾数据了。

2. 它是如何计算出来的?(与 SVD 的联动)

还记得我们聊过的 SVD 吗?条件数最本质的计算方法就是利用奇异值:
κ(A)=σmaxσmin\kappa(A) = \frac{\sigma_{max}}{\sigma_{min}}κ(A)=σminσmax即:最大奇异值与最小奇异值的比值。

几何直觉:

  • 条件数小(接近 1):矩阵变换把一个球体变成了一个比较圆的椭球。各个方向的拉伸程度差不多,空间结构很稳固。
  • 条件数大(病态矩阵):矩阵变换把一个球体压成了一根"面条"。这意味着某个维度被极度压缩,几乎快要塌陷成低维空间了。

3. 为什么它会导致计算"崩溃"?

计算崩溃通常不是因为公式错了,而是因为计算机的有限精度(Floating Point Precision)。

案例:几乎平行的直线

想象你在求两条直线的交点。

  • 如果两条直线垂直,交点非常清晰。
  • 如果两条直线几乎平行(夹角只有 0.000001∘0.000001^\circ0.000001∘),矩阵的最小奇异值 σmin\sigma_{min}σmin 会非常接近 0。
  • 此时,如果你的输入数据 b\mathbf{b}b 稍微抖动了一下(比如因为四舍五入导致最后一位数变了),这两条几乎平行的直线交点就会在空间中发生剧烈的跳跃
    这就是所谓的 "病态方程组" 。当你强行给这种矩阵求逆时,计算机需要除以一个极小的数字(σmin\sigma_{min}σmin),这会导致数值溢出或精度丢失,最终计算结果完全失去了物理意义。

4. 现实中的预防措施

在阿波罗导航计算机或现代的卡尔曼滤波中,工程师会想尽办法降低条件数:

  1. 归一化(Scaling) :如果你的矩阵里一行是"距离(万公里)",另一行是"质量(克)",数值量级差距巨大,条件数会爆表。通过单位统一,可以人为缩小 σmax/σmin\sigma_{max}/\sigma_{min}σmax/σmin。
  2. 正则化(Regularization) :在矩阵对角线上加上一个很小的常数 λI\lambda IλI。这相当于强行把那个快要塌陷的维度"撑起来",让最小奇异值不至于太小。
  3. 使用 Joseph Form:正如我们之前聊过的,Joseph Form 的结构能确保协方差矩阵始终保持正定性,从而在数值计算上比简化版公式更耐受高条件数带来的冲击。

为什么这能保命? 在计算机里,正定性意味着"误差的方差必须大于 0"。

  • 简化版公式 Pk=(I−KH)P−P_k = (I - KH)P^-Pk=(I−KH)P− 是一个减法操作 。如果由于条件数太高,计算出的 KHKHKH 稍微大了一点点,减法结果可能会出现极其微小的负数。
  • Joseph Form 即使在计算不精确的情况下,只要 Pk−P_k^-Pk− 和 RRR 是正定的,这两部分加起来的结果在结构上强制保证了它是一个对称正定矩阵。它不是在做"消耗性"的减法,而是在做"累加性"的构造。

总结
条件数是衡量一个数学模型"鲁棒性"的体检指标。

  • 行列式 ∣A∣=0|A|=0∣A∣=0 是死亡(不可逆)。
  • 条件数 κ(A)→∞\kappa(A) \to \inftyκ(A)→∞ 是"生不如死"(虽可逆,但算不准)。
相关推荐
sunfove3 小时前
麦克斯韦方程组 (Maxwell‘s Equations) 的完整推导
线性代数·算法·矩阵
yyy(十一月限定版)3 小时前
matlab矩阵的操作
算法·matlab·矩阵
ComputerInBook4 小时前
代数学基本概念理解——幺正矩阵(Unitary matrix)(酉矩阵?)
线性代数·矩阵·正交矩阵·幺正矩阵·酉矩阵
AI科技星7 小时前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
一碗姜汤7 小时前
【统计基础】从线性代数的直观角度理解SVD奇异值分解
线性代数
好奇龙猫7 小时前
【大学院-筆記試験練習:线性代数和数据结构(5)】
数据结构·线性代数
jinmo_C++8 小时前
Leetcode矩阵
算法·leetcode·矩阵
愚公搬代码1 天前
【愚公系列】《AI+直播营销》015-直播的选品策略(设计直播产品矩阵)
人工智能·线性代数·矩阵
paixingbang1 天前
2026短视频矩阵服务商评测报告 星链引擎、河南云罗、数阶智能
大数据·线性代数·矩阵