interpolation.py
def interpolation(c,x,x0):
# Evaluate Newton's polynomial at x0.
# Degree of polynomial
n = len(x) - 1
y0 = c[n]
for k in range(1,n+1):
y0 = c[n-k] + (x0 - x[n-k]) * y0
return y0
def coef(x,y):
# Computes the coefficients of Newton's polynomial.
# Number of data points.
m = len(x)
c = y.copy()
for k in range(1,m):
c[k:m] = (c[k:m] - c[k-1])/(x[k:m] - x[k-1])
return c
ex331.py
import numpy as np
import matplotlib.pyplot as plt
from interpolation import interpolation,coef
def f(x):
return 1.0/(1.0+25.0*x**2)
a = -1.0
b = 1.0
x1 = np.linspace(a,b,200)
y1 = f(x1)
plt.plot(x1,y1)
nList = [4,6,10]
sglist = ['--','-.',':']
for k in range(len(nList)):
n = nList[k]
x = np.linspace(a,b,n+1)
y = f(x)
plt.scatter(x,y,marker='o',color='black')
c = coef(x,y)
y1 = interpolation(c,x,x1)
sl = 'n=' + str(n)
sg = sglist[k]
plt.plot(x1,y1,sg,label=sl)
plt.xlabel('x')
plt.grid(True)
plt.legend(loc=0)
plt.savefig('ex331.png', dpi=72)
plt.show()
Last Updated on 2023-01-04 by gantovnik

Recent Comments