2011-10-16 85 views
6

因此,我們有像什麼數學方法適用於插值2d到2d函數?

12,32 
24,12 
... 

與長度2×N個和另一個

44,32 
44,19 
... 

與長度2×N個的矩陣,並且存在返回z [1],Z [一些函數f(x,y)的2]。我們給出的2個矩陣表示x,y和z [1],z [2]的已知值對。什麼是插值公式,這將有助於在這種情況下?

+0

你尋找類似的多項式插值與函數2個變量? – amit

+0

是的。但該函數將不得不返回2個變量... – Rella

+0

您可以嘗試用複數來做到這一點。 – starblue

回答

4

如果你解決了一個返回值的問題,你可以通過插值找到兩個函數f_1(x,y)f_2(x,y),並將你的函數編寫爲f(x, y) = [f_1(x,y), f_2(x,y)]。只需選擇任何方法來解決適合您問題的插值函數。

對於二維實際插值問題,有很多方法可以處理這個問題。如果您需要簡單,您可以使用線性插值。如果您可以使用分段函數,則可以使用貝塞爾曲線或樣條曲線。或者,如果數據是統一的,你可以用一個簡單的多項式插值(當然,在2D中不是很平凡,但很簡單)就可以避開。


編輯:更多信息和一些鏈接。

分段解決方案可以使用Bilinear interpolation (wikipedia)。對於多項式插值,如果您的數據位於網格上,則可以使用以下算法(我無法找到它的引用,它來自內存)。

如果數據點上k通過l格,重寫你的多項式如下:

f(x,y) = cx_1(x)*y^(k-1) + cx_2(x)*y^(k-2) + ... + cx_k(x) 

在這裏,每個係數cx_i(x)也是l的多項式。第一步是通過內插網格的每一行或一列來找到程度爲lk多項式。當做到這一點,你必須l係數集(或者,換句話說,l多項式)作爲插值點,每個cx_i(x)多項式爲cx_i(x0)cx_i(x1),...,cx_i(xl)(給你一個總的L * k個點)。現在,您可以使用上述常數確定這些多項式作爲插值點,它們會給出結果f(x,y)

對貝塞爾曲線或樣條曲線使用相同的方法。唯一的區別是您使用控制點而不是多項式係數。你首先得到一組將產生你的數據點的樣條曲線,然後你插入這些中間曲線的控制點來獲得曲面曲線的控制點。


讓我來添加一個例子來闡明上面的算法。我們有以下數據點:

0,0 => 1 
0,1 => 2 
1,0 => 3 
1,1 => 4 

我們開始通過擬合兩個多項式:一個用於數據點(0,0)和(0,1),而另一個爲(1,0)和(1,1 ):

f_0(x) = x + 1 
f_1(x) = x + 3 

現在,我們插在另一個方向來確定我們垂直閱讀這些多項式係數coefficients.When,我們需要兩個多項式。在0和1都評估爲1;而另一種計算結果爲1 0和3在1:

cy_1(y) = 1 
cy_2(y) = 2*y + 1 

如果我們結合到這些f(x,y),我們得到:

f(x,y) = cy_1(y)*x + cy_2(y) 
     = 1*x + (2*y + 1)*1 
     = x + 2*y + 1 
+0

你能解釋一下[或者給出參考解釋]你提到的方法對於二維信息的工作方式嗎? – amit