9e2fd1d8a4d32820145ce32d0eb90e0cfc121e61
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / elementarymatrices / ndgrid.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
3           xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
4           xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
5           xmlns:scilab="http://www.scilab.org" xml:id="ndgrid" xml:lang="ru">
6 <refnamediv>
7     <refname>ndgrid</refname>
8     <refpurpose>строит матрицы или N-мерные массивы путем репликации данных векторов
9     </refpurpose>
10 </refnamediv>
11 <refsynopsisdiv>
12     <title>Синтаксис</title>
13     <synopsis>
14         [X, Y] = ndgrid(x)
15         [X, Y] = ndgrid(x,y)
16         [X, Y, Z] = ndgrid(x,y,z)
17         [X, Y, Z, T] = ndgrid(x,y,z,t)
18         [X1, X2, ..., Xm] = ndgrid(x1,x2,...,xm)
19     </synopsis>
20 </refsynopsisdiv>
21 <refsection role="arguments">
22     <title>Аргументы</title>
23     <variablelist>
24         <varlistentry>
25             <term>x, y, z, ...</term>
26             <listitem>
27                 <para>векторы любых типов данных. Они могут иметь различные типы данных.
28                 По умолчанию <literal>y=x</literal>.</para>
29             </listitem>
30         </varlistentry>
31         <varlistentry>
32             <term>X, Y, Z, ...</term>
33                 <listitem>
34                     <para>
35                         В случае двух входных аргументов это матрицы, в противном случае это гиперматрицы.
36                         Все они имеют одинаковые размеры: <literal>size(x,"*")</literal> строк, <literal>size(y,"*")</literal>
37                         столбцов, <literal>size(z,"*")</literal> слоёв и так далее.
38                   </para>
39                   <para>
40                         Они имеют одинаковые типы данных соответствющих входных векторов:
41                         <literal>typeof(X)==typeof(x)</literal>,
42                         <literal>typeof(Y)==typeof(y)</literal>, и т.д.
43                     </para>
44                 </listitem>
45         </varlistentry>
46     </variablelist>
47 </refsection>
48 <refsection role="description">
49     <title>Описание</title>
50     <para>
51         Первое применение функции <function>ndgrid</function> заключается в построении сетки
52         узлов, формирующих двумерное, трёхмерное или N-мерное пространство в соответствии с
53         2, 3  и более наборами <varname>x</varname>, <varname>y</varname> и т.д. координат
54         "шаблона" продискретизированных вдоль каждого направления/размерности пространства,
55         которое вы желаете сформировать.
56     </para>
57     <para>
58         Следовательно, матрица или гиперматрица <varname>X</varname> сделана через копирование
59         вектора <varname>x</varname> по столбцам; матрица или гиперматрица <varname>Y</varname>
60         сделана через копирование вектора <varname>y</varname> по строкам; матрица <varname>Z</varname>
61         сделана через копирование вектора <varname>z</varname> по всем слоям (третье измерение);
62         и т.д
63    </para>
64     <screen><![CDATA[--> [X, Y] = ndgrid([1 3 4], [0 2 4 6])
65  X  =
66    1.   1.   1.   1.
67    3.   3.   3.   3.
68    4.   4.   4.   4.
69
70  Y  =
71    0.   2.   4.   6.
72    0.   2.   4.   6.
73    0.   2.   4.   6.
74 ]]></screen>
75     <para>
76         Эта схема копирования может быть обобщена к любому числу измерений, а также
77         к любому типу универсальных данных. Давайте, например, возьмём 2 атрибута:
78         <orderedlist>
79             <listitem>Первый - это число, которое нужно выбрать из вектора, скажем
80                 <literal>n = [ 3 7 ]</literal>
81             </listitem>
82             <listitem>Второй - это буква, которую нужно выбрать из вектора, скажем
83                 <literal>c = ["a" "e" "i" "o" "u" "y"]</literal>
84             </listitem>
85         </orderedlist>
86         Тогда мы хотим построить множество всех <literal>{n,c}</literal> возможных пар.
87         Это будет просто двумерная сетка:
88     </para>
89     <screen><![CDATA[--> [N, C] = ndgrid([3 7],["a" "e" "i" "o" "u" "y"])
90  C  =
91 !a  e  i  o  u  y  !
92 !a  e  i  o  u  y  !
93
94  N  =
95    3.   3.   3.   3.   3.   3.
96    7.   7.   7.   7.   7.   7.
97 ]]></screen>
98     <para>
99         Тогда <literal>object(i,j)</literal> будет иметь свойства <literal>{n(i) c(j)}</literal>,
100         которые темер могут быть адресованы как <literal>{N(i,j) C(i,j)}</literal>.
101         Такой вид сетки может быть полезен для инициализации массива структур.
102     </para>
103     <para>
104         Следующие примеры показывают как использовать <varname>X, Y, Z</varname> в
105         наиболее распространёных приложениях
106     </para>
107 </refsection>
108 <refsection role="examples">
109     <title>Примеры</title>
110     <para>
111         <emphasis role="bold">Пример #1:</emphasis>
112     </para>
113     <programlisting role="example"><![CDATA[
114 // создание простой двухмерной координатной сетки
115 x = linspace(-10,2,40);
116 y = linspace(-5,5,40);
117 [X,Y] = ndgrid(x,y);
118
119 // Compute ordinates Z(X,Y) on the {X, Y} grid and plot Z(X,Y)
120 Z = X - 3*X.*sin(X).*cos(Y-4) ;
121
122 clf()
123 plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()
124  ]]>    </programlisting>
125     <scilab:image>
126         x = linspace(-10,2,40);
127         y = linspace(-5,5,40);
128         [X,Y] = ndgrid(x,y);
129         Z = X - 3*X.*sin(X).*cos(Y-4) ;
130         clf()
131         plot3d(x,y,Z, flag=[color("green") 2 4], alpha=7, theta=60); show_window()
132     </scilab:image>
133     <para>
134         <emphasis role="bold">Пример #2:</emphasis>
135     </para>
136     <programlisting role="example"><![CDATA[
137 // создание простой трёхмерной координатной сетки
138 nx = 10; ny = 6; nz = 4;
139 x = linspace(0,2,nx);
140 y = linspace(0,1,ny);
141 z = linspace(0,0.5,nz);
142 [X,Y,Z] = ndgrid(x,y,z);
143
144 // попытаемся отобразить эту трёхмерную координатную сетку ...
145 XF=[]; YF=[]; ZF=[];
146 for k=1:nz
147    [xf,yf,zf] = nf3d(X(:,:,k), Y(:,:,k), Z(:,:,k));
148    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
149 end
150 for j=1:ny
151    [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),..
152                      matrix(Y(:,j,:),[nx,nz]),..
153                      matrix(Z(:,j,:),[nx,nz]));
154    XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
155 end
156
157 clf()
158 plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")
159 xtitle("Трёхмерная сетка!"); show_window()
160  ]]></programlisting>
161     <scilab:image localized="true">
162         nx = 10; ny = 6; nz = 4;
163         x = linspace(0,2,nx);
164         y = linspace(0,1,ny);
165         z = linspace(0,0.5,nz);
166         [X,Y,Z] = ndgrid(x,y,z);
167         XF=[]; YF=[]; ZF=[];
168         for k=1:nz
169         [xf,yf,zf] = nf3d(X(:,:,k), Y(:,:,k), Z(:,:,k));
170         XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
171         end
172         for j=1:ny
173         [xf,yf,zf] = nf3d(matrix(X(:,j,:),[nx,nz]),..
174         matrix(Y(:,j,:),[nx,nz]),..
175         matrix(Z(:,j,:),[nx,nz]));
176         XF = [XF xf]; YF = [YF yf]; ZF = [ZF zf];
177         end
178         clf()
179         plot3d(XF,YF,ZF, flag=[0 6 3], 66, 61, leg="X@Y@Z")
180         xtitle("Трёхмерная сетка!"); show_window()
181     </scilab:image>
182     <para>
183         <emphasis role="bold">Пример #3: Создание таблицы пар символов:</emphasis>
184     </para>
185     <programlisting role="example"><![CDATA[
186 [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])
187 c1+c2
188  ]]>    </programlisting>
189     <screen><![CDATA[--> [c1, c2] = ndgrid(["a" "b" "c"], ["a" "b" "c" "d" "e" "f" "g" "h"])
190  c2  =
191 !a  b  c  d  e  f  g  h  !
192 !a  b  c  d  e  f  g  h  !
193 !a  b  c  d  e  f  g  h  !
194
195  c1  =
196 !a  a  a  a  a  a  a  a  !
197 !b  b  b  b  b  b  b  b  !
198 !c  c  c  c  c  c  c  c  !
199
200 --> c1+c2
201  ans  =
202 !aa  ab  ac  ad  ae  af  ag  ah  !
203 !ba  bb  bc  bd  be  bf  bg  bh  !
204 !ca  cb  cc  cd  ce  cf  cg  ch  !
205 ]]></screen>
206 </refsection>
207 <refsection role="see also">
208     <title>Смотрите также</title>
209     <simplelist type="inline">
210         <member>
211             <link linkend="meshgrid">meshgrid</link>
212         </member>
213         <member>
214             <link linkend="kron">kron</link>
215         </member>
216         <member>
217             <link linkend="feval">feval</link>
218         </member>
219         <member>
220             <link linkend="eval3d">eval3d</link>
221         </member>
222         <member>
223             <link linkend="nf3d">nf3d</link>
224         </member>
225     </simplelist>
226 </refsection>
227 <refsection role="history">
228     <title>История</title>
229     <revhistory>
230         <revision>
231             <revnumber>6.0.0</revnumber>
232             <revdescription>
233               Расширение до всех однородных типов данных ([], логические, закодированные целые числа,
234               многочлены, дроби, строковые значения). Пересмотр  этой странички справки.
235             </revdescription>
236         </revision>
237         <revision>
238             <revnumber>6.0.1</revnumber>
239             <revdescription>
240                 <literal>ndgrid(x)</literal> теперь принимает по умолчанию <literal>y=x</literal>.
241             </revdescription>
242         </revision>
243     </revhistory>
244 </refsection>
245 </refentry>