Python Ряд графиков Матплотлиба Тейлора не работает - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема !! Мне нужно сделать «первые три условия ряда Тейлора A cos (B x) от x1 до x2. Я должен получить входные данные от пользователя, и я хочу 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()

1 Ответ

0 голосов
/ 23 апреля 2020

Чтобы построить кривую, необходимо указать список значений x и список соответствующих значений y.

Numpy имеет удобный способ создания списка значений x от x1 до x2: например, np.linspace(x1, x2, 200), чтобы иметь список из 200 значений. Затем Numpy вещания и векторизации могут компактно создать полный список значений 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()

resulting plot

...