** Interpolation of data
:PROPERTIES:
:categories: interpolation
:date: 2013/02/27 14:42:57
:updated: 2013/02/27 14:42:57
:END:
[[http://matlab.cheme.cmu.edu/2011/08/01/interpolation-of-data/][Matlab post]]
When we have data at two points but we need data in between them we use interpolation. Suppose we have the points (4,3) and (6,2) and we want to know the value of y at x=4.65, assuming y varies linearly between these points. we use the interp1d command to achieve this. The syntax in python is slightly different than in matlab.
#+BEGIN_SRC python
from scipy.interpolate import interp1d
x = [4, 6]
y = [3, 2]
ifunc = interp1d(x, y)
print ifunc(4.65)
ifunc = interp1d(x, y, bounds_error=False) # do not raise error on out of bounds
print ifunc([4.65, 5.01, 4.2, 9])
#+END_SRC
#+RESULTS:
: 2.675
: [ 2.675 2.495 2.9 nan]
The default interpolation method is simple linear interpolation between points. Other methods exist too, such as fitting a cubic spline to the data and using the spline representation to interpolate from.
#+BEGIN_SRC python
from scipy.interpolate import interp1d
x = [1, 2, 3, 4];
y = [1, 4, 9, 16]; # y = x^2
xi = [ 1.5, 2.5, 3.5]; # we want to interpolate on these values
y1 = interp1d(x,y)
print y1(xi)
y2 = interp1d(x,y,'cubic')
print y2(xi)
import numpy as np
print np.array(xi)**2
#+END_SRC
#+RESULTS:
: [ 2.5 6.5 12.5]
: [ 2.25 6.25 12.25]
: [ 2.25 6.25 12.25]
In this case the cubic spline interpolation is more accurate than the linear interpolation. That is because the underlying data was polynomial in nature, and a spline is like a polynomial. That may not always be the case, and you need some engineering judgement to know which method is best.