样条插值

4

我在以下数据集上执行样条插值时遇到了困难:

import numpy
SOURCE = numpy.array([[1,2,3],[3,4,5], [9,10,11]])
from scipy.interpolate import griddata
from scipy.interpolate import interp1d
input = [0.5,2,3,6,9,15]

线性插值效果良好,但当我将线性插值替换为三次插值时,出现了错误:
f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="linear", axis=0, bounds_error=False)
f(input)

f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="cubic", axis=0, bounds_error=False)
ValueError: The number of derivatives at boundaries does not match: expected 1, got 0+0

我该如何执行这个三次插值?


在一些插值器中,这与 order 参数有关。 - Kermit
1个回答

9

你的SOURCE数据过短。使用三次样条需要至少四个点进行插值,但你只提供了三个点。如果你再添加一个值到SOURCE中,它应该就能按预期工作了:

>>> SOURCE = numpy.array([[1,2,3],[3,4,5], [9,10,11], [12,13,14]])  # added an extra value
>>> f = interp1d(SOURCE[:,0], SOURCE[:,1:], kind="cubic", axis=0, bounds_error=False)
>>> f(input)
array([[nan, nan],
       [ 3.,  4.],
       [ 4.,  5.],
       [ 7.,  8.],
       [10., 11.],
       [nan, nan]])

谢谢,我确实添加了更多的数据,这是显而易见的,因为它需要近似每个点的差异...另外,您是否知道是否有可能为外推指定导数值(对于常规或夹紧样条,导数值可以是0或[f(x1)-f(x0)]/[x1-x0])? - Nielsou Akbrg
1
我也遇到了这个问题,当我只使用三个点时。但是添加更多的点解决了这个问题。谢谢! - VARAT BOHARA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接