ndgrid 和 meshgrid 函数-Matlab

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
  1. x1gv =  [1 2];  
  2. x2gv =  [4 5 6];  
  3. x3gv =  [4 5 6 7];  
  4. a = ndgrid(x1gv,x2gv,x3gv)  
  5. b = meshgrid(x1gv,x2gv,x3gv)  

结果输出

[cpp]  view plain  copy
  1. a(:,:,1) =  
  2.      1     1     1  
  3.      2     2     2  
  4.   
  5. a(:,:,2) =  
  6.      1     1     1  
  7.      2     2     2  
  8.   
  9. a(:,:,3) =  
  10.      1     1     1  
  11.      2     2     2  
  12.   
  13. a(:,:,4) =  
  14.      1     1     1  
  15.      2     2     2  
[cpp]  view plain  copy
  1. b(:,:,1) =  
  2.      1     2  
  3.      1     2  
  4.      1     2  
  5.   
  6. b(:,:,2) =  
  7.      1     2  
  8.      1     2  
  9.      1     2  
  10.   
  11. b(:,:,3) =  
  12.      1     2  
  13.      1     2  
  14.      1     2  
  15.   
  16. b(:,:,4) =  
  17.      1     2  
  18.      1     2  
  19.      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的列,以此类推……

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

扫描二维码关注公众号,回复: 1018614 查看本文章

[cpp]  view plain  copy
  1. x1gv =1:.1:2;  
  2. x2gv =4:.2:5;  
  3. [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
  1. a =  
  2.     1.0000    1.0000    1.0000    1.0000    1.0000    1.0000  
  3.     1.1000    1.1000    1.1000    1.1000    1.1000    1.1000  
  4.     1.2000    1.2000    1.2000    1.2000    1.2000    1.2000  
  5.     1.3000    1.3000    1.3000    1.3000    1.3000    1.3000  
  6.     1.4000    1.4000    1.4000    1.4000    1.4000    1.4000  
  7.     1.5000    1.5000    1.5000    1.5000    1.5000    1.5000  
  8.     1.6000    1.6000    1.6000    1.6000    1.6000    1.6000  
  9.     1.7000    1.7000    1.7000    1.7000    1.7000    1.7000  
  10.     1.8000    1.8000    1.8000    1.8000    1.8000    1.8000  
  11.     1.9000    1.9000    1.9000    1.9000    1.9000    1.9000  
  12.     2.0000    2.0000    2.0000    2.0000    2.0000    2.0000  
  13.   
  14. b =  
  15.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  16.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  17.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  18.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  19.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  20.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  21.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  22.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  23.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  24.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  
  25.     4.0000    4.2000    4.4000    4.6000    4.8000    5.0000  

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

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

[cpp]  view plain  copy
  1. a =  
  2.     1.0000  
  3.     1.1000  
  4.     1.2000  
  5.     1.3000  
  6.     1.4000  
  7.     1.5000  
  8.     1.6000  
  9.     1.7000  
  10.     1.8000  
  11.     1.9000  
  12.     2.0000  

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

 
 
 
 
[cpp]  view plain  copy
  1. a =  
  2.   Columns 1 through 9  
  3.     1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000  
  4.     1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000    1.1000  
  5.     1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000    1.2000  
  6.     1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000    1.3000  
  7.     1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000    1.4000  
  8.     1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000    1.5000  
  9.     1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000    1.6000  
  10.     1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000    1.7000  
  11.     1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000    1.8000  
  12.     1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000    1.9000  
  13.     2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000    2.0000  
  14.   
  15.   Columns 10 through 11  
  16.     1.0000    1.0000  
  17.     1.1000    1.1000  
  18.     1.2000    1.2000  
  19.     1.3000    1.3000  
  20.     1.4000    1.4000  
  21.     1.5000    1.5000  
  22.     1.6000    1.6000  
  23.     1.7000    1.7000  
  24.     1.8000    1.8000  
  25.     1.9000    1.9000  
  26.     2.0000    2.0000  
  27.   
  28. b =  
  29.   Columns 1 through 9  
  30.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  31.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  32.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  33.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  34.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  35.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  36.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  37.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  38.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  39.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  40.     1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000  
  41.   
  42.   Columns 10 through 11  
  43.     1.9000    2.0000  
  44.     1.9000    2.0000  
  45.     1.9000    2.0000  
  46.     1.9000    2.0000  
  47.     1.9000    2.0000  
  48.     1.9000    2.0000  
  49.     1.9000    2.0000  
  50.     1.9000    2.0000  
  51.     1.9000    2.0000  
  52.     1.9000    2.0000  
  53.     1.9000    2.0000  


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

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




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

附上链接:http://cn.mathworks.com/help/matlab/ref/ndgrid.html

猜你喜欢

转载自blog.csdn.net/u012183487/article/details/76149279