Advertisement
Guest User

langrange polynomial interpolation

a guest
May 15th, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.91 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import numpy as np
  4. from matplotlib import pyplot as plt
  5.  
  6. data_fname = 'knot_points.csv'
  7.  
  8. def read_data(fname):
  9.     X = []
  10.     Y = []
  11.     with open(fname, 'r') as f:
  12.         for line in f:
  13.             (x, y) = line.split(',')
  14.             X.append(float(x))
  15.             Y.append(float(y))
  16.     return (X, Y)
  17.  
  18. def langrange_polynomial(X, Y):
  19.     def L(i):
  20.         return lambda x: np.prod([(x-X[j])/(X[i]-X[j]) for j in range(len(X)) if i != j]) * Y[i]
  21.     Sx = [L(i) for i in range(len(X))]  # summands
  22.     return lambda x: np.sum([s(x) for s in Sx])
  23.  
  24. # F = langrange_polynomial(*read_data(data_fname))
  25. (X, Y) = read_data(data_fname)
  26. x_range = np.linspace(X[0], X[-1], 100)
  27. F = langrange_polynomial(X, Y)
  28.  
  29. plt.plot(X, Y, 'ro')
  30. plt.plot(x_range, map(F, x_range))
  31. plt.xlabel(r'$x$')
  32. plt.ylabel(r'$F(x)$')
  33. plt.title('Lagrange polynomial interpolation')
  34. plt.grid(True)
  35. plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement