1 <?xml version="1.0" encoding="UTF-8"?>\r
3     <refnamediv>\r
4         <refname>ndgrid</refname>\r
5         <refpurpose>与えられたベクトルを複製することによって、行列またはN次元配列を作成\r
6         </refpurpose>\r
7     </refnamediv>\r
8     <refsynopsisdiv>\r
9         <title>呼び出し手順</title>\r
10         <synopsis>[X, Y] = ndgrid(x,y)\r
11             [X, Y, Z] = ndgrid(x,y,z)\r
12             [X, Y, Z, T] = ndgrid(x,y,z,t)\r
13             [X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm)\r
14         </synopsis>\r
15     </refsynopsisdiv>\r
16     <refsection role="arguments">\r
17         <title>引数</title>\r
18         <variablelist>\r
19             <varlistentry>\r
20                 <term>x, y, z, ...</term>\r
21                 <listitem>\r
22                     <para>vectors of any data types. They may have distinct data types.</para>\r
23                 </listitem>\r
24             </varlistentry>\r
25             <varlistentry>\r
26                 <term>X, Y, Z, ...</term>\r
27                 <listitem>\r
28                     <para>\r
29                         入力引数が2個の場合は行列,\r
30                         それ以外の場合はハイパー行列\r
31                     </para>\r
32                 </listitem>\r
33             </varlistentry>\r
34         </variablelist>\r
35     </refsection>\r
36     <refsection role="description">\r
37         <title>説明</title>\r
38         <para>The first application of <function>ndgrid</function> is to build\r
39             a grid of nodes meshing the 2D or 3D or N-D space according to 2, 3,\r
40             or more sets\r
41             <literal>x</literal>, <literal> y</literal>, etc.. of  \r
42             "template" coordinates sampled along each direction/dimension of the\r
43             space that you want to mesh.\r
44         </para>\r
45         <para>Hence, the matrix or hypermatrix <literal>X</literal> is made\r
46             by replicating the vector <literal>x</literal> as all its columns ; \r
47             the matrix or hypermatrix <literal>Y</literal> is made\r
48             by replicating the vector <literal>y</literal> as all its rows ;\r
49             <literal>Z</literal> is made of replicating the vector \r
50             <literal>z</literal> along all its local thicknesses (3rd dimension); \r
51             etc\r
52         </para>\r
53         <screen>\r
54 <![CDATA[--> [X, Y] = ndgrid([1 3 4], [0 2 4 6])\r
55  X  = \r
56    1.   1.   1.   1.\r
57    3.   3.   3.   3.\r
58    4.   4.   4.   4.\r
59 \r
60    Y  = \r
61    0.   2.   4.   6.\r
62    0.   2.   4.   6.\r
63    0.   2.   4.   6.\r
64 ]]></screen>\r
65         <para>  \r
66             Then, the coordinates of the node(i,j) in the 2D space \r
67             will be\r
68             simply <literal>[x(i), y(j)]</literal> equal to \r
69             <literal>[X(i,j), Y(i,j)]</literal>. As well, the coordinates of a\r
70             <literal>node(i,j,k)</literal> of a 3D grid will be \r
71             <literal>[x(i), y(j), z(k)]</literal> equal to \r
72             <literal>[X(i,j,k), Y(i,j,k), Z(i,j,k)]</literal>.\r
73         </para>\r
74         <para>\r
75             This replication scheme can be generalized to any number of dimensions,\r
76             as well to any type of uniform data. Let's for instance consider 2\r
77             attributes:\r
78             <orderedlist>\r
79                 <listitem>The first is a number, to be chosen from the vector say\r
80                 <literal>n = [ 3 7 ]</literal>\r
81                 </listitem>\r
82                 <listitem>The second is a letter, to be chosen from the vector \r
83                 say <literal>c = ["a" "e" "i" "o" "u" "y"]</literal>\r
84                 </listitem>\r
85             </orderedlist>\r
86             Then we want to build the set of all {n,c} possible pairs. It will\r
87             just be the 2D grid:\r
88         </para>\r
89         <screen>\r
90 <![CDATA[--> [N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"])\r
91  C  = \r
92 !a  e  i  o  u  y  !\r
93 !a  e  i  o  u  y  !\r
94 \r
95  N  = \r
96    3.   3.   3.   3.   3.   3.\r
97    7.   7.   7.   7.   7.   7.\r
98 ]]></screen>\r
99         <para>Then, the object(i,j) will have the properties \r
100         <literal>{n(i) c(j)}</literal> that now can be addressed with\r
101         <literal>{N(i,j) C(i,j)}</literal>.\r
102         This kind of grid may be useful to initialize an array of structures.\r
103         </para>\r
104         <para>Following examples show how to use <varname>X, Y, Z</varname> in\r
105         most frequent applications.\r
106         </para> \r
107     </refsection>\r
108     <refsection role="examples">\r
109         <title>例</title>\r
110 \r
111         <para><emphasis role="bold">Example #1:</emphasis> </para>\r
112         <programlisting role="example"><![CDATA[\r
113 // Create a simple 2d grid\r
114 x = linspace(-10,2,40);\r
115 y = linspace(-5,5,40);\r
116 [X,Y] = ndgrid(x,y);\r
117 \r
118 // Compute ordinates Z(X,Y) on the {X, Y} grid and plot Z(X,Y)\r
119 Z = X - 3*X.*sin(X).*cos(Y-4) ;\r
120 clf()\r
121 plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()\r
122  ]]></programlisting>\r
123         <scilab:image>\r
124         x = linspace(-10,2,40);\r
125         y = linspace(-5,5,40);\r
126         [X,Y] = ndgrid(x,y);\r
127         Z = X - 3*X.*sin(X).*cos(Y-4) ;\r
128         clf()\r
129         plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()\r
130         </scilab:image>\r
131 \r
132         <para><emphasis role="bold">Example #2:</emphasis> </para>\r
133         <programlisting role="example"><![CDATA[\r
134 // 簡単な3次元グリッドを作成\r
135 nx = 10; ny = 6; nz = 4;\r
136 x = linspace(0,2,nx);\r
137 y = linspace(0,1,ny);\r
138 z = linspace(0,0.5,nz);\r
139 [X,Y,Z] = ndgrid(x,y,z);\r
140 // 3次元グリッドを表示する ...\r
141 XF=[]; YF=[]; ZF=[];\r
142 for k=1:nz\r
143    [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k));\r
144    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];\r
145 end\r
146 for j=1:ny\r
147    [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),...\r
148                      matrix(Y(:,j,:),[nx,nz]),...\r
149                      matrix(Z(:,j,:),[nx,nz]));\r
150    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];\r
151 end\r
152 clf()\r
153 plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")\r
154 xtitle("A 3d grid !"); show_window()\r
155  ]]></programlisting>\r
156         <scilab:image>\r
157             nx = 10; ny = 6; nz = 4;\r
158             x = linspace(0,2,nx);\r
159             y = linspace(0,1,ny);\r
160             z = linspace(0,0.5,nz);\r
161             [X,Y,Z] = ndgrid(x,y,z);\r
162             XF=[]; YF=[]; ZF=[];\r
163             for k=1:nz\r
164             [xf,yf,zf] = nf3d(X(:,:,k),Y(:,:,k),Z(:,:,k));\r
165             XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];\r
166             end\r
167             for j=1:ny\r
168             [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),...\r
169             matrix(Y(:,j,:),[nx,nz]),...\r
170             matrix(Z(:,j,:),[nx,nz]));\r
171             XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];\r
172             end\r
173             plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")\r
174             xtitle("A 3d grid !");\r
175         </scilab:image>\r
176         <para><emphasis role="bold">Example #3: Create a table of digrams:</emphasis> </para>\r
177         <programlisting role="example"><![CDATA[  \r
178 [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])\r
179 c1+c2\r
180  ]]></programlisting>\r
181     <screen>\r
182 <![CDATA[--> [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])\r
183  c2  = \r
184 !a  b  c  d  e  f  g  h  !\r
185 !a  b  c  d  e  f  g  h  !\r
186 !a  b  c  d  e  f  g  h  !\r
187 \r
188  c1  = \r
189 !a  a  a  a  a  a  a  a  !\r
190 !b  b  b  b  b  b  b  b  !\r
191 !c  c  c  c  c  c  c  c  !\r
192 \r
193 --> c1+c2\r
194  ans  =\r
195 !aa  ab  ac  ad  ae  af  ag  ah  !\r
196 !ba  bb  bc  bd  be  bf  bg  bh  !\r
197 !ca  cb  cc  cd  ce  cf  cg  ch  !\r
198 ]]></screen>\r
199         </refsection>\r
200     <refsection role="see also">\r
201         <title>参照</title>\r
202         <simplelist type="inline">\r
203             <member>\r
205             </member>\r
206             <member>\r
208             </member>\r
209             <member>\r
211             </member>\r
212             <member>\r
214             </member>\r
215             <member>\r
217             </member>\r
218         </simplelist>\r
219     </refsection>\r
220     <refsection role="history">\r
221         <title>履歴</title>\r
222         <revhistory>\r
223             <revision>\r
224                 <revnumber>6.0</revnumber>\r
225                 <revdescription>Extension to all homogeneous datatypes ([], booleans, encoded integers, polynomials, rationals, strings). Revision of the help page.\r
226                 </revdescription>\r
227             </revision>\r
228         </revhistory>\r
229     </refsection>\r
230 </refentry>