2011-06-06 121 views
3

我試圖創建一個點列表的插值。不等距點的三次插值

我有一些座標點(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

您是否考慮過[立方樣條](http://en.wikipedia.org/wiki/Spline_%28mathematics%29#Derivation_of_a_Cubic_Spline)? – 2011-06-06 12:32:43

回答

1

參數的不等間距不是問題,只要它們都是不同的。如您所知,如果您有四個不同的時間t[i],則存在具有至多3(立方或更低階)度的相應值x[i]的唯一多項式插值。

計算插值有兩種主要方法: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]在差異分散表格中出現的順序,以便評估位於需要該值的中間時間的最近時間附近。

在網上找到Newton分裂差異方法的示例代碼並不難,在C++,Python或Java中。

0

一種方法可能是通過點擬合最小二乘方。我發現這種方法here即使只有少量的點數也是可靠和實用的。