Отмены серий накапливают ошибки, как их избежать?Python

Программы на Python
Anonymous
Отмены серий накапливают ошибки, как их избежать?

Сообщение Anonymous »

Код: Выделить всё

import math
import matplotlib.pyplot as plt
import numpy as np

m=50

def taylor_cos(x,n):
sum=0
for i in range(0, n):
sum=sum+ (((-1)**i) * (x**(2*i)) / math.factorial(2*i))
return sum

X=[]
Y=[]
arr=[]

for N in range(1,m):
for x_i in np.linspace(0,N*5,500):
if abs(math.cos(x_i)-taylor_cos(x_i,N))>10**-4:
arr.append((N,x_i))
X.append(N)
Y.append(x_i)
break

coeffs = np.polyfit(X, Y, 1)
fit = np.poly1d(coeffs)
print(coeffs)

plt.figure(figsize=(10,10))
plt.grid(True,alpha=0.3)
plt.axhline(0,color='gray',linewidth=0.5)

plt.scatter(X,Y,color='black',s=10)

plt.plot(X, fit(X), color='red', linewidth=1, linestyle='--')

plt.show()
Я хотел исследовать связь между количеством членов ряда Тейлора и x_i, когда он начинает расходиться. В качестве порога я использовал 10^-4. В этом случае линия выглядит довольно хорошо, введите здесь описание изображения, но для более высокого порога, например 10^-8, введите здесь описание изображения, при большем n появляется очень странное поведение. Я думаю, это связано с отменой больших терминов для больших n, где «большое число» — «сверхбольшое число» ~ = 1, как следствие, Python не может хранить слишком много цифр и отбрасывать их. Итак, вопрос в том, как сделать код более способным обрабатывать меньшие пороговые значения.

Вернуться в «Python»