Построение графика после кусочно-квадратичной интерполяции

Задача

У меня есть файл где записаны x и соответствующие значения fx. За узловую я беру каждую 10. Необходимо по заданию вывести график функции, полученной после интерполяции. У меня на выводе получается совсем не то, что надо. Где же ошибка?

import matplotlib.pyplot as plt
import numpy as np
nums = []
x = []
fx = []
with open('res.txt') as f:
    for line in f:
        a = line
        nums = a.split()
        x.append(float(nums[0]))
        fx.append(float(nums[1]))
xsort = []
fxsort = []
N = len(x)
for i in range(N):
    if i%9 == 0 and i > 0:
        xsort.append(x[i])
        fxsort.append(fx[i])
print(x, "\n", xsort)

a0 = []
a1 = []
a2 = []
N = len(xsort)
for i in range(1, N-1):
    a2.append(((xsort[i+1]-fxsort[i - 1])/((xsort[i + 1] - xsort[i - 1])*(xsort[i + 1] - xsort[i]))) - ((fxsort[i] - fxsort[i - 1])/((xsort[i] - xsort[i - 1])*(xsort[i + 1]-xsort[i]))))
    a1.append((fxsort[i] - fxsort[i - 1] - (a2[i-1] * ((xsort[i] ** 2) - (xsort[i - 1] ** 2)))) / (xsort[i] - xsort[i - 1]))
    a0.append(fxsort[i - 1] - (a1[i-1] * xsort[i - 1]) - (a2[i-1] * (xsort[i - 1] ** 2)))
for i in range(1, len(a0)-1):
    x = np.linspace(xsort[i-1], xsort[i+1])
    fun = a0[i] + a1[i]*x + a2[i]*x*x
    plt.plot(x, fun)
plt.show()

Ответы (1 шт):

Автор решения: ArtyomEgorov

Исправил строчку:

a2.append(((fxsort[i+1]-fxsort[i - 1])/((xsort[i + 1] - xsort[i - 1])*(xsort[i + 1] - xsort[i]))) - ((fxsort[i] - fxsort[i - 1])/((xsort[i] - xsort[i - 1])*(xsort[i + 1]-xsort[i]))))

И цикл:

for i in range(0, len(a0)-1):
    x = np.linspace(xsort[i], xsort[i+1])
    fun = a0[i] + a1[i]*x + a2[i]*x*x
    plt.plot(x, fun)

Вроде, все как надо, но не уверен.

→ Ссылка