Вы можете попробовать numpy.polyfit, который более стабилен при более высоком полиномиальном ранге
import numpy as np
from scipy.interpolate import lagrange
N = 30
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a+b
return a
x = np.arange(N)
y = np.array([fib(i) for i in x])
P = np.polyfit(x, y, N)
n = int(N/2)
print ((y[n], np.polyval(P, n)))
L = lagrange(x, y)
print ((y[n], L(n)))
610, 609,9896
610, -645662.4698
Более того, ясказал бы, что полиномиальное соответствие редко является хорошим решением для большого количества точек.Если вас интересует серия Фибоначчи (или это просто пример?), Вы можете использовать аналитическую формулу, основанную на степенях золотого числа, которые вы можете получить для плавающих индексов (см. Страницу Википедии Фибоначчи).