@Ledruid によって提案されたソリューションが最適です。2 次元配列は必要ありません。分割された差分ツリーは、2D 配列のようなものです。より原始的なアプローチ (そこから @Leudruid のアルゴリズムを取得できます) は、ツリーのノードに対応する「行列 $F_{ij}$ を考えることです。このようにして、アルゴリズムは次のようになります。
import numpy as np
from numpy import *
def coeficiente(x,y) :
''' x: absisas x_i
y : ordenadas f(x_i)'''
x.astype(float)
y.astype(float)
n = len(x)
F = zeros((n,n), dtype=float)
b = zeros(n)
for i in range(0,n):
F[i,0]=y[i]
for j in range(1, n):
for i in range(j,n):
F[i,j] = float(F[i,j-1]-F[i-1,j-1])/float(x[i]-x[i-j])
for i in range(0,n):
b[i] = F[i,i]
return np.array(b) # return an array of coefficient
def Eval(a, x, r):
''' a : retorno de la funcion coeficiente()
x : abcisas x_i
r : abcisa a interpolar
'''
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