Spline Interpolation with Python
Question: I wrote the following code to perform a spline interpolation:

    
    
    import numpy as np
    import scipy as sp
    
    x1 = [1., 0.88,  0.67,  0.50,  0.35,  0.27, 0.18,  0.11,  0.08,  0.04,  0.04,  0.02]
    y1 = [0., 13.99, 27.99, 41.98, 55.98, 69.97, 83.97, 97.97, 111.96, 125.96, 139.95, 153.95]
    
    x = np.array(x1)
    y = np.array(y1)
    
    new_length = 25
    new_x = np.linspace(x.min(), x.max(), new_length)
    new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
    

but I am getting:

    
    
    ValueError: A value in x_new is below the interpolation range.
    

in `interpolate.py`

Any help would be appreciated.


Answer: From the [scipy documentation on
scipy.interpolate.interp1d](http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp1d.html):

> scipy.interpolate.interp1d(x, y, kind='linear', axis=-1, copy=True,
> bounds_error=True, fill_value=np.nan)
>
> x : array_like. A 1-D array of monotonically increasing real values.
>
> ...

The problem is that the x values are not [monotonically
increasing](http://planetmath.org/MonotonicallyIncreasing.html). In fact they
are monotonically decreasing. Let me know if this works and if its still the
computation you are looking for.:

    
    
    import numpy as np
    import scipy as sp
    from scipy.interpolate import interp1d
    
    x1 = sorted([1., 0.88, 0.67, 0.50, 0.35, 0.27, 0.18, 0.11, 0.08, 0.04, 0.04, 0.02])
    y1 = [0., 13.99, 27.99, 41.98, 55.98, 69.97, 83.97, 97.97, 111.96, 125.96, 139.95, 153.95]
    
    new_length = 25
    new_x = np.linspace(x.min(), x.max(), new_length)
    new_y = sp.interpolate.interp1d(x, y, kind='cubic')(new_x)
    

