从最小二乘法的角度来理解卡尔曼滤波(1)

devtools/2024/10/18 2:41:36/

最小二乘法的角度来理解卡尔曼滤波(1)

flyfish

假设你有一堆数据点,比如在一个二维平面上有很多点。你想找到一条直线,能够尽可能接近这些点。这条直线可以用一个方程来表示:y = mx + b,其中 m 是斜率,b 是截距。

但是这些数据点通常不会完美地在这条直线上,而是散布在它的周围。每个点与这条直线之间的距离称为误差(残差)。为了找到最佳的直线,我们希望所有这些误差的平方和最小。为什么是平方和?因为这样可以避免正负误差相互抵消。

最小二乘法就是通过调整 m 和 b 来使得所有点到直线的距离的平方和最小。

数学公式

假设我们有 n n n 个数据点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) (x_1, y_1), (x_2, y_2), ..., (x_n, y_n) (x1,y1),(x2,y2),...,(xn,yn),我们的目标是找到直线 y = m x + b y = mx + b y=mx+b 使得以下的平方和最小:

SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2

其中,SSE 是残差平方和(Sum of Squared Errors)。
演示下样子
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt# 生成一些示例数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
y = 2.5 * x + np.random.normal(size=x.size)# 最小二乘法计算斜率和截距
def least_squares(x, y):n = len(x)x_mean = np.mean(x)y_mean = np.mean(y)xy_mean = np.mean(x * y)xx_mean = np.mean(x * x)m = (xy_mean - x_mean * y_mean) / (xx_mean - x_mean * x_mean)b = y_mean - m * x_meanreturn m, bm, b = least_squares(x, y)# 绘制数据点和拟合直线
plt.scatter(x, y, label='Data Points')
plt.plot(x, m * x + b, color='red', label=f'Fitted Line: y = {m:.2f}x + {b:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('Least Squares Fitting')
plt.show()

最小二乘法的解计算过程

我们通过最小化残差平方和 SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2 来求解最佳的直线拟合参数 m m m b b b。下面是详细的计算步骤。

1. 残差平方和公式

首先,残差平方和的公式如下:

SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2

2. 对 b b b m m m 求导并设导数为零

分别对 b b b m m m 求导并设导数为零,得到两个方程:

∂ SSE ∂ b = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 \frac{\partial \text{SSE}}{\partial b} = -2 \sum_{i=1}^n (y_i - (mx_i + b)) = 0 bSSE=2i=1n(yi(mxi+b))=0
∂ SSE ∂ m = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 \frac{\partial \text{SSE}}{\partial m} = -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) = 0 mSSE=2i=1nxi(yi(mxi+b))=0

简化上面的两个方程,我们得到:

∑ i = 1 n y i = m ∑ i = 1 n x i + n b \sum_{i=1}^n y_i = m \sum_{i=1}^n x_i + nb i=1nyi=mi=1nxi+nb
∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + b ∑ i = 1 n x i \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + b \sum_{i=1}^n x_i i=1nxiyi=mi=1nxi2+bi=1nxi

3. 求解 m m m b b b

首先,通过代数操作解出 b b b

b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=ni=1nyimi=1nxi

然后,将 b b b 代入到第二个方程中,解出 m m m

m = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^n x_i y_i - \sum_{i=1}^n x_i \sum_{i=1}^n y_i}{n\sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=1nyi

最后,通过计算 m m m 的值,可以求出 b b b 的值。

最小二乘法中的导数求解与简化过程

1. 残差平方和公式

首先,我们从残差平方和公式开始:

SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2

2. 对 b b b m m m 求导并设导数为零

为了找到最小值,我们需要对 b b b m m m 求导数,并将导数设为零。

b b b 求导:

∂ SSE ∂ b = ∂ ∂ b ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial b} = \frac{\partial}{\partial b} \sum_{i=1}^n (y_i - (mx_i + b))^2 bSSE=bi=1n(yi(mxi+b))2

我们将求导数的过程分步展开:

∂ SSE ∂ b = ∑ i = 1 n ∂ ∂ b ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial b} = \sum_{i=1}^n \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 bSSE=i=1nb(yi(mxi+b))2

使用链式法则:

∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ b ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial b} (y_i - (mx_i + b)) b(yi(mxi+b))2=2(yi(mxi+b))b(yi(mxi+b))

注意到 ∂ ∂ b ( y i − ( m x i + b ) ) = − 1 \frac{\partial}{\partial b} (y_i - (mx_i + b)) = -1 b(yi(mxi+b))=1,所以:

∂ SSE ∂ b = ∑ i = 1 n 2 ( y i − ( m x i + b ) ) ( − 1 ) = − 2 ∑ i = 1 n ( y i − ( m x i + b ) ) \frac{\partial \text{SSE}}{\partial b} = \sum_{i=1}^n 2(y_i - (mx_i + b))(-1) = -2 \sum_{i=1}^n (y_i - (mx_i + b)) bSSE=i=1n2(yi(mxi+b))(1)=2i=1n(yi(mxi+b))

令其为零:

− 2 ∑ i = 1 n ( y i − ( m x i + b ) ) = 0 -2 \sum_{i=1}^n (y_i - (mx_i + b)) = 0 2i=1n(yi(mxi+b))=0

简化得到:

∑ i = 1 n ( y i − m x i − b ) = 0 \sum_{i=1}^n (y_i - mx_i - b) = 0 i=1n(yimxib)=0

m m m 求导:

∂ SSE ∂ m = ∂ ∂ m ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial m} = \frac{\partial}{\partial m} \sum_{i=1}^n (y_i - (mx_i + b))^2 mSSE=mi=1n(yi(mxi+b))2

同样地,我们分步展开:

∂ SSE ∂ m = ∑ i = 1 n ∂ ∂ m ( y i − ( m x i + b ) ) 2 \frac{\partial \text{SSE}}{\partial m} = \sum_{i=1}^n \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 mSSE=i=1nm(yi(mxi+b))2

使用链式法则:

∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ m ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial m} (y_i - (mx_i + b)) m(yi(mxi+b))2=2(yi(mxi+b))m(yi(mxi+b))

注意到 ∂ ∂ m ( y i − ( m x i + b ) ) = − x i \frac{\partial}{\partial m} (y_i - (mx_i + b)) = -x_i m(yi(mxi+b))=xi,所以:

∂ SSE ∂ m = ∑ i = 1 n 2 ( y i − ( m x i + b ) ) ( − x i ) = − 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) \frac{\partial \text{SSE}}{\partial m} = \sum_{i=1}^n 2(y_i - (mx_i + b))(-x_i) = -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) mSSE=i=1n2(yi(mxi+b))(xi)=2i=1nxi(yi(mxi+b))

令其为零:

− 2 ∑ i = 1 n x i ( y i − ( m x i + b ) ) = 0 -2 \sum_{i=1}^n x_i (y_i - (mx_i + b)) = 0 2i=1nxi(yi(mxi+b))=0

简化得到:

∑ i = 1 n x i ( y i − m x i − b ) = 0 \sum_{i=1}^n x_i (y_i - mx_i - b) = 0 i=1nxi(yimxib)=0

3. 简化方程

b b b 的方程:

∑ i = 1 n ( y i − m x i − b ) = 0 \sum_{i=1}^n (y_i - mx_i - b) = 0 i=1n(yimxib)=0

拆开括号:

∑ i = 1 n y i − m ∑ i = 1 n x i − n b = 0 \sum_{i=1}^n y_i - m \sum_{i=1}^n x_i - nb = 0 i=1nyimi=1nxinb=0

我们得到第一个方程:

∑ i = 1 n y i = m ∑ i = 1 n x i + n b (1) \sum_{i=1}^n y_i = m \sum_{i=1}^n x_i + nb \tag{1} i=1nyi=mi=1nxi+nb(1)

m m m 的方程:

∑ i = 1 n x i ( y i − m x i − b ) = 0 \sum_{i=1}^n x_i (y_i - mx_i - b) = 0 i=1nxi(yimxib)=0

拆开括号:

∑ i = 1 n x i y i − m ∑ i = 1 n x i 2 − b ∑ i = 1 n x i = 0 \sum_{i=1}^n x_i y_i - m \sum_{i=1}^n x_i^2 - b \sum_{i=1}^n x_i = 0 i=1nxiyimi=1nxi2bi=1nxi=0

我们得到第二个方程:

∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + b ∑ i = 1 n x i (2) \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + b \sum_{i=1}^n x_i \tag{2} i=1nxiyi=mi=1nxi2+bi=1nxi(2)

4. 联立方程求解 m m m b b b

从方程(1)中解出 b b b

b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=ni=1nyimi=1nxi

b b b 代入方程(2):

∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + ( ∑ i = 1 n y i − m ∑ i = 1 n x i n ) ∑ i = 1 n x i \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + \left(\frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n}\right) \sum_{i=1}^n x_i i=1nxiyi=mi=1nxi2+(ni=1nyimi=1nxi)i=1nxi

简化:

∑ i = 1 n x i y i = m ∑ i = 1 n x i 2 + ∑ i = 1 n y i ∑ i = 1 n x i − m ( ∑ i = 1 n x i ) 2 n \sum_{i=1}^n x_i y_i = m \sum_{i=1}^n x_i^2 + \frac{\sum_{i=1}^n y_i \sum_{i=1}^n x_i - m (\sum_{i=1}^n x_i)^2}{n} i=1nxiyi=mi=1nxi2+ni=1nyii=1nxim(i=1nxi)2

乘以 n n n

n ∑ i = 1 n x i y i = m n ∑ i = 1 n x i 2 + ∑ i = 1 n y i ∑ i = 1 n x i − m ( ∑ i = 1 n x i ) 2 n \sum_{i=1}^n x_i y_i = m n \sum_{i=1}^n x_i^2 + \sum_{i=1}^n y_i \sum_{i=1}^n x_i - m (\sum_{i=1}^n x_i)^2 ni=1nxiyi=mni=1nxi2+i=1nyii=1nxim(i=1nxi)2

合并含 m m m 的项:

n ∑ i = 1 n x i y i − ∑ i = 1 n y i ∑ i = 1 n x i = m ( n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 ) n \sum_{i=1}^n x_i y_i - \sum_{i=1}^n y_i \sum_{i=1}^n x_i = m \left( n \sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2 \right) ni=1nxiyii=1nyii=1nxi=m(ni=1nxi2(i=1nxi)2)

解出 m m m

m = n ∑ i = 1 n x i y i − ∑ i = 1 n x i ∑ i = 1 n y i n ∑ i = 1 n x i 2 − ( ∑ i = 1 n x i ) 2 m = \frac{n\sum_{i=1}^n x_i y_i - \sum_{i=1}^n x_i \sum_{i=1}^n y_i}{n\sum_{i=1}^n x_i^2 - (\sum_{i=1}^n x_i)^2} m=ni=1nxi2(i=1nxi)2ni=1nxiyii=1nxii=1nyi

m m m 代入方程(1)求 b b b

b = ∑ i = 1 n y i − m ∑ i = 1 n x i n b = \frac{\sum_{i=1}^n y_i - m \sum_{i=1}^n x_i}{n} b=ni=1nyimi=1nxi

链式法则(Chain Rule)

链式法则是微积分中的一个重要法则,它用于求复合函数的导数。复合函数是指一个函数的值依赖于另一个函数的值,例如 f ( g ( x ) ) f(g(x)) f(g(x))。链式法则允许我们将复合函数的导数分解为内部函数和外部函数的导数之积。

链式法则的数学表达

h ( x ) = f ( g ( x ) ) h(x) = f(g(x)) h(x)=f(g(x)),其中 y = g ( x ) y = g(x) y=g(x) z = f ( y ) z = f(y) z=f(y)。那么,链式法则的数学表达为:

d d x h ( x ) = d d x f ( g ( x ) ) = f ′ ( g ( x ) ) ⋅ g ′ ( x ) \frac{d}{dx} h(x) = \frac{d}{dx} f(g(x)) = f'(g(x)) \cdot g'(x) dxdh(x)=dxdf(g(x))=f(g(x))g(x)

即:

d z d x = d z d y ⋅ d y d x \frac{dz}{dx} = \frac{dz}{dy} \cdot \frac{dy}{dx} dxdz=dydzdxdy

b b b 求导

我们有残差平方和的公式:

SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2

b b b 求导时,我们可以看到 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi(mxi+b))2 是一个复合函数,其中 y i − ( m x i + b ) y_i - (mx_i + b) yi(mxi+b) 是内部函数,平方是外部函数。应用链式法则:

∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ b ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial b} (y_i - (mx_i + b)) b(yi(mxi+b))2=2(yi(mxi+b))b(yi(mxi+b))

这里 ∂ ∂ b ( y i − ( m x i + b ) ) = − 1 \frac{\partial}{\partial b} (y_i - (mx_i + b)) = -1 b(yi(mxi+b))=1,所以:

∂ ∂ b ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ( − 1 ) = − 2 ( y i − ( m x i + b ) ) \frac{\partial}{\partial b} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot (-1) = -2(y_i - (mx_i + b)) b(yi(mxi+b))2=2(yi(mxi+b))(1)=2(yi(mxi+b))

m m m 求导

同样地,对 m m m 求导时,我们处理的也是一个复合函数:

∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ∂ ∂ m ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot \frac{\partial}{\partial m} (y_i - (mx_i + b)) m(yi(mxi+b))2=2(yi(mxi+b))m(yi(mxi+b))

这里 ∂ ∂ m ( y i − ( m x i + b ) ) = − x i \frac{\partial}{\partial m} (y_i - (mx_i + b)) = -x_i m(yi(mxi+b))=xi,所以:

∂ ∂ m ( y i − ( m x i + b ) ) 2 = 2 ( y i − ( m x i + b ) ) ⋅ ( − x i ) = − 2 x i ( y i − ( m x i + b ) ) \frac{\partial}{\partial m} (y_i - (mx_i + b))^2 = 2(y_i - (mx_i + b)) \cdot (-x_i) = -2x_i(y_i - (mx_i + b)) m(yi(mxi+b))2=2(yi(mxi+b))(xi)=2xi(yi(mxi+b))

对复合函数的导数求解上具体来说:

  1. b b b 求导:
  • 外部函数 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi(mxi+b))2 导数为 2 ( y i − ( m x i + b ) ) 2(y_i - (mx_i + b)) 2(yi(mxi+b))
  • 内部函数 y i − ( m x i + b ) y_i - (mx_i + b) yi(mxi+b) b b b 的导数为 − 1 -1 1
  1. m m m 求导:
  • 外部函数 ( y i − ( m x i + b ) ) 2 (y_i - (mx_i + b))^2 (yi(mxi+b))2 导数为 2 ( y i − ( m x i + b ) ) 2(y_i - (mx_i + b)) 2(yi(mxi+b))
  • 内部函数 y i − ( m x i + b ) y_i - (mx_i + b) yi(mxi+b) m m m 的导数为 − x i -x_i xi

最小二乘法的目标函数

最小二乘法的目标是最小化残差平方和(SSE),其形式为:

SSE = ∑ i = 1 n ( y i − ( m x i + b ) ) 2 \text{SSE} = \sum_{i=1}^n (y_i - (mx_i + b))^2 SSE=i=1n(yi(mxi+b))2

这个目标函数是针对线性回归问题的。我们试图找到参数 m m m b b b 使得预测值 m x i + b mx_i + b mxi+b 与实际值 y i y_i yi 之间的平方误差和最小。

卡尔曼滤波中的目标函数

卡尔曼滤波的目标是递归地估计状态变量,使得估计值与实际值之间的误差最小化。卡尔曼滤波的更新步骤包含两个主要部分:预测和更新。在更新步骤中,我们更新估计的状态和协方差矩阵。

卡尔曼滤波的更新步骤
  1. 预测步骤:
  • 预测状态: x ^ k ∣ k − 1 = F k x ^ k − 1 ∣ k − 1 + B k u k \hat{x}_{k|k-1} = F_k \hat{x}_{k-1|k-1} + B_k u_k x^kk1=Fkx^k1∣k1+Bkuk
  • 预测协方差: P k ∣ k − 1 = F k P k − 1 ∣ k − 1 F k T + Q k P_{k|k-1} = F_k P_{k-1|k-1} F_k^T + Q_k Pkk1=FkPk1∣k1FkT+Qk
  1. 更新步骤:
  • 卡尔曼增益: K k = P k ∣ k − 1 H k T ( H k P k ∣ k − 1 H k T + R k ) − 1 K_k = P_{k|k-1} H_k^T (H_k P_{k|k-1} H_k^T + R_k)^{-1} Kk=Pkk1HkT(HkPkk1HkT+Rk)1
  • 更新状态: x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( z k − H k x ^ k ∣ k − 1 ) \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H_k \hat{x}_{k|k-1}) x^kk=x^kk1+Kk(zkHkx^kk1)
  • 更新协方差: P k ∣ k = ( I − K k H k ) P k ∣ k − 1 P_{k|k} = (I - K_k H_k) P_{k|k-1} Pkk=(IKkHk)Pkk1

残差平方和与卡尔曼滤波的关系

最小二乘法中,我们最小化的是残差平方和(SSE),即 ∑ ( y i − y ^ i ) 2 \sum (y_i - \hat{y}_i)^2 (yiy^i)2。在卡尔曼滤波中,我们最小化的是估计误差协方差矩阵 P P P,这也是一种残差的度量方式。

最小化目标函数的矩阵形式

最小二乘法的目标函数可以用矩阵形式表示。假设 X X X 是设计矩阵,包含所有输入变量(特征), y y y 是目标向量, β \beta β 是参数向量。目标函数的矩阵形式为:

J ( β ) = ( y − X β ) T ( y − X β ) J(\beta) = (y - X\beta)^T (y - X\beta) J(β)=(y)T(y)

卡尔曼滤波的目标函数的矩阵形式

卡尔曼滤波的更新步骤实际上是通过最小化预测和实际测量之间的加权误差平方和来进行的。这个加权误差平方和的目标函数是:

J ( x ^ ) = ( z k − H k x ^ ) T R k − 1 ( z k − H k x ^ ) + ( x ^ − x ^ k ∣ k − 1 ) T P k ∣ k − 1 − 1 ( x ^ − x ^ k ∣ k − 1 ) J(\hat{x}) = (z_k - H_k \hat{x})^T R_k^{-1} (z_k - H_k \hat{x}) + (\hat{x} - \hat{x}_{k|k-1})^T P_{k|k-1}^{-1} (\hat{x} - \hat{x}_{k|k-1}) J(x^)=(zkHkx^)TRk1(zkHkx^)+(x^x^kk1)TPkk11(x^x^kk1)

这里,

  • z k z_k zk 是测量值,
  • H k H_k Hk 是测量矩阵,
  • R k R_k Rk 是测量噪声协方差,
  • x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^kk1 是预测的状态,
  • P k ∣ k − 1 P_{k|k-1} Pkk1 是预测的协方差矩阵。
    这个目标函数考虑了测量误差和状态预测误差的加权和。

目标函数与状态更新公式

在卡尔曼滤波中,状态更新的步骤实际上是最小化当前状态估计和新观测值之间的加权平方误差。这个过程可以看作是一个递归的最小二乘估计。具体来看,更新步骤中的公式和目标函数如下:

更新步骤中的公式
x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( y k − H x ^ k ∣ k − 1 ) \hat{\mathbf{x}}_{k|k} = \hat{\mathbf{x}}_{k|k-1} + \mathbf{K}_k(\mathbf{y}_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1}) x^kk=x^kk1+Kk(ykHx^kk1)
最小化的目标函数
min ⁡ x ^ k ∣ k ∥ y k − H x ^ k ∣ k ∥ 2 \min_{\hat{\mathbf{x}}_{k|k}} \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 minx^kkykHx^kk2

各个符号的含义

更新步骤中的公式
  1. x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^kk
  • 当前时刻 k k k 的状态估计(后验估计)。这是我们希望找到的最优估计值。
  1. x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1
  • 当前时刻 k k k 的状态预测(先验估计)。这是根据之前时刻的状态和系统模型预测出来的。
  1. K k \mathbf{K}_k Kk
  • 卡尔曼增益。它决定了在预测和观测之间的加权比例,使得估计更准确。
  1. y k \mathbf{y}_k yk
  • 当前时刻 k k k 的观测值。它是通过测量得到的。
  1. H \mathbf{H} H
  • 观测矩阵。它描述了状态向量如何映射到观测空间。
  1. y k − H x ^ k ∣ k − 1 \mathbf{y}_k - \mathbf{H}\hat{\mathbf{x}}_{k|k-1} ykHx^kk1
  • 观测残差或创新。它表示观测值和预测值之间的差异。
目标函数

min ⁡ x ^ k ∣ k ∥ y k − H x ^ k ∣ k ∥ 2 \min_{\hat{\mathbf{x}}_{k|k}} \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 minx^kkykHx^kk2
该目标函数中的每个符号与更新步骤中的符号意义相同,解释如下:

  1. y k \mathbf{y}_k yk
  • 当前时刻 k k k 的观测值。
  1. H x ^ k ∣ k \mathbf{H} \hat{\mathbf{x}}_{k|k} Hx^kk
  • 当前时刻 k k k 的状态估计在观测空间的映射。
  1. ∥ y k − H x ^ k ∣ k ∥ 2 \| \mathbf{y}_k - \mathbf{H} \hat{\mathbf{x}}_{k|k} \|^2 ykHx^kk2
  • 观测残差的平方和。它表示观测值和状态估计在观测空间中的差异。

思路说明

  1. 预测阶段
  • 我们使用系统模型来预测当前时刻的状态( x ^ k ∣ k − 1 \hat{\mathbf{x}}_{k|k-1} x^kk1)和误差协方差( P k ∣ k − 1 P_{k|k-1} Pkk1)。
  1. 更新阶段
  • 计算卡尔曼增益( K k \mathbf{K}_k Kk),它平衡了预测和观测的不确定性。
  • 更新状态估计( x ^ k ∣ k \hat{\mathbf{x}}_{k|k} x^kk),使其尽可能地靠近实际观测值。
  • 更新误差协方差( P k ∣ k P_{k|k} Pkk),使其反映出新的不确定性。

关系

  • 残差平方和:在最小二乘法中,我们最小化的是预测值与实际值之间的平方误差和。
  • 最小化的目标函数:在卡尔曼滤波中,我们最小化的是测量误差和状态预测误差的加权和,通过更新步骤调整估计的状态和协方差矩阵。
    核心思想都是通过最小化误差(或残差)来优化模型参数,从而得到更好的预测结果。

http://www.ppmy.cn/devtools/51031.html

相关文章

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决,只需要2次遍历字符串,第一次遍历字符串,记录每个字符出现的次数,第二次返回第一个出现次数为1的字符的下标,若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

人工智能和机器学习的区别

目录 一、介绍人工智能 二、介绍机器学习 三、人工智能和机器学习的区别和联系? 一、介绍人工智能 先来说下人工智能,人工智能(Artificial Intelligence),英文缩写为AI,通俗来讲就是用机器去做在过去只有…

FPGA - 数 - 加减乘除

一,数的表示 首先,将二进制做如下解释: 2的0次方1 2的1次方2 2的2次方4 2的3次方8 ..... 以此类推,那么任何整数,或者说任意一个自然数均可以采用这种方式来表示。 例如,序列10101001,根据上述…

SpringCloud-面试篇(二十五)

(1)Sentinel与Hystix的线程隔离有什么差别? (2)Sentinel的限流与Gateway限流有什么差别 固定窗口计数器算法,可能再其他的时间两个窗口的交界内超过了请求阈值 ,所以就有了滑动窗口算法 滑动窗…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 多段线路径压缩(100分)- 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 多段线路径压缩(100分) 🌍 评测功能需要订阅专栏后私信联系…

面试题——Redis

★1.简述一下缓存穿透,缓存击穿,缓存雪崩 ? 缓存穿透:大量恶意请求一个不存在的数据,使得压力绕过Redis缓存层打到数据库,造成数据库瘫痪 处理:①设置黑名单,维护一个可能存在也可能不存在的黑名单数据列表,对请求进行过滤(简单高效) ②布隆过滤器,会出现误删,且相对麻烦(不…

【笔记】【Git】多个dev分支合并到master分支的文件冲突

问题描述 多个dev分支在同步开发,同时发起代码评审,但合入master的时候存在先后顺序,那么后面同文件的操作则会提示“合并有文件冲突”,导致代码无法入库,只能重新提交。 在个人分支中如何解决与master分支差异&#…

CP AUTOSAR标准之COM(AUTOSAR_CP_SWS_COM)(更新中……)

1 简介和功能概述 本规范是AUTOSAR COM模块软件规范。它基于AUTOSAR COM SRS[1]。它指定了如何实现AUTOSAR COM SRS的要求。这意味着本文档描述了AUTOSAR COM模块的功能和API。   在AUTOSAR分层架构中,AUTOSAR COM模块位于其用户(例如RTE、SwCluC)和PDU路由器之间,参见[2]。…