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 版本文档。