本文已参与「新人创作礼」活动,一起开启掘金创作之路。
用python实现泰勒展开式
1、的泰勒展开式
def ex(x, n):
res = 0
for i in range(n):
res += (x**i)/mm(i)
return res
def mm(n):
# 阶乘
if n == 0 or n == 1:
return 1
res = 1
for i in range(1, n+1, 1):
res *= i
return res
我们对比numpy自带的numpy.exp()函数,使用matplotlib库绘图直观展示展开函数与原函数
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 21, 1)
y1 = np.exp(x)
y2 = [ex(int(i), 10) for i in x]
y3 = [ex(int(i), 15) for i in x]
y4 = [ex(int(i), 20) for i in x]
y5 = [ex(int(i), 25) for i in x]
y6 = [ex(int(i), 28) for i in x]
plt.plot(x, y1, label='origin')
plt.plot(x, y2, label='taile10')
plt.plot(x, y3, label='taile15')
plt.plot(x, y4, label='taile20')
plt.plot(x, y5, label='taile25')
plt.plot(x, y6, label='taile28')
plt.legend()
设置n的值取{10, 15, 20, 25, 28},由图可以看出,随着指数的不断增大,泰勒展开式函数曲线逐渐逼近原函数,验证了泰勒展开式的有效性。
2、用泰勒展开式拆解
def sinx(x, n):
res = 0
for i in range(1, n, 1):
res += (-1)**(i-1)*(x**(2*i-1))/mm(2*i-1)
return res
def mm(n):
# 阶乘
if n == 0 or n == 1:
return 1
res = 1
for i in range(1, n+1, 1):
res *= i
return res
我们对比numpy自带的numpy.sin()函数,使用matplotlib库绘图直观展示展开函数与原函数
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(0, 2*np.pi, 20)
y1 = np.sin(x)
y2 = [sinx(i, 5) for i in x]
y3 = [sinx(i, 6) for i in x]
y4 = [sinx(i, 7) for i in x]
y5 = [sinx(i, 8) for i in x]
y6 = [sinx(i, 9) for i in x]
plt.plot(x, y1, label='origin')
plt.plot(x, y2, label='taile5')
plt.plot(x, y3, label='taile6')
plt.plot(x, y4, label='taile7')
plt.plot(x, y5, label='taile8')
plt.plot(x, y6, label='taile9')
plt.ylim(-1.2,1.2)
plt.legend()
设置n的值取{5, 6, 7, 8, 9},由图可以看出,随着指数的不断增大,泰勒展开式函数曲线逐渐逼近原函数,验证了泰勒展开式的有效性。