2016-07-23 31 views
0

我想基本上增加我的數據點,當我想繪製我的x,y座標和它們相應的函數值z(x,y)的3d表面。 問題是我的座標不單調增加,所以我不能在Matlab中使用2D插值。Matlab:內插非單調座標和函數值組合

一個典型的X,Y,幾個第一排ž組合可能看起來像:

15 15 184700.882736683 
15 30 215486.921407234 
15 45 205691.389050234 
15 60 215486.897031495 
15 75 209662.528668203 
15 90 215486.908134438 
15 105 211342.684211922 
15 120 215486.920131923 
15 135 212270.488286479 
15 150 215486.917843900 
30 30 275146.369280109 
30 45 262639.083693416 
30 60 275146.334615114 
30 75 267709.604291106 
30 90 275146.361678640 
30 105 269854.818605481 
30 120 275146.331709932 
30 135 271039.490475350 
30 150 275146.317264820 
30 15 235837.965849192 

其實我可以畫出它們的散點圖,或使用meshgrid情節3D表面了出來,但由於我的數據值很少,我知道它們之間沒有值的跳躍,我只是想通過插值增加數據點的數量,並使我的3d表面看起來更細膩而不太粗糙。

我已經看過1234,但他們不特別針對於解決我的問題,因爲我的情況是一個三維的。

請不要將我的問題標記爲重複並複製;通過只搜索標題。謝謝。

+0

你有'z'作爲'x'和'y'的函數。我們通常會稱之爲2D插值。您鏈接到的解決方案有什麼問題? – Suever

+0

實際上,如果你想嘗試插值二維,你會得到錯誤,你的數據並不單調增加,因爲我有z = f(x,y)我不知道如何解決這個單調問題已經出現。見'x'是單調的,但y不是,而z是函數值,它顯然可以非單調變化。 – Soyol

+0

您鏈接的所有線程處理非單調數據。 – Suever

回答

1

因爲你的數據是分散的,您將需要爲使用griddatascatteredInterpolant插值z對於給定xy

以下是使用griddata的簡要示例。

% Sample at 1000 evenly spaced points over the x/y plane. 
[xq, yq] = meshgrid(linspace(min(x), max(x), 1000), ... 
        linspace(min(y), max(y), 1000)); 

zq = griddata(x, y, z, xq, yq); 

surf(xq, yq, zq) 

% Plot the original points as reference 
hold on 
plot3(x, y, z, 'o') 
+0

謝謝,這是最好的方法 – Soyol

+0

注意:我認爲在更新的Matlab版本中'TriScatteredInterp'已被重命名爲'ScatteredInterpolant'。 –

+1

@TasosPapastylianou是的。我的大腦顯然沒有工作。無法跟上MATLAB的棄用率。 – Suever