It's a whole a lot easier than Newton's divided differences interpolation polynomial, because there is no divided difference part that need a recursive function.
I use these data points
(0,0)
(1,1)
(2,4)
(4,16)
(5,25)
from pylab import * def L(i,xs,x,y): Ls = 1 for j in arange (len(x)): if i != j: Ls *= (xs-x[j])/(x[i]-x[j]) return Ls def f(xs,x,y): fs =0 for i in arange(len(x)): fs += L(i,xs,x,y)*y[i] return fs x = [] y = [] #initial value x.append(0) x.append(1) x.append(2) x.append(4) x.append(5) y.append(0) y.append(1) y.append(4) y.append(16) y.append(25) #for testing xc = 3 yc = f(xc,x,y) print '' print xc, yc #plot t = linspace(-6,6,100) u = f(t,x,y) plot(t,u) grid(True) show()
with other data points
(0,0)
(1,1)
(2,4)
(4,-16)
(5,25)
No comments:
Post a Comment