曲线的插值:以什么顺序考虑坐标?

时间:2019-05-20 21:00:21

标签: python scipy interpolation curve-fitting

我试图了解在曲线上进行插值时插值的工作原理以及导致之字形弯曲的原因。我以为插值法按输入顺序考虑点是正确的吗?或者,我认为可能会发生一些更复杂的事情?

我的曲线图输出

from scipy import interpolate
yao = np.asarray(yo[0::10])
xao = np.asarray(xo[0::10])
#plt.plot(xao, yao)
print(len(xao))
okayo = np.where(np.abs(np.diff(xao)) + np.abs(np.diff(yao)) > 0)
xpo = np.r_[xao[okayo], xao[-1]]
print(len(xpo))
ypo = np.r_[yao[okayo], yao[-1]]

tcko, uo = interpolate.splprep([xpo, ypo], s=3, k=1, per=False)
xo, yo = interpolate.splev(np.linspace(0, 1, 100), tcko)

fig = plt.figure()
ax = plt.subplot(111)
ax.plot(xao, yao, '.', markersize=2)
ax.plot(xo, yo, alpha=0.5)

Bad interpolation

与按已知顺序输入较少点时相反

Good interpolation

我以为我正在理解插值法,但是这种曲折曲折让我非常困惑。谢谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的数据不可用,因此无法再现结果,但是图形看起来很合理。您使用的函数很可能会将您的输入视为时间序列数据,例如,如果您希望信号值从500反弹到1000,则在上图插值法上是正确的,当您在下图上指定顺序时,您基本上输入了另一个信号值平滑变化而插值变化的情况。