Я хочу использовать matplotlib, чтобы нарисовать картину интерполяции Ньютона, но я столкнулся с некоторыми трудностями. Моя фигура не доходит до последних нескольких пунктов. Вы можете мне помочь? Если мой код неверен, пожалуйста, сообщите мне детали, спасибо.
import numpy as np
import matplotlib.pyplot as plt
def coef(x, y):
'''x : array of data points
y : array of f(x) '''
x.astype(float)
y.astype(float)
n = len(x)
a = []
for i in range(n):
a.append(y[i])
for j in range(1, n):
for i in range(n - 1, j - 1, -1):
a[i] = float(a[i] - a[i - 1]) / float(x[i] - x[i - j])
return np.array(a) # return an array of coefficient
def Eval(a, x, r):
''' a : array returned by function coef()
x : array of data points
r : the node to interpolate at '''
x.astype(float)
n = len(a) - 1
temp = a[n]
for i in range(n - 1, -1, -1):
temp = temp * (r - x[i]) + a[i]
return temp # return the y_value interpolation
if __name__ == '__main__':
x = np.linspace(0, 20, 11)
y = np.random.randint(0, 10, 11)
# y = np.asarray([i ** 2 for i in x])
a = coef(x, y)
tmp_x = np.linspace(0, 21, 21)
tmp_y = [Eval(a, tmp_x, i) for i in tmp_x]
plt.plot(x, y, linestyle='', marker='o', color='b')
plt.plot(tmp_x, tmp_y, linestyle='--', color='r')
plt.show()
изображение кода