Python Matplotlib 泰勒级数图线不起作用

Python Matplotlib Taylor Series Graph lines doesn't works

我有问题!!我需要做一个从 x1 到 x2 的 Acos(Bx) 的“前三项泰勒级数图”。我必须从用户那里得到输入,我想要 A、B、x1 和x2 作为浮点数。我处理了公式,所以我会把它放在这里。我需要关于图形的帮助。它不起作用我不知道为什么会发生,请帮助我。这是代码:

import matplotlib.pyplot as plt
import numpy as np

A = float(input("For A, please enter a value: "))
B = float(input("For B, please enter a value: "))
x1 = float(input("For x1, please enter a value between -10 and +10: "))

if (-10)<=x1<=(10):
    x2 = float(input("For x2, please enter a value between -10 and +10: "))
else:
   print ("x1 must be greater than or equal to -10 OR less than or equal to 10")
   quit()


a0 = A*np.cos(B*(x1))
a1 = ((-A)*B)*np.sin(B*(x1))
a2 = ((-A)*(B**2))*np.cos(B*(x1))


data1 = (((a0)*((x1-x2)**0))/np.math.factorial(0))
data2 =(((a0)*((x1-x2)**0))/np.math.factorial(0))+(((a1)*((x1-x2)**1))/np.math.factorial(1))
data3 = (((a0)*((x1-x2)**0))/np.math.factorial(0))+(((a1)*((x1-x2)**1))/np.math.factorial(1))+(((a2)*((x1-x2)**2))/np.math.factorial(2))

plt.figure()
plt.plot(data1, label="1. term",color="red")
plt.plot(data2, label="2. term",color="yellow")
plt.plot(data3, label="3. term",color="green")


plt.xlabel("x label")
plt.ylabel("y label")
plt.axis([-10,10,-10,10])
plt.show()

要绘制曲线,需要给出 x 值列表和对应的 y 值列表。

Numpy 有一种方便的方法来创建从 x1 到 x2 的 x 值列表:例如np.linspace(x1, x2, 200) 有一个包含 200 个值的列表。 Numpy's broadcasting and vectorization 然后可以以紧凑的方式创建完整的 y 值列表:y = f(x)

请注意,在您的泰勒展开式公式中,您需要 x - x1 处的导数值,而不是 x1 - x2 处的导数值。第一项是常数,值为 x1。第二项也有正确的切线。第三项调整曲率

这里有一些代码可以帮助您入门。

import matplotlib.pyplot as plt
import numpy as np

A = 4
B = 0.3
x1 = -9
x2 = 8

a0 = A*np.cos(B*(x1))
a1 = ((-A)*B)*np.sin(B*(x1))
a2 = ((-A)*(B**2))*np.cos(B*(x1))

x = np.linspace(x1, x2, 200)
data1 = (((a0)*((x-x1)**0))/np.math.factorial(0))
data2 = data1 + (((a1)*((x-x1)**1))/np.math.factorial(1))
data3 = data2 + (((a2)*((x-x1)**2))/np.math.factorial(2))

plt.figure()
plt.plot(x, data1, label="1. term" ,color="crimson")
plt.plot(x, data2, label="2. term", color="gold")
plt.plot(x, data3, label="3. term", color="limegreen")
plt.plot(x, A*np.cos(B*x), label="A·cos(B·x)", color="dodgerblue", ls='--')

plt.xlabel("x")
plt.ylabel("y")
plt.axis([-10,10,-10,10])
plt.legend()
plt.show()