matlab的meshgrid函数



meshgrid是MATLAB中用于生成网格采样点的函数。在使用MATLAB进行3-D图形绘制方面有着广泛的应用。

详细解释:help meshgrid
meshgrid用于从数组a和b产生网格。生成的网格矩阵A和B大小是相同的。它也可以是更高维的。
[A,B]=Meshgrid(a,b)
生成size(b)Xsize(a)大小的矩阵A和B。它相当于a从一行重复增加到size(b)行,把b转置成一列再重复增加到size(a)列。因此命令等效于:
A=ones(size(b))*a;
B=b'*ones(size(a))
如下所示:
>> a=[1:2]
a =
     1     2

>> b=[3:5]
b =
     3     4     5
>> [A,B]=meshgrid(a,b)
A =
     1     2
     1     2
     1     2

B =
     3     3
     4     4
     5     5

>> [B,A]=meshgrid(b,a)
B =
     3     4     5
     3     4     5

A =
     1     1     1
     2     2     2 

函数功能

生成绘制3-D图形所需的 网格数据 。在计算机中进行绘图操作时, 往往需要一些 采样点 ,然后根据这些采样点来绘制出整个图形。在进行3-D绘图操作时,涉及到x、y、z三组数据,而x、y这两组数据可以看做是在Oxy平面内对坐标进行采样得到的坐标对(x, y)。
例如, 要在“3<=x<=5,6<=y<=9,z不限制 区间 ” 这个区域内绘制一个3-D图形,如果只需要整数坐标为 采样点 的话。我们可能需要下面这样一个坐标构成的 矩阵
(3,9),(4,9),(5,9);
(3,8),(4,8),(5,8);
(3,7),(4,7),(5,7);
(3,6),(4,6),(5,6);   // 这些都是XOY平面的坐标点
在matlab中我们可以这样描述这个坐标 矩阵
把各个点的x坐标独立出来,得:
3,4,5;
3,4,5;
3,4,5;
3,4,5;
可以把这个矩阵设为X~~
再把各个点的y坐标也独立出来:
9,9,9;
8,8,8;
7,7,7;
6,6,6;
可以把这个矩阵设为Y~~
这样对应的x、y结合,便表示了上面的坐标 矩阵 mesh grid就是产生这样两个 矩阵 ,来简化我们的操作。然后根据(x, y)计算获得z,并绘制出三维图形。

语法

[X,Y] =  mesh grid(x,y)    // 这个语句是用的最多的语句
上面的描述,我们可以知道, mesh grid返回的两个 矩阵 X、Y必定是行数、列数相等的(即X、Y两个矩阵都有相同的行数,和相同的列数)
且X、Y的行数都等于输入参数y中元素的总个数,X、Y的列数都等于输入参数x中元素总个数(这个结论可以通过查看 mesh grid的源代码得到,可以通过示例程序得到验证)。(我们自己也可以体会到)
[X,Y]= mesh grid(x)与[X,Y]= mesh grid(x,x)是等同的
[X,Y,Z]= mesh grid(x,y,z)生成三维 数组 ,可用来计算三 变量 的函数和绘制三维立体图
相关函数: plot3、 mesh surf 、automesh、 ndgrid


我们自己也可以测试一下:

在MATLAB命令行中,输入一下内容~

x = rand(3, 4);
       y = rand(2, 3);
      [X, Y] = meshgrid(x, y)

回车后,会产生如下数据:

x =

    0.4039    0.9421    0.0598    0.8212
    0.0965    0.9561    0.2348    0.0154
    0.1320    0.5752    0.3532    0.0430


y =

    0.1690    0.7317    0.4509
    0.6491    0.6477    0.5470



X=



    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430
    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430
    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430
    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430
    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430
    0.4039    0.0965    0.1320    0.9421    0.9561    0.5752    0.0598    0.2348    0.3532    0.8212    0.0154    0.0430




Y =


    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690    0.1690
    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491    0.6491
    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317    0.7317
    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477    0.6477
    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509    0.4509
    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470    0.5470


因为rand(3, 4)会自动生成一个3行4列的矩阵,且矩阵中的元素大小在0~1之间

rand(2, 3)会自动生成一个2行3列的矩阵,且矩阵中的元素大小在0~1之间~~

这样就相当于x轴有3*4即有12个元素,y轴有6个元素,

所以,在调用meshgrid时,X、Y矩阵会有6行12列,

在XOY平面,会产生 72 个点。。。


[X,Y]=meshgrid(-4:0.5:22,-11:0.5:10);

调用这个语句时,X轴方向会有26*2=52个点

Y轴方向会有21*2=42个点, 

所以,我们绘制的三维图像网格中,会有52*42=2184个点

你可能感兴趣的:(matlab的meshgrid函数)