云计算百科
云计算领域专业知识百科平台

18、【数学】【基础】泰勒级数怎么推出来的:逐阶匹配与余项

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

标题

18、【数学】【基础】泰勒级数怎么推出来的:逐阶匹配与余项

背景

上篇 blog 【数学】【基础】泰勒级数是什么:用多项式逼近函数 给出了泰勒级数与麦克劳林级数的样子:

f

(

x

)

=

∑

n

=

0

∞

f

(

n

)

(

0

)

n

!

 

x

n

f(x)=\\sum_{n=0}^{\\infty}\\frac{f^{(n)}(0)}{n!}\\,x^{n}

f(x)=n=0∑∞​n!f(n)(0)​xn 并讲清了三个名字(泰勒多项式是部分和、泰勒级数是极限、麦克劳林级数是原点展开)、几个常见展开,以及"展开只在收敛半径内有效"。但它留了一个洞:系数

f

(

n

)

(

0

)

n

!

\\dfrac{f^{(n)}(0)}{n!}

n!f(n)(0)​ 是从哪来的? 上篇直接把结论用了,本篇把它推出来——而且顺手说清"为什么可以真的等于原函数"。


目标:设出系数,再把它"解"出来

先假设函数

f

f

f 在原点附近可以写成一串幂之和(这在第 17 篇的收敛范围内成立):

f

(

x

)

=

a

0

+

a

1

x

+

a

2

x

2

+

a

3

x

3

+

⋯

f(x)=a_0+a_1x+a_2x^{2}+a_3x^{3}+\\cdots

f(x)=a0​+a1​x+a2​x2+a3​x3+⋯

现在的任务是:把这串系数

a

0

,

a

1

,

a

2

,

…

a_0,a_1,a_2,\\dots

a0​,a1​,a2​,… 用函数本身的信息确定下来。思路只有一招——逐阶求导。


逐阶求导:每求一次,就"暴露"一个系数

在这里插入图片描述

图 1 是这个消元过程的画面。把

x

=

0

x=0

x=0 代进去,后面带

x

x

x 的项全没了:

f

(

0

)

=

a

0

f(0)=a_0

f(0)=a0​

接着对两边求导。

a

0

a_0

a0​ 是常数、求导变

0

0

0;

a

1

x

a_1x

a1​x 求导得

a

1

a_1

a1​;更高次项仍带

x

x

x:

f

′

(

x

)

=

a

1

+

2

a

2

x

+

3

a

3

x

2

+

⋯

⟹

f

′

(

0

)

=

a

1

f'(x)=a_1+2a_2x+3a_3x^{2}+\\cdots\\quad\\Longrightarrow\\quad f'(0)=a_1

f′(x)=a1​+2a2​x+3a3​x2+⋯⟹f′(0)=a1​

再求一次导,

a

1

a_1

a1​ 也没了,轮到

2

a

2

2a_2

2a2​ 露头:

f

′

′

(

x

)

=

2

a

2

+

6

a

3

x

+

⋯

⟹

f

′

′

(

0

)

=

2

a

2

f''(x)=2a_2+6a_3x+\\cdots\\quad\\Longrightarrow\\quad f''(0)=2a_2

f′′(x)=2a2​+6a3​x+⋯⟹f′′(0)=2a2​

如此继续,每求一次导、每代一次

x

=

0

x=0

x=0,就"砍掉"前面所有项、只留下下一个系数(乘上一个系数)。规律很整齐:

f

(

n

)

(

0

)

=

n

!
 

a

n

f^{(n)}(0)=n!\\,a_n

f(n)(0)=n!an​

把它解出来,就得到泰勒系数的公式:

a

n

=

f

(

n

)

(

0

)

n

!

a_n=\\frac{f^{(n)}(0)}{n!}

an​=n!f(n)(0)​

在这里插入图片描述

图 2 把这条对应关系列全:

n

n

n 阶导数在

0

0

0 处的值,除以

n

!

n!

n!,就是第

n

n

n 项系数。 系数被各阶导数唯一确定——这就是上篇那个公式的来历。

顺带说一句:正因为系数被钉死,这样的幂级数展开是唯一的——一个函数在一点处只可能有一组这样的系数。


为什么偏偏除以

n

!

n!

n!

关键在求导会"降幂并带出系数":

x

n

x^{n}

xn 连求

n

n

n 次导,会把指数一路降到

0

0

0,同时把

n

⋅

(

n

−

1

)

⋯

1

=

n

!

n\\cdot(n-1)\\cdots1=n!

n⋅(n−1)⋯1=n! 这个因子带到前面:

(

x

n

)

(

n

)

=

n

!

\\bigl(x^{n}\\bigr)^{(n)}=n!

(xn)(n)=n!

所以第

n

n

n 项

a

n

x

n

a_nx^{n}

an​xn 在求导

n

n

n 次后变成

n

!
 

a

n

n!\\,a_n

n!an​,而它必须等于

f

(

n

)

(

0

)

f^{(n)}(0)

f(n)(0)。除以

n

!

n!

n!,正是为了抵消这个降幂带出来的因子。


换成一般点:把

x

x

x 换成

(

x

−

a

)

(x-a)

(x−a)

在点

a

a

a 处展开时,把上面的

x

x

x 都替换成

(

x

−

a

)

(x-a)

(x−a),推导完全一样:

f

(

x

)

=

a

0

+

a

1

(

x

−

a

)

+

a

2

(

x

−

a

)

2

+

⋯

⟹

a

n

=

f

(

n

)

(

a

)

n

!

f(x)=a_0+a_1(x-a)+a_2(x-a)^{2}+\\cdots\\quad\\Longrightarrow\\quad a_n=\\frac{f^{(n)}(a)}{n!}

f(x)=a0​+a1​(x−a)+a2​(x−a)2+⋯⟹an​=n!f(n)(a)​

于是得到一般形式的泰勒级数:

f

(

x

)

=

∑

n

=

0

∞

f

(

n

)

(

a

)

n

!

 

(

x

−

a

)

n

f(x)=\\sum_{n=0}^{\\infty}\\frac{f^{(n)}(a)}{n!}\\,(x-a)^{n}

f(x)=n=0∑∞​n!f(n)(a)​(x−a)n

a

=

0

a=0

a=0 时退化为麦克劳林级数。“展开点"就是"导数的取值点”——这也解释了为什么离展开点越近、逼近越好。


更严谨的一步:余项,才决定"是否等于原函数"

到这里,只证明了"如果函数能写成幂级数,那系数必须长这样"。但反过来——用这些系数拼出来的级数,就一定等于原函数吗? 不一定。真正决定这件事的,是余项(remainder)。

把函数写成"前

N

N

N 项多项式 + 剩下的尾巴":

f

(

x

)

=

S

N

(

x

)

⏟

泰勒多项式

+

R

N

(

x

)

⏟

余项

f(x)=\\underbrace{S_N(x)}_{\\text{泰勒多项式}}+\\underbrace{R_N(x)}_{\\text{余项}}

f(x)=泰勒多项式

SN​(x)​​+余项

RN​(x)​​

余项有一个常用的估计(拉格朗日余项,Lagrange remainder):

R

N

(

x

)

=

f

(

N

+

1

)

(

ξ

)

(

N

+

1

)

!

 

(

x

−

a

)

N

+

1

,

ξ

 介于 

a

 与 

x

 之间

R_N(x)=\\frac{f^{(N+1)}(\\xi)}{(N+1)!}\\,(x-a)^{N+1},\\qquad \\xi\\ \\text{介于}\\ a\\ \\text{与}\\ x\\ \\text{之间}

RN​(x)=(N+1)!f(N+1)(ξ)​(x−a)N+1,ξ 介于 a 与 x 之间

它说的是:误差大小取决于"下一阶导数"和"

(

x

−

a

)

N

+

1

(x-a)^{N+1}

(x−a)N+1"。只有当

N

→

∞

N\\to\\infty

N→∞ 时余项趋于

0

0

0,泰勒级数才真正收敛到

f

(

x

)

f(x)

f(x)。

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0dd12a897e92446f8ba36be5d8802eaa.png)

图 3 用

sin

⁡

x

\\sin x

sinx 演示:5 阶部分和与真值之间那条粉色带子就是余项。在原点附近它几乎为零,越往两边越宽——“逼近得多好”,就是"余项有多小"。


手推

e

x

e^{x}

ex:最省事的例子

e

x

e^{x}

ex 展开起来最舒服,因为它的每一阶导数都还是自己:

f

(

x

)

=

f

′

(

x

)

=

f

′

′

(

x

)

=

⋯

=

e

x

f(x)=f'(x)=f''(x)=\\cdots=e^{x}

f(x)=f′(x)=f′′(x)=⋯=ex

在

x

=

0

x=0

x=0 处,每一阶导数都等于

1

1

1,所以

f

(

n

)

(

0

)

=

1

f^{(n)}(0)=1

f(n)(0)=1:

a

n

=

f

(

n

)

(

0

)

n

!

=

1

n

!

a_n=\\frac{f^{(n)}(0)}{n!}=\\frac{1}{n!}

an​=n!f(n)(0)​=n!1​

在这里插入图片描述

图 4 把系数一个个列出来:

1

,

1

,

1

2

,

1

6

,

1

24

,

…

1,1,\\frac12,\\frac16,\\frac1{24},\\dots

1,1,21​,61​,241​,…,于是

e

x

=

1

+

x

+

x

2

2

!

+

x

3

3

!

+

⋯

e^{x}=1+x+\\frac{x^{2}}{2!}+\\frac{x^{3}}{3!}+\\cdots

ex=1+x+2!x2​+3!x3​+⋯

把

x

=

1

x=1

x=1 代进去,就回到第 11 篇那条

e

=

∑

1

/

k

!

e=\\sum 1/k!

e=∑1/k!——它不是另说一套,就是

e

x

e^{x}

ex 的麦克劳林展开在

x

=

1

x=1

x=1 处的取值。


再手推

sin

⁡

x

\\sin x

sinx:导数循环出符号

sin

⁡

x

\\sin x

sinx 的导数是"循环"的:

sin

⁡

→

cos

⁡

→

−

sin

⁡

→

−

cos

⁡

→

sin

⁡

→

⋯

\\sin\\to\\cos\\to-\\sin\\to-\\cos\\to\\sin\\to\\cdots

sin→cos→−sin→−cos→sin→⋯。在

x

=

0

x=0

x=0 处依次取值为

sin

⁡

0

=

0

,

cos

⁡

0

=

1

,

−

sin

⁡

0

=

0

,

−

cos

⁡

0

=

−

1

,

…

\\sin 0=0,\\quad \\cos 0=1,\\quad -\\sin 0=0,\\quad -\\cos 0=-1,\\quad \\dots

sin0=0,cos0=1,−sin0=0,−cos0=−1,…

于是系数里偶数阶全是

0

0

0、奇数阶在

0

0

0 与

±

1

/

n

!

\\pm1/ n!

±1/n! 之间交替:

sin

⁡

x

=

x

−

x

3

3

!

+

x

5

5

!

−

x

7

7

!

+

⋯

\\sin x=x-\\frac{x^{3}}{3!}+\\frac{x^{5}}{5!}-\\frac{x^{7}}{7!}+\\cdots

sinx=x−3!x3​+5!x5​−7!x7​+⋯

也就能看出:系数里的正负号,来自"各阶导数在展开点的正负",不是人为规定的。


前提:余项要能趋于 0

最后把逻辑补齐。逐阶匹配只保证了系数"应该是"这个样子;要保证级数真的收敛到

f

f

f,需要

R

N

(

x

)

→

0

R_N(x)\\to0

RN​(x)→0。对

e

x

,

sin

⁡

x

,

cos

⁡

x

e^{x},\\sin x,\\cos x

ex,sinx,cosx,可以证明在全体实数上

R

N

→

0

R_N\\to0

RN​→0(它们的各阶导数一致有界,而

(

x

−

a

)

N

+

1

/

(

N

+

1

)

!

→

0

(x-a)^{N+1}/(N+1)!\\to0

(x−a)N+1/(N+1)!→0),所以这些展开处处成立;而对

1

1

−

x

\\frac{1}{1-x}

1−x1​,一旦越过

x

=

1

x=1

x=1,余项就不再趋于

0

0

0——这就自然过渡到下一篇的主题:收敛半径。


小结

泰勒系数的推导只需一招:设

f

(

x

)

=

∑

a

n

x

n

f(x)=\\sum a_nx^{n}

f(x)=∑an​xn,逐阶求导并取

x

=

0

x=0

x=0——每求一次导就"暴露"一个系数,得到

f

(

n

)

(

0

)

=

n

!
 

a

n

f^{(n)}(0)=n!\\,a_n

f(n)(0)=n!an​,即

a

n

=

f

(

n

)

(

0

)

n

!

a_n=\\frac{f^{(n)}(0)}{n!}

an​=n!f(n)(0)​

一般点处同理得

a

n

=

f

(

n

)

(

a

)

/

n

!

a_n=f^{(n)}(a)/n!

an​=f(n)(a)/n!。但"能写出系数"不等于"等于原函数":真正的判据是余项

R

N

(

x

)

→

0

R_N(x)\\to0

RN​(x)→0(拉格朗日余项

=

f

(

N

+

1

)

(

ξ

)

(

N

+

1

)

!

(

x

−

a

)

N

+

1

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

=(N+1)!f(N+1)(ξ)​(x−a)N+1)。

e

x

e^{x}

ex(系数

1

/

n

!

1/n!

1/n!)、

sin

⁡

x

\\sin x

sinx(奇数阶交替)都由此手推可得;而展开在多大范围成立,取决于余项何时不再趋于

0

0

0——正是收敛半径要回答的问题。


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!

赞(0)
未经允许不得转载:网硕互联帮助中心 » 18、【数学】【基础】泰勒级数怎么推出来的:逐阶匹配与余项
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!