重启数学:泰勒展开式的直观理解

2806 字

一、前言

大学的数学教材大多是枯燥的纯粹理论性的阐述公理公式,但是缺乏对"怎么来的、为什么要这么写、怎么应用"这些问题的回答,笔者在大学毕业多年以后偶然需要用到这些知识时,却始终无法将这些理论公式和实际工作关联起来,因此决定开展重启数学系列文章,从实际应用的角度重新学习工程当中所涉及的数学知识,本篇开始讨论泰勒展开式的相关内容。

二、推导过程

2.1 背景

实际工程中我们面对的问题大多是复杂和难以计算的,因此需要有一种数学工具去简化这种计算。在 1715 年,英国数学家布鲁克·泰勒(Brook Taylor)在他的著作中提出了这个展开方法。他的思路正是:

如果一个函数足够光滑(无限可导),我们能否构造一个幂级数(即多项式),让它在某一点 $x=a$ 处与原函数的函数值、一阶导、二阶导……直到任意阶导数都相等?

这其实是说如果原函数是难以计算的,那么我们能否使用易于计算的多项式去逼近原函数进而求解呢?因此就要求多项式在$x=a$处匹配原函数的各阶导数,这是为了使这个多项式在$a$点附近尽可能"像"原函数——不仅仅值相等,连变化趋势、弯曲方式都一致,这样的多项式就可以成为原函数的一个高精度的局部近似,或说两个函数在$x=a$处附近贴的很紧。如下表所示:

阶数 导数 意义 效果
0 $f(a)$ 函数值 两函数在$x=a$处相交
1 ${f}’(a)$ 斜率 两函数在$x=a$处相切
2 ${f}’’(a)$ 弯曲程度(凹凸性) 曲线弯曲方式一致
3 ${f}^{(3)} (a)$ 弯曲的变化率 更精细的贴合”扭曲”趋势
$\vdots$ $\vdots$ $\vdots$ 越来越精细的”函数纹理 “
$\infty$ 所有阶导数 局部行为完全一致 多项式成为函数的局部克隆

所有阶导数合在一起就像是给函数做了一次”CT扫描”,从最表层的斜率到最细微的”波动纹理”,泰勒展开就是利用这些”扫描数据”,在局部重建了一个数学上的”克隆体”。

2.2 构造推导

假设存在这样的多项式,因此函数$f(x)$可以使用一个关于$(x-a)$的多项式表示为:

$$f(x)=c_{0}+c_{1}(x-a)+c_{2}(x-a)^{2}+c_{3}(x-a)^{3}+\dots $$

现在任务是求出系数$c_{0},c_{1},c_{2}\dots$,那么逐次代入$x=a$并求导

  • 第0次:代入$x=a$
    $$f(a) = c_{0} \Rightarrow c_{0} = f(a)$$

  • 第1次:对两边求导,再代入$x=a$

$${f}’(x) = c_{1}+2c_{2}(x-a)+3c_{3}(x-a)^{2}+ \dots \Rightarrow {f}’(a) = c_{1} \Rightarrow c_{1} = {f}’(a)$$

  • 第2次:再次求导,再代入$x=a$

$${f}’’(x) = 2c_{2}+6c_{3}(x-a)+ \dots \Rightarrow {f}’’(a) = 2c_{2} \Rightarrow c_{2} = \frac{f’’(x)}{2}$$

  • 第3次:再次求导,再代入$x=a$

$$f^{(3)}(x) = 6c_{3}+ \dots \Rightarrow f^{(3)}(a) = 6c_{3} \Rightarrow c_{3} = \frac{f^{(3)}(a)}{6}$$

注意到:2 = 2! , 6 = 3! , ...,所以一般地:

$$c_{n} = \frac{f^{(n)}(a)}{n!}$$

这样代入多项式可得:

$$f(x)=f(a)+f’(a)(x-a)+\frac{f’’(a)}{2!}(x-a)^{2}+\frac{f^{(3)}(a)}{3!}(x-a)^{3}+\dots= \sum_{n=0 }^{\infty}\frac{f^{(n)}(a)}{n!}(x-a)^{n} $$

2.3 拉格朗日余项

如$\sin(x),e^{x}$之类的函数的泰勒级数是无限项的,因此当截断到$n$项时,必然存在误差,我们引入余项的概念来对误差的做精确的表达和估计。那么严谨的泰勒展开式可以表述为:

$$f(x) = P_{n}(x) + R_{n}(x) = \sum_{n=0 }^{\infty}\frac{f^{(n)}}{n!}(x-a)^{n} + R_{n}(x)$$

其中$R_{n}(x)$即为拉格朗日余项。那这个余项的表达式是怎么来的呢?

从直觉上来说,当我们使用$n$阶多项式去逼近函数,其实忽略了更高阶的变化;这部分被忽略的部分主要由第$n+1$阶导数控制,即:

$$\frac{f^{(n+1)(a)}}{(n+1)!}(x-a)^{n+1}$$

但问题是这个项用的是$f^{(n+1)}(a)$,也就是在$a$点的导数,而现实中,$f^{(n+1)}(x)$可能在区间$[a,x]$上时变化的,不一定等于$f^{(n+1)}(a)$,因此在$[a,x]$中选取一个中间点$\xi$使得:

$$真实误差=\frac{f^{(n+1)(\xi)}}{(n+1)!}(x-a)^{n+1}$$

这样$f^{(n+1)}(\xi)$就代表了整个区间上第$n+1$阶导数的整体误差。当然我们也可以用严密的数学推论证明:

步骤一:定义误差函数

$$R_{n}(x) = f(x) - \sum_{k=0}^{n}\frac{f^{(k)}(a)}{k!}(x-a)^{k}$$

步骤二:构造辅助函数

考虑一个辅助函数$F(t)$,定义在$[a,x]$上:

$$F(t) = f(x) - [f(t)+f’(t)(x-t)+\frac{f’’(t)}{2!}(x-t)^2+\dots +\frac{f^{(n)}(t)}{n!}(x-t)^n ]$$

这个$F(t)$表示是以$t$为展开点,用$n$阶泰勒多项式去逼近$f(x)$时的误差。

特别的:

  • 当$t=a$时,$F(a)=R_{n}(x)$,这是我们要求的余项
  • 当$t=x$时,$F(x)=f(x)-f(x)=0$

步骤三:构造辅助函数

为了使用柯西中值定理,引入另一个函数:

$$G(t) = (x-t)^{n+1}$$

则$G(t)$在$[a,x]$上的值域为$[(x-a)^{n+1},0]$

步骤四:构造满足罗尔定理条件的函数

由上可知$F(t)$不满足$F(a)=F(x)$,所以构建一个新函数$H(x)$,使得在区间$[a,x]$的两侧都为0,令:

$$H(t) = F(t) - \frac{F(a)}{G(a)}G(t)$$

则有:

  • $H(x)=F(x)-\frac{F(a)}{G(a)}G(x) = 0-C \cdot 0 = 0$
  • $H(a)=F(a)-\frac{F(a)}{G(a)}G(a) = F(a)- F(a) = 0$

这样满足$H(a) = H(X) =0$,且$H(x)$在$(a,x)$区间内连续且可导,则根据罗尔定理存在$\xi \in (a,x)$,使得:

$$H’(\xi) = 0$$

步骤五:计算导数并化简$

计算$H’(\xi) = F’(t) - \frac{F(a)}{G(a)}G’(t)$,令 $H’(\xi)=0$,代入$F’(t)$和$G’(t)$的表达式最终解出$F(a)=R_{n}(x)$,得到:

$$R_{n}(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}$$

那么泰勒展开式的拉格朗日余项的表现形式为:

$$f(x) = \sum_{n=0 }^{\infty}\frac{f^{(n)}}{n!}(x-a)^{n} + \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}$$

举个具体的例子:$f(x)=e^{x}$,在$a=0$处展开,我们知道:

$$e^{x} = 1+x+\frac{x^{2}}{2!}+\dots$$

用前两项近似:$e^{x} \approx 1+x$,真实误差是:

$$R_{1}(x) = e^{x} - (1+x)$$

余项估计表达式:

$$\frac{f’’(\xi)}{2!}x^{2} = \frac{e^{\xi}}{2}x^{2},\xi \in (0,x)$$

我们验证一下,取$x = 0.1$:

  • 真实误差:$e^{0.1} - (1+0.1) \approx 0.00517$
  • 余项估计:误差 $\in (0,005,0.005525)$

显然真实误差在余项估计的范围内!

2.4 皮亚诺余项

皮亚诺余项描述的是泰勒展开在趋近于展开点时的误差行为,其形式为:
$$R_{n}(x) = o((x-a)^{n}), 当x \to a$$

读作:”余项是$(x-a)^{n}$的高阶无穷小”。

在前面我们将误差定义为:

$$R_{n}(x) = f(x)-P_{n}(x)$$

我们希望$P_{n}(x)$在$x \to a$时尽可能的逼近$f(x)$,一个自然的要求是误差$R_{n}(x)$足够的小,即

$f(x) - P_{n}(x)$ 应该比$(x-a)^{n}$小得多

换句话说:

$$\lim_{x \to a}\frac{f(x)-P_{n}(x)}{(x-a)^{n}} = 0 $$

这正是$R_{n}(x)=o((x-a)^{n})$的定义!虽然这看起来好像什么也没有说,没有以量化的方式告诉你误差具体有多大,但它的意义是非常重要的,如下:

1、它是"泰勒多项式足够好"的数学证明

我们凭什么说$n$阶泰勒多项式$P_{n}(x)$是一个”好”的近似呢?因为$f(x)-P_{n}(x)$比$(x-a)^{n}还小1$,这就像你说一个很瘦,我说”他比最瘦的模特还瘦”——这就说明他真的很瘦。

同理:

  • $P_{n}(x)$包含了$(x-a)^{0},(x-a)^{1},\dots ,(x-a)^{n}$的信息;
  • 如果误差比$(x-a)^{n}$还小,说明$P_{n}(x)$已经”榨干”了所有低阶信息;
  • 剩下的差异只能是更高级的”细节”,可以忽略

所以皮亚诺余项告诉我们:

你用$n$阶多项式去逼近,已经做到了在$a$点附近”尽可能好了”

2、它是"函数光滑性"的量化表达

皮亚诺余项的成立,只需要$f(x)$在$a$点有$n$阶导数——不要求导数连续,也不要求更高阶导数存在。比如有些函数在$a$点有$n$阶导数,但”行为”很怪(震荡,不光滑),拉格朗日余项就无法使用(要求区间上存在$n+1$阶导数),但皮亚诺余项仍然成立!

所以它告诉我们:

只要函数在这一点上足够光滑(有$n$阶导数),就能使用$n$阶多项式很好的局部逼近

3、它是极限计算和等价无穷小的基础

例如计算如下极限:

$$\lim_{x \to 0} \frac{\cos x -1 + \frac{x^{2}}{2} }{x^{4}} $$

我们知道:

$$\cos x = 1 - \frac{x^{2}}{2} + \frac{x^{4}}{24}+o(x^{4})$$

则有:

$$\cos x -1 + \frac{x^{2}}{2} = \frac{x^{4}}{24}+o(x^{4})$$

代入极限:

$$\frac{\frac{x^{4}}{24}+o(x^{4})}{x^{4}} = \frac{1}{24} + \frac{o(x^{4})}{x^{4}} \to \frac{1}{24}$$

如果没有皮亚诺余项,我们就不能写出$o(x^{4})$,也就不能这样拆解极限!

2.5 两种余项对比

对比维度 皮亚诺余项 拉格朗日余项
形式 $R_{n}(x) = o((x-a)^{n})$ $R_{n}(x) = \frac{f^{(n+1)}(\xi)}{(n+1)!}(x-a)^{n+1}$
读作 “误差是$(x-a)^{n}$的高阶无穷小” “误差等于下一项,导数取中间值$\xi \in (a,x)$”
关键词 极限行为、局部、消失得更快 具体大小、全局、误差估计
目的 描述误差在$x \to a$时的极限行为 给出误差的具体大小估计
精度 定性:只说”误差很小” 定量:给出误差的表达式
适用范围 仅在$a$点附近(局部) 在整个区间$[a,x]$有效(全局)
所需条件 $f(x)$在$a$点有$n$阶导数 $f(x)$在$[a,x]$上有$n+1$阶导数且连续
是否依赖中间点 是 $\xi \in (a,x)$
能否用于误差估计 不能(只知道”很小”) 能,可以计算上下界
能否用于极限计算 能(支持等价无穷小) 可以但复杂,不常用
推导方法 洛必达法则或极限定义 罗尔定理或柯西中值定理
//