一、前言
大学的数学教材大多是枯燥的纯粹理论性的阐述公理公式,但是缺乏对"怎么来的、为什么要这么写、怎么应用"
这些问题的回答,笔者在大学毕业多年以后偶然需要用到这些知识时,却始终无法将这些理论公式和实际工作关联起来,因此决定开展重启数学系列文章,从实际应用的角度重新学习工程当中所涉及的数学知识,本篇开始讨论泰勒展开式的相关内容。
二、推导过程
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)$ |
能否用于误差估计 | 不能(只知道”很小”) | 能,可以计算上下界 |
能否用于极限计算 | 能(支持等价无穷小) | 可以但复杂,不常用 |
推导方法 | 洛必达法则或极限定义 | 罗尔定理或柯西中值定理 |