如果您查看找到该示例的documentation page,则会给出用法:
强调我的
mesh(X,Y,Z) 创建一个网格图,它是一个具有实心边缘颜色且没有面颜色的三维曲面。该函数将 matrix Z 中的值绘制为由 X 和 Y 定义的 x-y 平面中网格上方的高度。边缘颜色根据Z指定的高度而变化。
你提到的例子是这样的:
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z)
meshgrid() 的文档说:
[X,Y] = meshgrid(x) 与[X,Y] = meshgrid(x,x) 相同,返回网格大小为length(x)-by-length(x) 的正方形网格坐标。
好的,meshgrid(x, x) 在做什么?
[X,Y] = meshgrid(x,y) 根据向量x 和y 中包含的坐标返回二维网格坐标。 X 是一个矩阵,其中每一行都是x 的副本,Y 是一个矩阵,其中每一列 都是y 的副本。坐标X 和Y 表示的网格有length(y) 行和length(x) 列。
这很不言自明,对吧?例如,当您执行[X, Y] = meshgrid(-8:2:8) 时,您会得到:
我降低了点的密度以帮助澄清正在发生的事情
X =
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
-8 -6 -4 -2 0 2 4 6 8
Y =
-8 -8 -8 -8 -8 -8 -8 -8 -8
-6 -6 -6 -6 -6 -6 -6 -6 -6
-4 -4 -4 -4 -4 -4 -4 -4 -4
-2 -2 -2 -2 -2 -2 -2 -2 -2
0 0 0 0 0 0 0 0 0
2 2 2 2 2 2 2 2 2
4 4 4 4 4 4 4 4 4
6 6 6 6 6 6 6 6 6
8 8 8 8 8 8 8 8 8
如果你为所有i 和j 绘制x = X(i, j) 和y = Y(i, j) 给出的每个点,你会得到这样的结果:
当您执行下一行时:
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R) ./ R;
您正在做矩阵数学,R 和 Z 是矩阵,就像 X 和 Y。元素Z(i, j) 为您提供z 轴在x = X(i, j) 和y = Y(i, j) 的值。
但是,当您运行您的代码时,x、y 和z 是向量。如果您绘制所有 x 和 y 对(我再次降低了点的密度),您会得到红点 - 一条对角线,而不是您实际需要的网格。
mesh() 需要你的点在一个网格上(因为它就是这样做的——创建一个 mesh 图)。您的代码仅提供对角线上的点的z 值x = y。
绘制矩阵给出表面/网格图:
如果您只需要 3D 线图,请查看 plot3() 函数。
plot3(x, y, z) 给出: