[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.])
More information about the SciPy-user
mailing list