HOWTO · MATLAB
MATLAB 中的 meshgrid() 函式
了解 MATLAB 中的 meshgrid() 如何將座標向量對應為矩陣,在二維格網上求值函數,並用 surf() 將結果視覺化。
本頁內容
MATLAB 中的 meshgrid() 將座標向量轉換為座標矩陣,讓你可以在二維格網的每個點上求值函數,並繪製所得的值。下面的範例使用數量不同的 x 和 y 座標,使矩陣的方向一目瞭然。
了解 meshgrid() 如何對應座標
使用小寫的輸入向量呼叫 meshgrid(x, y)。它會回傳大寫矩陣 X 和 Y:X 的每一列重複 x 座標,而 Y 的每一行重複一個 y 座標。各列對應來自 y 的值,各行對應來自 x 的值。
例如,x = 1:4 有四個值,y = 1:6 有六個值。得到的 X 和 Y 各有六列四行。在檢查格網,或將其與函數值的矩陣對應時,記住這個方向很有用。
建立二維座標格網
這個自包含且與 Octave 相容的範例會建立一個非正方形的格網,在每個座標對上求值函數,並繪製所得的曲面。它會印出座標模式的精簡檢視和矩陣大小。
warning('off', 'Octave:gnuplot-graphics');
set(0, 'defaultfigurevisible', 'off');
x = 1:4;
y = 1:6;
[X, Y] = meshgrid(x, y);
Z = X.^2 + Y.^2;
fprintf('X(1,:) =');
fprintf(' %g', X(1,:));
fprintf('\nY(:,1) =');
fprintf(' %g', Y(:,1));
fprintf('\nsize(Z) = %d %d\n', size(Z));
surf(X, Y, Z);
印出的第一列顯示 X 在每一列重複 1 2 3 4。Y 的第一行顯示從 1 到 6 的 y 座標,每個值在該行中重複。因此,每一對 X(i,j) 和 Y(i,j) 給出一個座標對,而 Z(i,j) 儲存該點的函數值。.^ 運算子將矩陣的每個元素平方;一般的矩陣次方無法表達這種逐元素計算。
X(1,:) = 1 2 3 4
Y(:,1) = 1 2 3 4 5 6
size(Z) = 6 4
在格網上求值並繪製函數
此範例從座標矩陣計算 Z = X.^2 + Y.^2,然後將 X、Y 和 Z 傳給 surf()。在此工作流程中,Z 的列數和行數必須與 X 和 Y 相同,這樣繪製的每個高度都對應一個座標對。如果你變更任一輸入向量,meshgrid() 會改變格網的維度,逐元素運算式會計算出相符的值。
若要從上方檢視函數的等值層次,MATLAB 的 contour(X, Y, Z) 可以使用相同的矩陣來取代 surf()。它將等值曲線視覺化;這是另一種繪圖呼叫,而不是此處額外執行的範例。
建立三維座標格網
當函數依賴三個空間座標時(例如在整個體積中求值的量),三維座標格網很有用。本文涵蓋雙向量的 meshgrid(x, y) 工作流程,並未指定三維的呼叫語法或輸出維度。將此方法套用到第三個座標之前,請查閱你所使用的 MATLAB 版本文件。