泰勒级数(Taylor Sries)
现在是时候说明指数函数和三角函数那些奇妙的多项式形式了。
这些多项式实际为这些函数在x=0处展开的泰勒级数。
下面我先不加预告地列出函数f(x)在x=0处展开地泰勒级数的定义:
我们的高中数学知识告诉我们对指数函数无论求多次导,还是其本身:
因而依据上面的定义展开有:
多项式近似(Polynomial Approximantion)
多项式近似的本质就是:将非常复杂的函数转变成无限项的和的形式。通常,我们可以只计算泰勒级数的前几项之和的极限,便可获得原函数的局部近似了。
在这,请原谅我把“极限”这个名词抖出来了,实际上,我们从极限的观点,学了导数的几何意义后,我们便能更好地用高阶导数来理解:多项式近似了。
我们先来取前20项试试看,
import sympy
from sympy import *
# 指定x为符号
x = sympy.Symbol('x')
# exp为公式
exp = e**x
# 下面开始求和,就求前21项的和吧
sums = 0
for i in range(20):
# 求i次导函数
numerator = exp.diff(x,i)
# 计算导函数在x=0处的值
numerator = numerator.evalf(subs={x:0})
denominator = np.math.factorial(i)
sums += numerator/denominator*x**i
# 下面检验一下原始的exp函数和其在x=0处展开的泰勒级数前20项之和的差距
print (exp.evalf(subs={x:0})-sums.evalf(subs={x:0}))
# result is 0
xvals = np.linspace(0,20,100)
for xval in xvals:
plt.plot(xval,exp.evalf(subs={x:xval}),'bo',\
xval,sums.evalf(subs={x:xval}),'ro')
如果笔者曾手动验证过三角函数的多项式展开式,现在我们来看看图像吧!
并且看下,在展开点x=0处,用越多项数获得的近似结果越接近真实值。
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from sympy import * #用于求导积分等科学计算
from sympy.plotting import plot3d
from sympy.functions import exp
x = Symbol('x')#x 变量
print(help(plot))#对x = 0点泰勒展开 至x20次方无穷小
p0 = plot(sin(x),(x,-2*pi,2*pi),line_color='b',ylim=(-1.5,1.5),title='funion',show=False)
#画出sin(x),范围-2*pi,2*pi,蓝色线,y刻度范围-1.5,1.5,暂不显示
exper1 = series(sin(x),x,n=4)#泰勒展开至第O(x**4)
p1 = plot(exper1.subs(O(x**4),0),(x,-2*pi,2*pi),line_color='br',title='O(x**4)',show=False)
#第O(x**4)项用0替代 颜色为蓝红色
exper2 = series(sin(x),x,n=6)#泰勒展开至第O(x**6)
p2 = plot(exper2.subs(O(x**6),0),(x,-2*pi,2*pi),line_color='g',title='O(x**6)',show=False)
#第O(x**6)项用0替代 颜色为绿
exper3 = series(sin(x),x,n=8)#泰勒展开至第O(x**8)
p3 = plot(exper3.subs(O(x**8),0),(x,-2*pi,2*pi),line_color='r',title='O(x**8)',show=False)
#第O(x**8)项用0替代 颜色为红
exper4 = series(sin(x),x,n=10)#泰勒展开至第O(x**10)
p4 = plot(exper4.subs(O(x**10),0),(x,-2*pi,2*pi),line_color='y',title='O(x**10)',show=False)
#第O(x**10)项用0替代 颜色为黄
#如果不是我对颜色不敏感,可能我就在展开点,展开至100项了,
p0.extend(p1)
p0.extend(p2)
p0.extend(p3)
p0.extend(p4)
p0.show()#显示图像
展开点(Expansion point)
上面,我们获得的泰勒级数都是围绕x=0处获得的,但我们是不是可在不同的展开点(例如x=a)获得泰勒级数呢?显然是可以的。Python真香:欧拉公式zhuanlan.zhihu.comPython真香:用Python学微积分(2)---复合函数zhuanlan.zhihu.comPython真香:用Python学微积分---函数zhuanlan.zhihu.com