ndgrid build matrices or N-D arrays by replicating some template vectors Calling Sequence [X, Y] = ndgrid(x,y) [X, Y, Z] = ndgrid(x,y,z) [X, Y, Z, T] = ndgrid(x,y,z,t) [X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm) Arguments x, y, z, ... vectors of any data types. They may have distinct data types. X, Y, Z, ... matrices in case of 2 input arguments, or hypermatrices otherwise. They all have the same sizes: `size(x,"*")` rows, `size(y,"*")` columns, `size(z,"*")` layers, etc. They have the datatypes of respective input vectors: typeof(X)==typeof(x), typeof(Y)==typeof(y), etc. Description The first application of ndgrid is to build a grid of nodes meshing the 2D or 3D or N-D space according to 2, 3, or more sets x, y, etc.. of "template" coordinates sampled along each direction/dimension of the space that you want to mesh. Hence, the matrix or hypermatrix X is made by replicating the vector x as all its columns ; the matrix or hypermatrix Y is made by replicating the vector y as all its rows ; Z is made of replicating the vector z along all its local thicknesses (3rd dimension); etc. [X, Y] = ndgrid([1 3 4], [0 2 4 6]) X = 1. 1. 1. 1. 3. 3. 3. 3. 4. 4. 4. 4. Y = 0. 2. 4. 6. 0. 2. 4. 6. 0. 2. 4. 6. ]]> Then, the coordinates of the node(i,j) in the 2D space will be simply [x(i), y(j)] now given by [X(i,j), Y(i,j)]. As well, the coordinates of a node(i,j,k) of a 3D grid will be [x(i), y(j), z(k)] now given by [X(i,j,k), Y(i,j,k), Z(i,j,k)]. This replication scheme can be generalized to any number of dimensions, as well to any type of uniform data. Let's for instance consider 2 attributes: The first is a number, to be chosen from the vector say n= [ 3 7 ] The second is a letter, to be chosen from the vector say c= ["a" "e" "i" "o" "u" "y"] Then we want to build the set of all {n,c} possible pairs. It will just be the 2D grid: [N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"]) C = !a e i o u y ! !a e i o u y ! N = 3. 3. 3. 3. 3. 3. 7. 7. 7. 7. 7. 7. ]]> Then, the object(i,j) will have the properties {n(i) c(j)} that now can be addressed with {N(i,j) C(i,j)}. This kind of grid may be useful to initialize an array of structures. Following examples show how to use X, Y, Z in most frequent applications. Examples Example #1: Example #2: Example #3: Creates a table of digrams: [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"]) c2 = !a b c d e f g h ! !a b c d e f g h ! !a b c d e f g h ! c1 = !a a a a a a a a ! !b b b b b b b b ! !c c c c c c c c ! --> c1+c2 ans = !aa ab ac ad ae af ag ah ! !ba bb bc bd be bf bg bh ! !ca cb cc cd ce cf cg ch ! ]]> See Also meshgrid kron feval eval3d nf3d History 6.0 Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page.