2015-10-16 66 views
1

讓我們考慮我有一組點,它們被描述爲一對2D座標。在每一個點上,我都有一個給定參數的值,比如溫度。使用TriScatteredInterp(Matlab)的2D插值

點1:(x1, y1, t1)

點2:(x2, y2, t2)

...

點N:(xn, yn,tn)

所有這些點被包含在一個2D域是內形狀爲三角形。

我想在整個域的範圍內插入參數t。任何插值方法(線性,最近鄰居,...)對我來說都沒問題。我深信我使用MATLAB來實現這一點 - 更準確地說,使用TriScatteredInterp。但是,它似乎並不奏效。它無法創建插值。

這裏是我到目前爲止已經試過:

x = [0, 1, 1, 0] 
y = [0, 0, 1, 1] 
t = [10, 20, 30, 20] 
F = TriScatteredInterp(x, y, t) 

最後一行產生以下錯誤:

???錯誤使用==>TriScatteredInterp

輸入數據必須以列向量格式指定。

看來我給出的輸入方式是錯誤的。我對Google進行了一些研究,但我找不到問題。

任何幫助將不勝感激,謝謝。

回答

1

錯誤很明顯......它表示數據必須位於列向量中。你有他們作爲行向量。簡單地說,調用函數前轉您的數據:

>> F = TriScatteredInterp(x.', y.', t.') 

F = 

    TriScatteredInterp with properties: 

     X: [4x2 double] 
     V: [4x1 double] 
    Method: 'linear' 

FWIW,如果你閱讀文檔,你會看到列向量是必需的:http://www.mathworks.com/help/matlab/ref/triscatteredinterp.html


一旦你創建你的插值,你可以使用任何尺寸的任何(x,y)座標用於插值,並且結果將給出匹配xy的內插值...因此類似這樣的內容可以工作:

[X,Y] = meshgrid(linspace(min(x),max(x)), linspace(min(y),max(y))); 
out = F(X,Y); 

輸出將是已應用到插值(x,y)座標網格...基本上,你會得到使用XY獨特(x,y)對插值表面。

+1

它工作正常,謝謝! –

+0

@RolandY。 - 很高興!祝你好運! – rayryeng