若取樣資料並非分佈在格子點上,則我們就無法使用 interp2 指令來進行二維資料的內插。對於此種散佈式資料(Scatter Data),我們可使用 griddata 指令,其格式如下:
zi = griddata(x, y, z, xi, yi) 其中 x、y、z 是散佈點的座標,xi、yi 則是欲求內插值的點(通常是格子點)。例如:
在上述範例中,我們採用了 100 個取樣點,並使用 griddata 指令來進行二維內插,共得到兩個圖(由於這 100 個點是隨機產生,每次執行都不一樣,所以得到的圖形也會每次都不一樣):
- 在第一個圖中,每一圓球代表取樣點(共 100 點),而曲面則是使用 griddata 指令的內插結果。
- griddata 指令只進行內插,而不進行外插,因此所產生的曲面資料只定義在這些取樣點所形成的最小凸多邊型(Convex Hull),如第二個圖所示。
由此也可以看出,在進行 griddata 的內插時,這些散佈的資料點要越多越好(但計算時間也會隨之拉長),而且資料的分佈也是要越平均越好,才能逼近原來正確的 peaks 曲面。
對於三維散佈資料點的內插,可以使用 griddata3 指令,對於更高維度的內插,則可以使用 griddatan 指令,其用法都和 griddata 類似,讀者可由線上支援找到相關說明,在此不再贅述。
MATLAB程式設計:進階篇