[SciPy-user] spline interpolation

Christian Kristukat ckkart at hoc.net
Fri Nov 10 07:39:05 CST 2006


Nils Wagner wrote:
> 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.])

So this seems to be the 0th, 1st and 2nd derivative. Not very intuitive, nor the
fact, that it silently considers only the first element of the array I passed to
derivatives() and ignores the rest.

Christian




More information about the SciPy-user mailing list