Want more features on Pastebin? Sign Up, it's FREE!
Guest

Langrange polynomial interpolation

By: a guest on May 15th, 2014  |  syntax: Python  |  size: 0.93 KB  |  views: 279  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  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. # x1,y1
  8. # x2,y2
  9. # ...
  10.  
  11. def read_data(fname):
  12.     X = []
  13.     Y = []
  14.     with open(fname, 'r') as f:
  15.         for line in f:
  16.             (x, y) = line.split(',')
  17.             X.append(float(x))
  18.             Y.append(float(y))
  19.     return (X, Y)
  20.  
  21. def langrange_polynomial(X, Y):
  22.     def L(i):
  23.         return lambda x: np.prod([(x-X[j])/(X[i]-X[j]) for j in range(len(X)) if i != j]) * Y[i]
  24.     Sx = [L(i) for i in range(len(X))]  # summands
  25.     return lambda x: np.sum([s(x) for s in Sx])
  26.  
  27. # F = langrange_polynomial(*read_data(data_fname))
  28. (X, Y) = read_data(data_fname)
  29. F = langrange_polynomial(X, Y)
  30.  
  31. x_range = np.linspace(X[0], X[-1], 100)
  32. plt.plot(X, Y, 'ro')
  33. plt.plot(x_range, map(F, x_range))
  34. plt.xlabel(r'$x$')
  35. plt.ylabel(r'$F(x)$')
  36. plt.title('Lagrange polynomial interpolation')
  37. plt.grid(True)
  38. plt.show()
clone this paste RAW Paste Data