不等距点的三次插值

时间:2011-06-06 09:45:19

标签: math interpolation catmull-rom-curve

我正在尝试创建一个点列表的插值。

我有一些坐标点(ti,xi),其中ti是时间戳,xi是相关值。我想创建一个通过这些点的函数,并允许我找到对应于区间内的泛型t的x值。

我想用三阶插值来插值它们。我见过像catmull-rom插值这样的东西,但只有当xi点等距时它才有效。

例如,http://www.mvps.org/directx/articles/catmull/您可以发现时间戳点是等距的,就像http://www.cs.cmu.edu/~462/projects/assn2/assn2/catmullRom.pdf一样。

有一些方法可以应用非常规点的三次插值吗?

2 个答案:

答案 0 :(得分:1)

参数的不等间距不是问题,只要它们都是不同的。您可能知道,如果您有四个不同的时间t[i],那么存在一个唯一的多项式插值,其对应的值x[i]的度数最多为3(立方或更低阶)。

计算插值有两种主要方法,Newton's divided-differencesLagrange's method of interpolation

请记住,只是找到多项式不是重点,而是在区间的另一个时间进行评估,需要考虑一些编程权衡。

如果时间t[i]已修复,但值x[i]会重复更改,那么您可能会使用拉格朗日方法。它基本上构造了四个三次多项式,它们在四个点中的三个点处生根,并在剩余点处给出归一化值1。一旦有了这四个多项式,插值x[i]只需要采用相应的线性组合。拉格朗日的方法受到Runge's phenomenon at the edges of the interval的影响。

但是,如果时间t[i]不断变化,或者您正在评估相同t[i], x[i]数据的多个中间点的插值多项​​式,那么Newton's divided differences可能会更好。如果准确性很重要,可以改变时间t[i]出现在分割差异表格中的顺序,以便评估本地化在最接近需要该值的中间时间的时间。

在网上找到牛顿分割差分方法的示例代码并不难,例如:用C ++,Python或Java。

答案 1 :(得分:0)

一种方法可能是通过点拟合最小二乘法。我发现即使只有少量的点,方法here也是健壮和实用的。