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