泰勒级数的理解

  • 1. 泰勒级数
  • 2. 近似
  • 2.1. 举例
  • 2.2. 解读
  • 2.2.1 一阶
  • 2.2.2 二阶
  • 2.2.3 三阶
  • 2.3 拓展
  • 2.4 泰勒多项式
  • 3. 几何看法
  • 4. 自然常数



1. 泰勒级数

python用泰勒级数计算sin函数 求泰勒级数_泰勒展开

泰勒级数应该是大学微积分的时候接触

但它在数学中重要的函数近似工具

python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_02

多项式函数好计算,又好求导,还好积分
用我们村的话讲就叫 very good!

数学里把无限多项的和就叫做级数


2. 近似


2.1. 举例

举个例子

import matplotlib.pyplot as plt
import numpy as np

# 设置函数
x = np.arange(-10, 10, 0.1)
y1 = np.cos(x)
y2 = 1 - 1 / 2 * x ** 2

# 设置标题和图表
plt.title("$y = cos(x) ≈ 1 - 1/2*x^2$")
plt.plot(x, y1)
plt.plot(x, y2)

# 设置坐标轴上刻度
plt.xticks([])
plt.yticks([])

# 设置matplotlib支持汉语和正常显示字符
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 截取x,y的某一部分
plt.xlim((-6.283185, 6.283185))
plt.ylim((-1.5, 1.5))

# 获取当前坐标的位置
ax = plt.gca()

# 去掉坐标图的上和右 spine翻译成脊梁
ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')

# 指定坐标的位置
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 显示图表
plt.show()

python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_03

在0附近,python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_04(x) 和 1- python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_05python用泰勒级数计算sin函数 求泰勒级数_多项式_06

那么这个 - python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_05python用泰勒级数计算sin函数 求泰勒级数_多项式_06


2.2. 解读

在某个点附近用多项式函数去近似其他函数

首先在x=0处,设置二次多项式来近似

python用泰勒级数计算sin函数 求泰勒级数_泰勒_09


即近似函数python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_10的形式为 python用泰勒级数计算sin函数 求泰勒级数_多项式_11

若要在上式在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 处最近似 python用泰勒级数计算sin函数 求泰勒级数_多项式_13,那么应该在0附近的图案应该比较相似

首先在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12python用泰勒级数计算sin函数 求泰勒级数_多项式_13 等于 1
那么 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_16,得出 python用泰勒级数计算sin函数 求泰勒级数_泰勒_17
无论 python用泰勒级数计算sin函数 求泰勒级数_多项式_18python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_19 怎么选,python用泰勒级数计算sin函数 求泰勒级数_泰勒_12


2.2.1 一阶

python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 时,如果近似函数的 切线斜率 也能和 python用泰勒级数计算sin函数 求泰勒级数_多项式_13 的相等的话,那就美滋滋了
不然,近似函数的值在离 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12

python用泰勒级数计算sin函数 求泰勒级数_多项式_13 的导函数是 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_25,在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 处为0,表示它的切线是水平的

python用泰勒级数计算sin函数 求泰勒级数_泰勒_27


此时 近似函数python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_10的导数 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_29 应该为 0

则可以得到 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_30


2.2.2 二阶

现在在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 处的函数值和斜率都确定相等了,就差 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_19
python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 时,导函数是 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_25,那么二阶导函数就是 python用泰勒级数计算sin函数 求泰勒级数_多项式_35
python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 时,它的二阶导数 python用泰勒级数计算sin函数 求泰勒级数_泰勒_37
那么让近似函数与原先的函数的二阶导数相一致,就可以保证在此时拥有相同的弯曲程度(函数斜率的变化程度相同)
此时 近似函数python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_10的二阶导数 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_39 应该为 -1
则可以得到 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_40

最终得到近似函数 python用泰勒级数计算sin函数 求泰勒级数_泰勒_41

python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_03

验证一下

import numpy as np

a = np.cos(0.1)
b = 1 - 1/2 * 0.1 ** 2

print(a, b)
# 0.9950041652780258 0.995

其实是非常接近的了


2.2.3 三阶

在上近似函数中,有3个常量来控制近似程度
python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_43 负责让多项式在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 的值和 python用泰勒级数计算sin函数 求泰勒级数_多项式_45 相似
python用泰勒级数计算sin函数 求泰勒级数_多项式_18 负责让多项式和 python用泰勒级数计算sin函数 求泰勒级数_多项式_13 的导数相似
python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_19 负责让多项式和 python用泰勒级数计算sin函数 求泰勒级数_多项式_13

可以再往上增加几个高次幂的项来近似更高阶的导数
比如在加个 python用泰勒级数计算sin函数 求泰勒级数_多项式_50 多一个系数 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_51python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_52
取三阶导数,二次项以及以下都为0,只剩下 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_53
python用泰勒级数计算sin函数 求泰勒级数_多项式_13 的三阶导数为 python用泰勒级数计算sin函数 求泰勒级数_多项式_55, 在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 时等于0,因此 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_57

无妨,再加个四次项 python用泰勒级数计算sin函数 求泰勒级数_多项式_58python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_59
取四阶导数,三次项以及以下都为0,只剩下 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_60
python用泰勒级数计算sin函数 求泰勒级数_多项式_13 的四阶导数为本身, 在 python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 时等于1,因此 python用泰勒级数计算sin函数 求泰勒级数_多项式_63
则四次近似函数 python用泰勒级数计算sin函数 求泰勒级数_多项式_64

import matplotlib.pyplot as plt
import numpy as np

# 设置函数
x = np.arange(-10, 10, 0.1)
y1 = np.cos(x)
y2 = 1 - 1 / 2 * x ** 2
y3 = 1 - 1 / 2 * x ** 2 + 1 / 24 * x ** 4

# 设置标题和图表
plt.title("$y = cos(x) ≈ 1 - 1/2*x^2 ≈ 1 - 1/2*x^2 + 1/24*x^4$")
plt.plot(x, y1, label='$cos(x)$')
plt.plot(x, y2, label='$1 - 1/2*x^2$')
plt.plot(x, y3, label='$1 - 1/2*x^2 + 1/24*x^4$')

# 设置坐标轴上刻度
plt.xticks([])
plt.yticks([])

# 设置matplotlib支持汉语和正常显示字符
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 截取x,y的某一部分
plt.xlim((-6.283185, 6.283185))
plt.ylim((-1.5, 1.5))

# 获取当前坐标的位置
ax = plt.gca()

# 去掉坐标图的上和右 spine翻译成脊梁
ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')

# 指定坐标的位置
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

#显示图示
plt.legend()

# 显示图表
plt.show()

python用泰勒级数计算sin函数 求泰勒级数_泰勒_65


确实 四次近似函数 比 二次近似函数 更加接近 原函数

可以发现以上过程,阶乘的形式出现,对多次项 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_66 连续多次求导,则一层一层嵌套,如七阶项 python用泰勒级数计算sin函数 求泰勒级数_泰勒_67 和 七阶导数 python用泰勒级数计算sin函数 求泰勒级数_多项式_68
那么 python用泰勒级数计算sin函数 求泰勒级数_泰勒_69 想要的导数值 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_70,高次的求导不影响低次项


2.3 拓展

如果想要用多项式估计一个非0点附近的结果,比如 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_71
那么设定为关于python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_72而不是python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_73的多项式就可以得到相同结果
近似函数 python用泰勒级数计算sin函数 求泰勒级数_泰勒_74

python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_75

虽然复杂了,其实也就是让python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_76点和之前的0点一样


2.4 泰勒多项式

对于python用泰勒级数计算sin函数 求泰勒级数_多项式_13 在0处的各阶导数会按 python用泰勒级数计算sin函数 求泰勒级数_多项式_45 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_79 python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_80 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_81,1 0 -1 0 的形式循环

近似函数 python用泰勒级数计算sin函数 求泰勒级数_多项式_82
也就是泰勒多项式(泰勒公式),近似函数累加了有限的多项
python用泰勒级数计算sin函数 求泰勒级数_多项式_83 想要的导数值 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_84


3. 几何看法

求近似面积,多次项的二次项就呼之欲出了
学过微积分可以知道,图像所表示的函数本身就是面积函数的导数

若函数往右增长python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_85,那么多出来的面积就近似与python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_85乘以函数此时的高度,若python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_85越小,精度越高

import matplotlib.pyplot as plt
import numpy as np

# 设置函数
x = np.arange(0, 1, 0.00001)
y1 = x**2

# 设置标题和图表
plt.plot(x, y1)

# 设置坐标轴上刻度
plt.xticks([0,1, 1])
plt.yticks([0,1])

# 设置matplotlib支持汉语和正常显示字符
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 截取x,y的某一部分
plt.xlim((0, 1))
plt.ylim((0, 1))

# 获取当前坐标的位置
ax = plt.gca()

# 去掉坐标图的上和右 spine翻译成脊梁
ax.spines['right'].set_color('None')
ax.spines['top'].set_color('None')

# 指定坐标的位置
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

# 画阴影区域
a, b = 0, 0.5
xf = x[np.where((x >= a) & (x <= b))]
plt.fill_between(xf, xf**2, xf*0, color='blue', alpha=0.25)

a, b = 0.5, 0.55
xf = x[np.where((x >= a) & (x <= b))]
plt.fill_between(xf, xf**2, xf*0, color='red', alpha=0.25)

# 显示图示
plt.legend()

# 显示图表
plt.show()

python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_88

假设原始起始点为A
剩余的部分就可以近似为一个三角形
三角形的面积 = 底python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_89 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_90 高(图像斜率 python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_91
由于曲线图像代表了面积函数的导数
所以在A点的图像斜率就是面积函数在A点的二阶导数
就等于 python用泰勒级数计算sin函数 求泰勒级数_多项式_92

那么其实就是和泰勒多项式一样
面积函数python用泰勒级数计算sin函数 求泰勒级数_泰勒_93 = 原面积(紫色区域 / python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_43 / python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_95)+ 增加的长方形区域(粉红色下部分 / python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_96) + 增加的三角形区域(粉红色上部分 / python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_97


4. 自然常数

特殊的例子,python用泰勒级数计算sin函数 求泰勒级数_泰勒_12 处的 python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_99 函数,因为导数就是本身,且python用泰勒级数计算sin函数 求泰勒级数_python用泰勒级数计算sin函数_100
那么近似函数 python用泰勒级数计算sin函数 求泰勒级数_泰勒_101

python用泰勒级数计算sin函数 求泰勒级数_泰勒_102


到四次的时候很明显比较接近了。

python用泰勒级数计算sin函数 求泰勒级数_泰勒公式_103


python用泰勒级数计算sin函数 求泰勒级数_泰勒展开_104

加上越来越多的多项式,总和就越来越接近e

那么可以说这个无穷级数收敛到e,也就是说这个级数就等于e

即便从定义上讲,泰勒多项式只考虑0点周围的各种导数性质
但在python用泰勒级数计算sin函数 求泰勒级数_泰勒_105的例子中,无论x取任何值 python用泰勒级数计算sin函数 求泰勒级数_泰勒_105


谢谢