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 的数组。
下面举例说明
- x1gv = [1 2];
- x2gv = [4 5 6];
- x3gv = [4 5 6 7];
- a = ndgrid(x1gv,x2gv,x3gv)
- b = meshgrid(x1gv,x2gv,x3gv)
结果输出
- 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
- 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的列,以此类推……
以上可能比较绕口,举个简单的例子,
- 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的内容,就可以理解上面比较绕口的地方。
- 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了。
- x1gv =1:.1:2;
- [a]= ndgrid(x1gv)
- a =
- 1.0000
- 1.1000
- 1.2000
- 1.3000
- 1.4000
- 1.5000
- 1.6000
- 1.7000
- 1.8000
- 1.9000
- 2.0000
- x1gv =1:.1:2;
- [a b]= ndgrid(x1gv)
- 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
给出一个很炫的图的绘制方法
- [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文件
附上链接:http://cn.mathworks.com/help/matlab/ref/ndgrid.html