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

2024-06-16 11:28

本文主要是介绍从最小二乘法的角度来理解卡尔曼滤波(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

从最小二乘法的角度来理解卡尔曼滤波(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),使其反映出新的不确定性。

关系

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

这篇关于从最小二乘法的角度来理解卡尔曼滤波(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1066335

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

poj 1287 Networking(prim or kruscal最小生成树)

题意给你点与点间距离,求最小生成树。 注意点是,两点之间可能有不同的路,输入的时候选择最小的,和之前有道最短路WA的题目类似。 prim代码: #include<stdio.h>const int MaxN = 51;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int P;int prim(){bool vis[MaxN];

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

hdu 1102 uva 10397(最小生成树prim)

hdu 1102: 题意: 给一个邻接矩阵,给一些村庄间已经修的路,问最小生成树。 解析: 把已经修的路的权值改为0,套个prim()。 注意prim 最外层循坏为n-1。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstri

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 2175 最小费用最大流TLE

题意: 一条街上有n个大楼,坐标为xi,yi,bi个人在里面工作。 然后防空洞的坐标为pj,qj,可以容纳cj个人。 从大楼i中的人到防空洞j去避难所需的时间为 abs(xi - pi) + (yi - qi) + 1。 现在设计了一个避难计划,指定从大楼i到防空洞j避难的人数 eij。 判断如果按照原计划进行,所有人避难所用的时间总和是不是最小的。 若是,输出“OPETIMAL",若

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝