# [SciPy-user] spline interpolation

Nils Wagner nwagner at iam.uni-stuttgart.de
Fri Nov 10 06:55:05 CST 2006

```Christian Kristukat wrote:
> Nils Wagner wrote:
>
>> Christian Kristukat wrote:
>>
>>> Robert Kern wrote:
>>>
>>>
>>>> Jordan Dawe wrote:
>>>>
>>>>
>>>>> I've been looking at scipy's interpolation routines and I can't make
>>>>> heads or tails of them.  I just want to do a spline interp1d like matlab
>>>>> does.  Is there any way to do this?
>>>>>
>>>>>
>>>> I don't know exactly what features you want from Matlab's interp1d, but you
>>>> probably want scipy.interpolate.UnivariateSpline.
>>>>
>>>>
>>> I just noticed that UnivariateSpline.derivatives() seems to be broken:
>>>
>>> import numpy as N
>>> from scipy.interpolate import UnivariateSpline as spline
>>> x=N.arange(10,dtype=float)
>>> y=x**2
>>> a=N.linspace(2,5,100)
>>> sp=spline(x,y)
>>> b=sp(a)
>>> der=sp.derivatives(a)
>>>
>>> fails with:
>>>
>>> 0-th dimension must be fixed to 8 but got 4
>>> ---------------------------------------------------------------------------
>>> dfitpack.error                                     Traceback (most recent call last)
>>>
>>> /mnt/home/ck/<console>
>>>
>>> /usr/local/lib/python2.4/site-packages/scipy/interpolate/fitpack2.py in
>>> derivatives(self, x)
>>>     179     def derivatives(self, x):
>>>     180         """ Return all derivatives of the spline at the point x."""
>>> --> 181         d,ier = dfitpack.spalde(*(self._eval_args+(x,)))
>>>     182         assert ier==0,`ier`
>>>     183         return d
>>>
>>> error: failed in converting 2nd argument `c' of dfitpack.spalde to C/Fortran array
>>>
>>> with numpy 1.0rc2, scipy 0.5.1 on linux
>>>
>>> Christian
>>>
>>>
>>> _______________________________________________
>>> SciPy-user mailing list
>>> SciPy-user at scipy.org
>>> http://projects.scipy.org/mailman/listinfo/scipy-user
>>>
>>>
>> Works fine for me.
>>
>>
>>>>> der
>>>>>
>> array([  4.00000000e+00,   4.00000000e+00,   2.00000000e+00,
>>         -1.92438658e-15])
>>
>>>>> N.__version__
>>>>>
>> '1.0.1.dev3432'
>>
>>>>> scipy.__version__
>>>>>
>> '0.5.2.dev2314'
>>
>
> Thanks for trying. But I don't understand the result. Why does it have 4
> elements, when b had 100? What is meant by 'return all derivatives'? Is that
> 'all derivatives until the derivative is zero'?
>
> Christian
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-user
>

If you use sp=spline(x,y,k=2)
you obtain
>>> der
array([ 4.,  4.,  2.])

```