泰勒展开
2.1 节说,光滑函数放大后是一条直线。泰勒展开把这句话升级:放大后是直线,稍微放松一点是抛物线,再放松一点是三次曲线……每多算一阶导数,近似就能在更大的范围内贴紧函数。机器人里的"小角度近似"、线性化、Newton 法、EKF,全是截断的泰勒展开。
1为什么机器人需要它
机器人学几乎每个地方都在做同一件事:把难算的非线性函数,在工作点附近换成容易算的多项式。
- 倒立摆的控制器按 \(\sin\theta\approx\theta\) 设计(线性化),在竖直附近稳稳地工作。
- 扩展卡尔曼滤波(EKF)把非线性的运动与观测模型在当前估计处展开到一阶。
- Newton 法、Gauss–Newton、SQP 每一步都在解"一阶或二阶泰勒模型"的最优点。
- 小旋转 \(R\approx I+[\boldsymbol\omega]_\times\),是李群里指数映射的一阶展开。
用得多,就更要知道:这个多项式在多大范围内可信,丢掉的那一项有多大。这是本节要讲清楚的。
2直觉:每多一阶导数,多贴紧一圈
想在 \(x=a\) 处"复制"一个函数。零阶:只对上高度,得到一条水平线。一阶:再对上斜率,得到切线。二阶:再对上弯曲程度,得到抛物线。三阶:对上弯曲程度的变化……每对上一阶,近似曲线就和真函数多"黏"在一起一段。
下面拖动阶数滑块,拖动琥珀色的展开点 \(a\),再拖紫色的探针 \(x\),观察右图:误差随离展开点的距离 \(|x-a|\) 缩小得有多快。
- 选 sin x,\(a=0\),阶数调到 7:把探针拖到 \(x=\pm\pi\) 附近,误差仍小于 0.1。
- 选 ln(1+x),\(a=0\),阶数 6 以上,把探针拖到 \(x>1\):阶数越高误差越大(超出收敛半径)。
泰勒多项式是"局部近似":在展开点附近,\(n\) 阶近似的误差是 \(O(|x-a|^{n+1})\),离得越近越准、阶数越高越准;但远离展开点,多项式可能很快跑偏,甚至越高阶越差(有些函数有"收敛半径",比如 \(\ln(1+x)\) 在 \(|x|>1\) 处)。
3动手玩:小角度、Newton 法、摆
小角度近似到底有多小?
\(\sin\theta\approx\theta\)、\(\cos\theta\approx1\)、\(\cos\theta\approx1-\tfrac12\theta^2\) 是机器人里最常用的三个近似。右侧是它们的相对误差随角度变化的曲线(纵轴是以 10 为底的对数,−2 即 1%)。"小"得看你容忍多大误差。
- 找到 \(\sin\theta\approx\theta\) 的误差刚好达到 1% 的角度(约 14°)。
- 找到 \(\cos\theta\approx1\) 的误差达到 1% 的角度。它为什么比 sin 的小得多?
Newton 法:每一步都是一个泰勒模型
求根:在当前点 \(x_k\) 用一阶泰勒(切线)代替 \(f\),解切线的零点作为下一个点:\(x_{k+1}=x_k-f(x_k)/f'(x_k)\)。求极小:用二阶泰勒(抛物线)代替 \(g\),跳到抛物线的顶点:\(x_{k+1}=x_k-g'(x_k)/g''(x_k)\)。拖动起点 \(x_0\),点"步进",看它怎么走,什么时候出问题。
- 求根,函数 \(x^2-2\),\(x_0=1\):看到残差在 6 步内降到 \(10^{-12}\) 以下(二次收敛)。
- 求根,函数 \(x^3-2x+2\),\(x_0=0\):迭代在 0 和 1 之间来回跳,永远到不了根。
- 求极小,选"非凸",在 \(g''<0\) 的地方起步:这一步让 g 变大了。
摆:线性化好用到哪里?
单摆满足 \(\ddot\theta=-\tfrac g\ell\sin\theta\)。线性化(\(\sin\theta\approx\theta\))得到简谐运动 \(\ddot\theta=-\tfrac g\ell\theta\),周期和振幅无关。真实的摆摆得越大,周期越长。下面把两者的轨迹放在一起,改变初始摆角。
- 摆角 ≤ 10°:两条轨迹在 8 秒内几乎无法区分(最大差小于 0.5°)。
- 摆角 ≥ 90°:真实的摆周期比线性模型长 15% 以上。
4再看数学
提示:悬停在公式带底色的符号上,FIG 1 里对应的部分会高亮。
泰勒公式
设 \(f\) 在 \(a\) 附近有 \(n+1\) 阶导数,则
展开到前几项:\(f(a)+f'(a)\,\delta+\tfrac12f''(a)\,\delta^2+\tfrac16f'''(a)\,\delta^3+\cdots\),\(\delta=x-a\)。系数里的 \(1/k!\) 是为了让多项式的 \(k\) 阶导数在 \(a\) 处恰好等于 \(f^{(k)}(a)\)。余项说明误差是 \(O(|\delta|^{n+1})\),系数由 \(f^{(n+1)}\) 控制:函数"弯"得越厉害,误差越大。
值得记住的几个展开(在 0 处)
| 函数 | 展开 | 适用范围 |
|---|---|---|
| \(\sin x\) | \(x-\tfrac{x^3}{6}+\tfrac{x^5}{120}-\cdots\) | 所有 \(x\) |
| \(\cos x\) | \(1-\tfrac{x^2}{2}+\tfrac{x^4}{24}-\cdots\) | 所有 \(x\) |
| \(e^x\) | \(1+x+\tfrac{x^2}{2}+\tfrac{x^3}{6}+\cdots\) | 所有 \(x\) |
| \(\ln(1+x)\) | \(x-\tfrac{x^2}{2}+\tfrac{x^3}{3}-\cdots\) | \(|x|<1\) |
| \(\dfrac1{1-x}\) | \(1+x+x^2+x^3+\cdots\) | \(|x|<1\) |
多元函数
对 \(f:\mathbb R^n\to\mathbb R\),到二阶:
一阶项里的梯度见 3.2 节,二阶项里的 Hessian 见 3.5 节。对向量函数 \(\mathbf f:\mathbb R^n\to\mathbb R^m\),一阶项是雅可比:\(\mathbf f(\mathbf x+\boldsymbol\delta)\approx\mathbf f(\mathbf x)+J\boldsymbol\delta\)(3.3 节),这就是 EKF 的线性化。
Newton 法的来历与速度
令一阶模型 \(f(x_k)+f'(x_k)(x-x_k)=0\),解得 \(x_{k+1}=x_k-f(x_k)/f'(x_k)\)。把 \(f\) 展开到二阶可以证明:在单根附近 \(e_{k+1}\approx\dfrac{f''(x^\star)}{2f'(x^\star)}\,e_k^2\),误差被平方:\(10^{-2}\to10^{-4}\to10^{-8}\to10^{-16}\),这叫二次收敛。求极小就是对导数 \(g'\) 做 Newton 法,等价于每步最小化二阶泰勒模型。
5机器人中的它:线性化的有效区域
FIG 4 的结论可以直接搬到控制器设计里:
- 用线性化模型设计的控制器(PD、LQR)只在工作点附近有保证。摆角 10° 以内,模型误差不到 1%;超过 60°,线性模型已经完全不对了。
- EKF 在当前估计 \(\hat{\mathbf x}\) 处线性化。如果估计偏离真值太远(比如机器人"被绑架"),线性化点本身错了,滤波器会越修越偏,这叫不一致。
- 轨迹优化每一步用二阶泰勒模型,为防止"跳出可信范围",要加信赖域(6.5 节):限制步长不超过模型可信的半径。
- 数值上的警告:\(1-\cos\theta\) 在 \(\theta\) 很小时会因为两个近似相等的数相减而丢掉有效数字,应当写成 \(2\sin^2(\theta/2)\),或者直接用泰勒展开 \(\theta^2/2\)。
旋转的最基本事实也是泰勒展开:绕轴 \(\hat{\mathbf n}\) 转很小的角 \(\phi\),\(R=\exp([\phi\hat{\mathbf n}]_\times)\approx I+[\phi\hat{\mathbf n}]_\times\)。IMU 积分、视觉里程计、姿态估计里随处可见"小旋转 \(\approx I+\)反对称矩阵",我们会在 5.6、5.7 节把它做严格。
6常见误区
只在收敛半径内成立,也只在离展开点不太远时成立。FIG 1 里 \(\ln(1+x)\) 在 \(x>1\) 处越展开越离谱。
"一阶近似"误差是 \(\delta^2\),"二阶近似"误差是 \(\delta^3\)。\(\cos\theta\approx1\) 虽然是"零阶",误差却是 \(\theta^2/2\);而 \(\sin\theta\approx\theta\) 是"一阶",误差是 \(\theta^3/6\),因为 \(\sin\) 的二阶项恰好为零。
它只保证"离解足够近时二次收敛"。起点不好,会来回跳(FIG 3),甚至发散。求极小时若 Hessian 不是正定,Newton 步会指向上坡或鞍点。实用的做法是配合线搜索或信赖域,或给 Hessian 加阻尼(Levenberg–Marquardt,6.6 节)。
\(\sin\theta\approx\theta\) 要求 \(\theta\) 是弧度。\(\sin 10^\circ\approx10\) 是荒谬的。
7小练习
8延伸阅读
- 3Blue1Brown, Essence of Calculus — 第 11 章:泰勒级数
- J. Nocedal & S. Wright, Numerical Optimization, Ch. 3, 6 — 信赖域与 Newton 类方法
- T. Barfoot, State Estimation for Robotics, Ch. 4 — 非线性系统的线性化与 EKF
- S. Boyd & L. Vandenberghe, Convex Optimization, App. A.4 — 导数与二阶近似