数学的魅力之python探究e^x和sin(x)的泰勒公式展开式

1,062 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

用python实现泰勒展开式

1、exe^x的泰勒展开式

ex=1+x+x22!+...+xnn!+o(xn)e^x=1+x+{\frac{x^2}{2!}}+...+{\frac{x^n}{n!}}+o(x^n)
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},由图可以看出,随着指数的不断增大,泰勒展开式函数曲线逐渐逼近原函数,验证了泰勒展开式的有效性。

image.png

2、用泰勒展开式拆解sin(x)sin(x)

sinx=xx33!+x55!+...+(1)m1x2m1(2m1)!+o(x2m)sin x = x - \frac{x^3}{3!}+\frac{x^5}{5!}+...+(-1)^{m-1}\frac{x^{2m-1}}{(2m-1)!}+o(x^{2m})
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},由图可以看出,随着指数的不断增大,泰勒展开式函数曲线逐渐逼近原函数,验证了泰勒展开式的有效性。

image.png