9-3 GGIk

若取樣資料並非分佈在格子點上,則我們就無法使用 interp2 指令來進行二維資料的內插。對於此種散佈式資料(Scatter Data),我們可使用 griddata 指令,其格式如下:

zi = griddata(x, y, z, xi, yi)

其中 x、y、z 是散佈點的座標,xi、yi 則是欲求內插值的點(通常是格子點)。例如:

Example 1: 09-內插法/griddata01.mx = 6*rand(100, 1)-3; % [-3, 3] 之間的 100 個均勻分佈亂數 y = 6*rand(100, 1)-3; % [-3, 3] 之間的 100 個均勻分佈亂數 z = peaks(x, y); [xi, yi] = meshgrid(-3:0.2:3, -3:0.2:3); zi = griddata(x, y, z, xi, yi); mesh(xi, yi, zi); % 畫出曲面 hold on; plot3(x, y, z, 'o'); hold off % 畫出資料點 axis tight; hidden off; figure; mesh(xi, yi, zi); view(2); axis image % 曲面俯視圖 hold on; plot3(x, y, z+1, 'o'); hold off % 畫出資料點 k = convhull(x, y); line(x(k), y(k), 10*ones(1,length(k)), 'color', 'r'); % Add convex hull

在上述範例中,我們採用了 100 個取樣點,並使用 griddata 指令來進行二維內插,共得到兩個圖(由於這 100 個點是隨機產生,每次執行都不一樣,所以得到的圖形也會每次都不一樣):

由此也可以看出,在進行 griddata 的內插時,這些散佈的資料點要越多越好(但計算時間也會隨之拉長),而且資料的分佈也是要越平均越好,才能逼近原來正確的 peaks 曲面。

對於三維散佈資料點的內插,可以使用 griddata3 指令,對於更高維度的內插,則可以使用 griddatan 指令,其用法都和 griddata 類似,讀者可由線上支援找到相關說明,在此不再贅述。


MATLAB程式設計:進階篇