泰勒展开(Taylor Expansion)是微积分中一个重要工具,它将一个在某点可导函数表示为无穷级数,从而用多项式近似函数。它广泛用于数值计算、物理建模、SLAM 优化等领域。


一、单变量泰勒展开公式

基本形式

设函数 f(x)f(x)f(x) 在某点 aaa 处具有无限阶导数,则它在该点的泰勒展开为:

f(x)=f(a)+f′(a)(x−a)+f′′(a)2!(x−a)2+⋯+f(n)(a)n!(x−a)n+Rn(x) f(x) = f(a) + f'(a)(x-a) + \frac{f''(a)}{2!}(x-a)^2 + \cdots + \frac{f^{(n)}(a)}{n!}(x-a)^n + R_n(x) f(x)=f(a)+f(a)(xa)+2!f′′(a)(xa)2++n!f(n)(a)(xa)n+Rn(x)

其中:

  • f(n)(a)f^{(n)}(a)f(n)(a):第 nnn 阶导数在 aaa 点的值。
  • Rn(x)R_n(x)Rn(x):余项,用于表示截断误差。

麦克劳林展开(Maclaurin)

是泰勒展开在 a=0a=0a=0 处的特例:

f(x)=f(0)+f′(0)x+f′′(0)2!x2+⋯ f(x) = f(0) + f'(0)x + \frac{f''(0)}{2!}x^2 + \cdots f(x)=f(0)+f(0)x+2!f′′(0)x2+


常见函数的泰勒展开(Maclaurin)

函数 展开式
exe^xex 1+x+x22!+x33!+⋯1 + x + \frac{x^2}{2!} + \frac{x^3}{3!} + \cdots1+x+2!x2+3!x3+
sin⁡x\sin xsinx x−x33!+x55!−⋯x - \frac{x^3}{3!} + \frac{x^5}{5!} - \cdotsx3!x3+5!x5
cos⁡x\cos xcosx 1−x22!+x44!−⋯1 - \frac{x^2}{2!} + \frac{x^4}{4!} - \cdots12!x2+4!x4
ln⁡(1+x)\ln(1+x)ln(1+x) x−x22+x33−⋯(−1<x≤1)x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots \quad (-1<x \le 1)x2x2+3x3(1<x1)

二、多元泰勒展开公式(Multivariable Taylor Expansion)

设函数 f(x,y)f(x, y)f(x,y) 在点 (a,b)(a, b)(a,b) 处具有连续偏导数,我们希望对 f(x,y)f(x, y)f(x,y) 在点 (a,b)(a, b)(a,b) 处展开,近似表示在附近的值 f(a+h,b+k)f(a + h, b + k)f(a+h,b+k)

一阶泰勒展开:

f(a+h,b+k)≈f(a,b)+fx(a,b)h+fy(a,b)k f(a + h, b + k) \approx f(a, b) + f_x(a, b) h + f_y(a, b) k f(a+h,b+k)f(a,b)+fx(a,b)h+fy(a,b)k

是函数在点 (a,b)(a, b)(a,b) 处的线性近似(即切平面)。


二阶泰勒展开:

f(a+h,b+k)≈ f(a,b)+fx(a,b)h+fy(a,b)k+12[fxx(a,b)h2+2fxy(a,b)hk+fyy(a,b)k2] \begin{aligned} f(a + h, b + k) \approx\ & f(a, b) + f_x(a, b) h + f_y(a, b) k \\ &+ \frac{1}{2} \left[ f_{xx}(a, b) h^2 + 2f_{xy}(a, b) hk + f_{yy}(a, b) k^2 \right] \end{aligned} f(a+h,b+k) f(a,b)+fx(a,b)h+fy(a,b)k+21[fxx(a,b)h2+2fxy(a,b)hk+fyy(a,b)k2]

这个式子也可写作矩阵形式(见下文)。


向量记号的二阶泰勒展开(推广到 nnn 维):

设函数 f:Rn→Rf : \mathbb{R}^n \to \mathbb{R}f:RnR,点 x0∈Rn\mathbf{x}_0 \in \mathbb{R}^nx0Rn,展开点为 x=x0+Δx\mathbf{x} = \mathbf{x}_0 + \Delta \mathbf{x}x=x0+Δx

f(x0+Δx)≈f(x0)+∇f(x0)⊤Δx+12Δx⊤Hf(x0)Δx f(\mathbf{x}_0 + \Delta \mathbf{x}) \approx f(\mathbf{x}_0) + \nabla f(\mathbf{x}_0)^\top \Delta \mathbf{x} + \frac{1}{2} \Delta \mathbf{x}^\top H_f(\mathbf{x}_0) \Delta \mathbf{x} f(x0+Δx)f(x0)+f(x0)Δx+21ΔxHf(x0)Δx

其中:

  • ∇f\nabla ff:梯度列向量(偏导数);
  • HfH_fHf:Hessian 矩阵(所有二阶偏导);
  • Δx\Delta \mathbf{x}Δx:位移向量。

示例 1:展开 f(x)=ln⁡(1+x)f(x) = \ln(1+x)f(x)=ln(1+x)x=0x=0x=0

f(x)=ln⁡(1+x)f′(x)=11+x,f′′(x)=−1(1+x)2,…⇒f(x)=x−x22+x33−⋯(−1<x≤1) \begin{aligned} f(x) &= \ln(1+x) \\ f'(x) &= \frac{1}{1+x},\quad f''(x) = -\frac{1}{(1+x)^2}, \ldots \\ \Rightarrow f(x) &= x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots \quad (-1 < x \le 1) \end{aligned} f(x)f(x)f(x)=ln(1+x)=1+x1,f′′(x)=(1+x)21,=x2x2+3x3(1<x1)


示例 2:多元函数 f(x,y)=ex+yf(x, y) = e^{x+y}f(x,y)=ex+y(0,0)(0,0)(0,0) 处展开

  • f(x,y)=1+(x+y)+12!(x+y)2+⋯f(x, y) = 1 + (x + y) + \frac{1}{2!}(x + y)^2 + \cdotsf(x,y)=1+(x+y)+2!1(x+y)2+

也可展开为:

f(x,y)=1+x+y+x22+xy+y22+⋯ f(x, y) = 1 + x + y + \frac{x^2}{2} + xy + \frac{y^2}{2} + \cdots f(x,y)=1+x+y+2x2+xy+2y2+


示例 3:在优化中的使用(如 SLAM)

在 GTSAM 或 Ceres 等优化库中,经常用一阶或二阶泰勒展开来逼近非线性残差函数:

设残差函数 r(x)r(\mathbf{x})r(x),优化变量 x\mathbf{x}x 附近一阶展开:

r(x+δ)≈r(x)+Jδ r(\mathbf{x} + \delta) \approx r(\mathbf{x}) + J \delta r(x+δ)r(x)+Jδ

其中 J=∂r∂xJ = \frac{\partial r}{\partial \mathbf{x}}J=xr 是雅可比矩阵,这是高斯-牛顿等算法的核心。


三、多元函数的极值判别法(极值充分条件)

判断多元函数 f(x,y)f(x, y)f(x,y) 在某点是否取得极值,步骤如下:

Step 1: 求偏导

fx(x,y)=0,fy(x,y)=0 f_x(x, y) = 0, \quad f_y(x, y) = 0 fx(x,y)=0,fy(x,y)=0

求解得驻点(候选极值点)。


Step 2: 构造海森矩阵(Hessian Matrix)

H=[fxxfxyfyxfyy] H = \begin{bmatrix} f_{xx} & f_{xy} \\ f_{yx} & f_{yy} \end{bmatrix} H=[fxxfyxfxyfyy]

D=det⁡(H)=fxxfyy−(fxy)2D = \det(H) = f_{xx} f_{yy} - (f_{xy})^2D=det(H)=fxxfyy(fxy)2


Step 3: 二阶判别条件

  • D>0D > 0D>0fxx>0f_{xx} > 0fxx>0 → 极小值
  • D>0D > 0D>0fxx<0f_{xx} < 0fxx<0 → 极大值
  • D<0D < 0D<0 → 鞍点(非极值点)
  • D=0D = 0D=0 → 无法判别(需更高阶展开)

示例:

f(x,y)=x2+y2+xy f(x, y) = x^2 + y^2 + xy f(x,y)=x2+y2+xy

  1. 梯度:

    fx=2x+y,fy=2y+x⇒x=y=0为驻点 f_x = 2x + y, \quad f_y = 2y + x \Rightarrow x = y = 0 \quad \text{为驻点} fx=2x+y,fy=2y+xx=y=0为驻点

  2. 二阶导数:

    fxx=2,fyy=2,fxy=1⇒D=2⋅2−12=3>0⇒fxx=2>0⇒(0,0)为极小值点 f_{xx} = 2, f_{yy} = 2, f_{xy} = 1 \Rightarrow D = 2 \cdot 2 - 1^2 = 3 > 0 \Rightarrow f_{xx} = 2 > 0 \Rightarrow (0, 0) 为极小值点 fxx=2,fyy=2,fxy=1D=2212=3>0fxx=2>0(0,0)为极小值点


四、误差传播应用实战

在**误差传播(Error Propagation)**中,泰勒展开是分析非线性函数对输入误差敏感性的核心工具,尤其是一阶展开被广泛用于估计输出协方差。下面详细说明:


1、误差传播的基本思想

给定一个输入变量向量 x∈Rn\mathbf{x} \in \mathbb{R}^nxRn,具有均值 xˉ\bar{\mathbf{x}}xˉ 和协方差矩阵 Σx\Sigma_xΣx,其经过非线性变换:

y=f(x)∈Rm \mathbf{y} = f(\mathbf{x}) \in \mathbb{R}^m y=f(x)Rm

我们希望估计输出 y\mathbf{y}y 的协方差矩阵 Σy\Sigma_yΣy


2、一阶泰勒展开用于误差传播

在输入均值点 xˉ\bar{\mathbf{x}}xˉ 附近进行一阶展开:

f(x)≈f(xˉ)+J(x−xˉ) f(\mathbf{x}) \approx f(\bar{\mathbf{x}}) + J (\mathbf{x} - \bar{\mathbf{x}}) f(x)f(xˉ)+J(xxˉ)

其中:

  • J=∂f∂x∣xˉ∈Rm×nJ = \left. \frac{\partial f}{\partial \mathbf{x}} \right|_{\bar{\mathbf{x}}} \in \mathbb{R}^{m \times n}J=xf xˉRm×n 是雅可比矩阵

那么,输出协方差 Σy\Sigma_yΣy 近似为:

Σy≈JΣxJT \Sigma_y \approx J \Sigma_x J^T ΣyJΣxJT

这就是经典的线性误差传播公式


3、实际示例(坐标转换)

场景:从极坐标 (r,θ)(r, \theta)(r,θ) 转换到笛卡尔坐标 (x,y)(x, y)(x,y)

定义转换:

f(r,θ)=[xy]=[rcos⁡θrsin⁡θ] f(r, \theta) = \begin{bmatrix} x \\ y \end{bmatrix} =\begin{bmatrix} r \cos \theta \\ r \sin \theta \end{bmatrix} f(r,θ)=[xy]=[rcosθrsinθ]

假设:

  • 输入 xˉ=[rθ]\bar{\mathbf{x}} = \begin{bmatrix} r \\ \theta \end{bmatrix}xˉ=[rθ]
  • 输入协方差为:

Σx=[σr200σθ2] \Sigma_x = \begin{bmatrix} \sigma_r^2 & 0 \\ 0 & \sigma_\theta^2 \end{bmatrix} Σx=[σr200σθ2]

计算雅可比矩阵:

J=[cos⁡θ−rsin⁡θsin⁡θrcos⁡θ] J = \begin{bmatrix} \cos \theta & -r \sin \theta \\ \sin \theta & r \cos \theta \end{bmatrix} J=[cosθsinθrsinθrcosθ]

代入误差传播公式:

Σy=JΣxJT \Sigma_y = J \Sigma_x J^T Σy=JΣxJT

就得到了 (x,y)(x, y)(x,y) 的协方差。


4、在 SLAM / GTSAM 中的应用场景

应用场景 描述
IMU 预积分误差传播 用一阶泰勒近似推导预积分中速度/位置的协方差更新
点云 ICP / 位姿图优化中 将相对变换误差从局部坐标系传播到世界系:使用雅可比左乘传播
视觉SLAM中三角化点的不确定性传播 将图像点误差通过三角化过程传播到3D点的协方差
优化中残差的线性化 高斯-牛顿、LM 中都依赖于雅可比传播误差与协方差

5、Python 示例代码

以上面的极坐标转直角坐标为例:

import numpy as np

# 均值点
r = 2.0
theta = np.pi / 4

# 输入协方差
sigma_r = 0.05
sigma_theta = 0.02
Sigma_x = np.diag([sigma_r**2, sigma_theta**2])

# 计算雅可比
J = np.array([
    [np.cos(theta), -r * np.sin(theta)],
    [np.sin(theta),  r * np.cos(theta)]
])

# 输出协方差
Sigma_y = J @ Sigma_x @ J.T
print("Output covariance Σ_y:\n", Sigma_y)

6、总结

项目 内容
使用条件 非线性函数可微,输入误差较小(局部线性近似有效)
优点 计算快速,适合高频状态估计(如 IMU 融合)
局限 线性化误差大时不准,需二阶或采样方法(如 UKF、蒙特卡洛)
常用工具 雅可比矩阵、协方差传播、残差线性化

五、总结表格

内容 表达式 作用
一阶泰勒展开 f(x)≈f(x0)+∇f⊤Δxf(\mathbf{x}) \approx f(\mathbf{x}_0) + \nabla f^\top \Delta \mathbf{x}f(x)f(x0)+fΔx 一阶近似
二阶泰勒展开 加上 12Δx⊤HΔx\frac{1}{2} \Delta x^\top H \Delta x21ΔxHΔx 曲率控制精度更高
极值判断 利用 Hessian 矩阵的行列式 DDD 和符号 判定极大、极小或鞍点

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐