Skip to content

Instantly share code, notes, and snippets.

@jponf
Created October 26, 2020 08:42
Show Gist options
  • Save jponf/02ddcf7260ee499c4678d06d5d9d82b2 to your computer and use it in GitHub Desktop.
Save jponf/02ddcf7260ee499c4678d06d5d9d82b2 to your computer and use it in GitHub Desktop.
def aitken_interpolation(x, y):
if len(x) != len(y):
raise ValueError()
# Constants
x_poly = np.polynomial.Polynomial([0, 1])
# Initialize algorithm
n = len(x)
p = [np.polynomial.Polynomial([y[0]])]
# Diagonal values
p_diag = [0] * len(x)
p_diag[0] = y[0]
for k in range(1, n):
p = [np.polynomial.Polynomial([0.0])] * (k + 1)
p[0] = np.polynomial.Polynomial([y[k]])
xk_poly = x[k] - x_poly
for i in range(1, k + 1):
xi_poly = x[i-1] - x_poly
p[i] = xk_poly * p_diag[i-1] - xi_poly * p[i-1]
p[i] /= x[k] - x[i-1]
p_diag[k] = p[-1]
return p[-1]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment