Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

meshgrid

二维和三维网格

说明

[X,Y] = meshgrid(x,y) 基于向量 xy 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 XY 表示的网格有 length(y) 个行和 length(x) 个列。

示例

[X,Y] = meshgrid(x)[X,Y] = meshgrid(x,x) 相同,并返回网格大小为 length(x)×length(x) 的方形网格坐标。

示例

[X,Y,Z] = meshgrid(x,y,z) 返回由向量 xyz 定义的三维网格坐标。XYZ 表示的网格的大小为 length(y)×length(x)×length(z)

示例

[X,Y,Z] = meshgrid(x)[X,Y,Z] = meshgrid(x,x,x) 相同,并返回网格大小为 length(x)×length(x)×length(x) 的三维网格坐标。

示例

示例

全部折叠

使用向量 x 定义的 x 坐标和向量 y 定义的 y 坐标创建二维网格坐标。

x = 1:3;
y = 1:5;
[X,Y] = meshgrid(x,y)
X = 5×3

     1     2     3
     1     2     3
     1     2     3
     1     2     3
     1     2     3

Y = 5×3

     1     1     1
     2     2     2
     3     3     3
     4     4     4
     5     5     5

在二维网格上计算表达式 x2+y2

X.^2 + Y.^2
ans = 5×3

     2     5    10
     5     8    13
    10    13    18
    17    20    25
    26    29    34

使用均匀间隔的 x 坐标和 y 坐标在区间 [-2,2] 内创建二维网格。

x = -2:0.25:2;
y = x;
[X,Y] = meshgrid(x);

在二维网格上计算并绘制函数 f(x,y)=xe-x2-y2

F = X.*exp(-X.^2-Y.^2);
surf(X,Y,F)

从 R2016b 开始,操作网格之前并不总是需要先创建网格。例如,计算表达式 xe-x2-y2 将隐式扩展向量 xy。有关隐式扩展的详细信息,请参阅数组与矩阵运算

surf(x,y,x.*exp(-x.^2-(y').^2))

在区间 [0,6] 内使用定义的 xyz 坐标创建三维网格坐标,并计算表达式 x2+y2+z2

x = 0:2:6;
y = 0:1:6;
z = 0:3:6;
[X,Y,Z] = meshgrid(x,y,z);
F = X.^2 + Y.^2 + Z.^2;

确定网格的大小。三个坐标向量具有不同的长度,构成一个网格点矩形框。

gridsize = size(F)
gridsize = 1×3

     7     4     3

使用单输入语法,基于 x 中定义的坐标生成均匀间隔的三维网格。新网格构成一个网格点正方体。

[X,Y,Z] = meshgrid(x);
G = X.^2 + Y.^2 + Z.^2;
gridsize = size(G)
gridsize = 1×3

     4     4     4

输入参数

全部折叠

点的 x 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

点的 y 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

点的 z 坐标,指定为向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

输出参量

全部折叠

网格上的 x 坐标,以二维数组(两个输入)或三维数组(三个输入)的形式返回。

网格上的 y 坐标,以二维数组(两个输入)或三维数组(三个输入)的形式返回。

网格上的 z 坐标,以三维数组形式返回。

详细信息

全部折叠

meshgridndgrid 格式之间转换

meshgridndgrid 使用不同的输出格式创建网格。具体来说,使用这些函数之一创建的网格的前两个维度在与另一种网格格式进行比较时会发生交换。一些 MATLAB® 函数使用 meshgrid 格式的网格,而另一些函数使用 ndgrid 格式,因此在这两种格式之间转换网格是很常见的。

您可以使用 pagetranspose从 R2020b 开始)或 permute 在这些网格格式之间进行转换,以交换网格数组的前两个维度。例如,用 meshgrid 创建一个三维网格。

[X,Y,Z] = meshgrid(1:4,1:3,1:2);

现在转置每个网格数组的前两个维度以将网格转换为 ndgrid 格式,并将结果与 ndgrid 的输出进行比较。

Xt = pagetranspose(X);
Yt = pagetranspose(Y);
Zt = pagetranspose(Z);
[Xn,Yn,Zn] = ndgrid(1:4,1:3,1:2);
isequal(Xt,Xn) & isequal(Yt,Yn) & isequal(Zt,Zn)
ans =

  logical

   1

使用 pagetranspose 等效于置换前两个维度,而让其他维度保持不变。您也可以使用 permute(X,[2 1 3:ndims(X)]) 执行此运算。

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出