ndgrid 和 meshgrid 函数 您所在的位置:网站首页 matlab的grid ndgrid 和 meshgrid 函数

ndgrid 和 meshgrid 函数

2024-02-06 09:10| 来源: 网络整理| 查看: 265

ndgrid 函数和 meshgrid 函数是相似的,但是,前者支持从1维到n维,而后者仅仅限制于2维和3维。在2维以及3维中,两个函数的坐标输出是一样的,不同的地方在于输出数组的形状不一样。对于网格矢量(gird vectors)x1gv,x2gv,x3gv,长度分别是M,N,P。ndgrid(x1gv, x2gv)函数输出一个MXN的数组,而meshgrid(x1gv, x2gv)输出一个N*M的数组,类似的,ndgrid(x1gv, x2gv, x3gv)函数输出一个M*N*P 的数组,而meshgrid(x1gv, x2gv, x3gv)输出一个N*M*P 的数组。

下面举例说明

[cpp]  view plain  copy x1gv =  [1 2];   x2gv =  [4 5 6];   x3gv =  [4 5 6 7];   a = ndgrid(x1gv,x2gv,x3gv)   b = meshgrid(x1gv,x2gv,x3gv)   结果输出

[cpp]  view plain  copy a(:,:,1) =        1     1     1        2     2     2      a(:,:,2) =        1     1     1        2     2     2      a(:,:,3) =        1     1     1        2     2     2      a(:,:,4) =        1     1     1        2     2     2   [cpp]  view plain  copy b(:,:,1) =        1     2        1     2        1     2      b(:,:,2) =        1     2        1     2        1     2      b(:,:,3) =        1     2        1     2        1     2      b(:,:,4) =        1     2        1     2        1     2  

输如,x1gv, x2gv ,x3gv 的维数分别是2,3,4,执行两个函数之后,a = ndgrid(x1gv,x2gv,x3gv),输出的维数a是2x3x4,而b = meshgrid(x1gv,x2gv,x3gv),输出的维数是3x2x4。

下面详细讲解 ndgrid()  函数

 [X1,X2,X3,...] = ndgrid(x1gv,x2gv,x3gv,...) ,复制x1gv,x2gv,x3gv,...的值,生成一个长方形的网格的坐标(X1,X2,X3,...)。输出数组Xi的第i维的元素是由网格向量xigv中复制出来的。例如,网格向量x1gv组成了X1的行,网格向量x2gv组成了X2的列,以此类推……

以上可能比较绕口,举个简单的例子,

[cpp]  view plain  copy x1gv =1:.1:2;   x2gv =4:.2:5;   [a b]= ndgrid(x1gv,x2gv)   其中,

x1gv = [1  1.1  1.2   1.3   1.4   1.5   1.6   1.7    1.8   1.9  2],维数为1*11,长度是11,,x2gv = [4 4.2 4.4 4.6 4.8 5],维数为1*6,长度是6,那么,输出的a的行是分别由x1gv的元素复制而来的,输出的b的列也是分别由x2gv的元素复制而来的,

输出的结果如下所示:上面讲过,输出的数组的维数应为11*6,对照x1gv,x2gv看a,b的内容,就可以理解上面比较绕口的地方。

[cpp]  view plain  copy a =       1.0000    1.0000    1.0000    1.0000    1.0000    1.0000       1.1000    1.1000    1.1000    1.1000    1.1000    1.1000       1.2000    1.2000    1.2000    1.2000    1.2000    1.2000       1.3000    1.3000    1.3000    1.3000    1.3000    1.3000       1.4000    1.4000    1.4000    1.4000    1.4000    1.4000       1.5000    1.5000    1.5000    1.5000    1.5000    1.5000       1.6000    1.6000    1.6000    1.6000    1.6000    1.6000       1.7000    1.7000    1.7000    1.7000    1.7000    1.7000       1.8000    1.8000    1.8000    1.8000    1.8000    1.8000       1.9000    1.9000    1.9000    1.9000    1.9000    1.9000       2.0000    2.0000    2.0000    2.0000    2.0000    2.0000      b =       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000       4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  

最后,输出的数组的维数是由输出的变量的数所决定的,就是由ndgrid(……)函数的右边的输出列表数决定的。这句话的意思是,如果是输出的数目是1,那么维数就是N*1,N为网格向量的长度,如果输出的数目是2,那么每一个的维数就是N*N了。

[cpp]  view plain  copy x1gv =1:.1:2;   [a]= ndgrid(x1gv)  

[cpp]  view plain  copy a =       1.0000       1.1000       1.2000       1.3000       1.4000       1.5000       1.6000       1.7000       1.8000       1.9000       2.0000  

[cpp]  view plain  copy x1gv =1:.1:2;   [a b]= ndgrid(x1gv)  

[cpp]  view plain  copy a =     Columns 1 through 9       1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000       1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000       1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000       1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000       1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000       1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000       1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000       1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000       1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000       1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000       2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000        Columns 10 through 11       1.0000    1.0000       1.1000    1.1000       1.2000    1.2000       1.3000    1.3000       1.4000    1.4000       1.5000    1.5000       1.6000    1.6000       1.7000    1.7000       1.8000    1.8000       1.9000    1.9000       2.0000    2.0000      b =     Columns 1 through 9       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000       1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000        Columns 10 through 11       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000       1.9000    2.0000  

给出一个很炫的图的绘制方法

[cpp]  view plain  copy [x1,x2,x3] = ndgrid(-2:.2:2, -2:.25:2, -2:.16:2);   z = x2 .* exp(-x1.^2 - x2.^2 - x3.^2);   slice(x2,x1,x3,z,[-1.2 .8 2],2,[-2 -.2]);  

以上讲解的可能不是很明白,大家具体可以参考下matlab的help文件

附上



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有