我正在尝试创建一个点列表的插值。
我有一些坐标点(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一样。
有一些方法可以应用非常规点的三次插值吗?
答案 0 :(得分:1)
参数的不等间距不是问题,只要它们都是不同的。您可能知道,如果您有四个不同的时间t[i]
,那么存在一个唯一的多项式插值,其对应的值x[i]
的度数最多为3(立方或更低阶)。
计算插值有两种主要方法,Newton's divided-differences和Lagrange'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也是健壮和实用的。