9-4 TlIk

MATLAB 的 interp3 可進行 3 維格子點的內插,其一般格式為

vi = interp3(x, y, z, v, xi, yi, zi, method)

其中 x、y、z、v 是三維矩陣,前三者代表資料點的輸入部份,v 則是資料點的輸出部份,xi、yi 及 zi 則是內插點,字串 method 則指定不同的內插方法,共有 4 種:

使用 interp3 時,矩陣 x、y、z 必須是嚴格遞增或遞減。一般情況下, x、y 及 z 都是由 ndgrid 指令 所產生,以保證其格式的正確性。

使用 interp3 的例子如下。首先,我們使用 flow 指令產生三度空間中的資料點(這些資料是火箭噴射口的速度大小),並以切面圖(Slice)的方式畫出:

Example 1: 09-內插法/slice01.m[x, y, z, v] = flow(10); slice(x, y, z, v, [6 9.5], 2.5, [-2 0]); colorbar; % 顯示顏色與函數值的對照表 size(x) ans = 10 20 10

由上可知 x、y、z 的維度是 10×20×10。在上例中,slice 指令可對三度空間做“切片”,之後經由顏色的不同,就可以區別函數值的高低,「顏色」與「函數值」的對照表,可以參見圖形右方的 colorbar。

Hint
  • 在MATLAB常用的1維輸入的函數是 humps,常用來測試曲線的零點或是極值。
  • 常用的2維輸入的函數是 peaks,常用來測試曲面圖或是等高線。
  • 而常用的三維輸入的函數就是 flow,常用來測試切片圖或三維內插。

很明顯的,由上述範例的圖形,可以感覺資料的解析度太低,因此圖形很粗糙。為了使圖形更為細緻,接著我們使用 meshgrid 指令產生三度空間的格子點,並用 interp3 來進行內插,範例如下:

Example 2: 09-內插法/interp301.m[x, y, z, v] = flow(10); [xi, yi, zi] = meshgrid(.1:.25:10, -3:.25:3, -3:.25:3); vi = interp3(x, y, z, v, xi, yi, zi); slice(xi, yi, zi, vi, [6 9.5], 2.5, [-2 0]); % 產生切片圖 colorbar; % 顯示顏色與函數值的對照表 size(xi) ans = 25 40 25

由上可知 xi、yi、zi 的維度是 25×40×25,比原先的分佈要稠密許多,因此畫出來的圖形也比較細緻、美觀。

Hint
在上述範例的圖形中,若要不顯示格線,可以輸入「shading interp」,此時所得到的顏色就是進一步經由內插所得到平滑變化的顏色,請試試看。


MATLAB程式設計:進階篇