* Bug 15431 fixed [doc]: empty [] better documented
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / elementarymatrices / empty.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) 2012 - 2016 - Scilab Enterprises
5  * Copyright (C) 2019 - Samuel GOUGEON
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  -->
15 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
16           xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
17           xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
18           xml:lang="ru" xml:id="empty">
19     <refnamediv>
20         <refname>пустая матрица []</refname>
21         <refpurpose>пустая матрица. Деструктор диапазонов массива.</refpurpose>
22     </refnamediv>
23     <refsection>
24         <title>Содержание</title>
25         <simplelist type="inline">
26             <member>
27                 <link linkend="empty_general_properties">Общие свойства [ ]</link>
28             </member>
29             <member>
30                 <link linkend="empty_operand_or_argument">[ ] в качестве операнда или входного аргумента</link>
31             </member>
32             <member>
33                 <link linkend="empty_assigned_as_destructor">[ ] в качестве деструктора диапазонов</link>
34             </member>
35             <member>
36                 <link linkend="empty_examples">Примеры</link>
37             </member>
38             <member>
39                 <link linkend="empty_seealso">Смотрите также</link>
40             </member>
41             <member>
42                 <link linkend="empty_history">История</link>
43             </member>
44         </simplelist>
45     </refsection>
46     <refsection>
47         <title>Описание</title>
48         <refsect3 id="empty_general_properties">
49             <title>Общие свойства [ ]</title>
50             <para>
51             Пустые квадратные скобки <literal>[]</literal> представляют пустую матрицу. Опишем её общие свойства.
52             </para>
53             <orderedlist>
54                 <listitem>
55                     <para>
56                     Она имеет лишь две размерности. Любая размерность больше двух автоматически сокращается:
57                     <screen><![CDATA[
58 --> e = ones(1,2,0,2); size(e)
59  ans  =
60    0.   0.
61 --> e == []
62  ans  =
63   T
64 ]]></screen>
65                     </para>
66                 </listitem>
67                 <listitem>
68                     <para>
69                     Она всегда вещественного десятичного типа. Нет пустых матриц ни целочисленного типа
70                     (int8, uint8, int16, uint16, int32, uint32, int64, uint64), ни строкового типа, и т.д.:
71                     <screen><![CDATA[
72 --> type(uint8([]))  // не типа 8 (кодированные целые числа)
73  ans  =
74    1.
75 --> a = [1 2 ; 3 4] + %i;
76 --> a(1,:) = []
77  a  =
78    3. + i     4. + i
79 --> a(1,:) = [], isreal(a)
80  a  =
81     []
82  ans  =
83   T
84 --> t = "abcd efg", type(t)
85  t  =
86  abcd efg
87  ans  =
88    10.
89 --> t(1) = [], type(t)
90  t  =
91     []
92  ans  =
93    1.
94 ]]></screen>
95                     </para>
96                 </listitem>
97                 <listitem>
98                     <para>
99                     Однако она всегда отличается от разрежённой пустой матрицы:
100                     <screen><![CDATA[
101 --> se = sparse([])
102  se  =
103 (  0,  0) zero sparse matrix
104 --> size(se)
105  ans  =
106    0.   0.
107 --> se == []
108  ans  =
109   F
110 ]]></screen>
111                     </para>
112                 </listitem>
113                 <listitem>
114                     <para>
115                     Она также отличается от всех пустых разнотипных контейнеров
116                     <literal>list()</literal>, <literal>struct()</literal> или
117                     <literal>cell()</literal> :
118                     <screen><![CDATA[
119 --> L = list()
120  L  =
121      ()
122 --> L == []
123  ans  =
124   F
125 --> s = struct()
126  s  =
127 0x0 struct array with no fields.
128 --> s == []
129  ans  =
130   F
131 --> c = cell()
132  c  =
133    {}
134 --> c == []
135  ans  =
136   F
137 ]]></screen>
138                     </para>
139                 </listitem>
140             </orderedlist>
141         </refsect3>
142         <refsect3 id="empty_operand_or_argument">
143             <title>[ ] в качестве операнда или входного аргумента</title>
144             <orderedlist>
145                 <listitem>
146                     <para>
147                     В качестве операнда обычных предопределённых небулевых операторов [] устанавливает результат равным [].
148                     <emphasis>Все следующие операции дают</emphasis> []:
149                     <table>
150                         <tr><td colspan="2"><emphasis role="bold">Унарные операторы</emphasis></td></tr>
151                         <tr><td colspan="2">[]', [].', -[],  ~[]</td></tr>
152                         <tr><td></td><td></td></tr>
153                         <tr><td colspan="2"><emphasis role="bold">Binary numerical operators</emphasis></td></tr>
154                         <tr><td>суммирование:</td>      <td> [] + [1 2], [1 2] + []</td></tr>
155                         <tr><td>вычитание:</td>   <td> [] - [1 2], [1 2] - []</td></tr>
156                         <tr><td>деление:</td>      <td> []/[1 2], []./[1 2], [1 2]/[], [1 2]./[]</td></tr>
157                         <tr><td>левое деление:</td> <td> []\[1 2], [].\[1 2], [1 2]\[], [1 2].\[]</td></tr>
158                         <tr><td>умножение:</td><td> []*[1 2], [].*[1 2], [1 2]*[], [1 2].*[]</td></tr>
159                         <tr><td>кронекер:</td>     <td> [].*.[1 2], [1 2].*.[]</td></tr>
160                         <tr><td>степень:</td>         <td> []^[1 2], [].^[1 2], [1 2]^[], [1 2].^[]</td></tr>
161                         <tr><td></td><td></td></tr>
162                         <tr><td colspan="2"><emphasis role="bold">Сравнение на неравенство</emphasis></td></tr>
163                         <tr><td>больше:</td><td> []>[1 2], []>=[1 2], [1 2]>[], [1 2]>=[]</td></tr>
164                         <tr><td>меньше:</td><td> []&lt;[1 2], []&lt;=[1 2], [1 2]&lt;[], [1 2]&lt;=[]</td></tr>
165                     </table>
166                     </para>
167                 </listitem>
168                 <listitem>
169                     <para>
170                     В качестве операнда булевых бинарных операторов [] <emphasis>эквивалентна %T</emphasis>:
171                     <table>
172                         <tr><td colspan="4"><emphasis role="bold">Двоичные числовые операторы</emphasis></td></tr>
173                         <tr><td>или:</td> <td> [] | [%T %F], [%T %F] | []        </td><td>→</td><td>[%T %T]</td></tr>
174                         <tr><td>и:</td><td> [] &amp; [%T %F], [%T %F] &amp; []</td><td>→</td><td>[%T %F]</td></tr>
175                     </table>
176                     </para>
177                     Но обратите внимание:
178                     <itemizedlist>
179                         <listitem>
180                             <para>
181                                 <literal>or([])</literal> равно %F.
182                             </para>
183                         </listitem>
184                         <listitem>
185                             <para>
186                                 В качестве условия любого <literal>if</literal> или <literal>while</literal>,
187                                 [] равна %F:
188                                 <screen><![CDATA[
189 --> if []
190 -->     r = "[] равно %T в любом условии if";
191 --> else
192 -->     r = "[] равно %F в любом условии if";
193 --> end
194 --> r
195  r  =
196  [] равно %F в любом условии if
197 ]]></screen>
198                             </para>
199                         </listitem>
200                     </itemizedlist>
201                 </listitem>
202                 <listitem>
203                     <para>
204                     При конкатенации [] просто игнорируется:
205                     <literal>[A,[]] == [[],A] == [A ; []] == [[] ; A] == A</literal>
206                     </para>
207                 </listitem>
208                 <listitem>
209                     <para>
210                     При конкатенации текста <literal>+[]</literal> даёт []:
211                     <literal>[]+["a" "bc"] == ["a" "bc"]+[] == []</literal>
212                     </para>
213                 </listitem>
214                 <listitem>
215                     <para>
216                         В качестве специальной входной матрицы функций линейной алгебры или общих функций
217                         ответ зависит от конкретной функции. Он документируется на странице справки для
218                         каждой функции. Например:
219                     </para>
220                     <para>
221                     <table>
222                     <tr>
223                     <td>
224                     <table>
225                         <tr><td><literal>det([])</literal></td>     <td><literal>1</literal></td></tr>
226                         <tr><td><literal>rank([])</literal></td>    <td><literal>0</literal></td></tr>
227                         <tr><td><literal>trace([])</literal></td>   <td><literal>0</literal></td></tr>
228                         <tr><td><literal>norm([])</literal></td>    <td><literal>0</literal></td></tr>
229                         <tr><td><literal>cond([])</literal></td>    <td><literal>0</literal></td></tr>
230                         <tr><td><literal>rcond([])</literal></td>   <td><literal>Inf</literal></td></tr>
231                     </table>
232                     </td>
233                     <td></td>
234                     <td>
235                     <table>
236                         <tr><td><literal>diag([])</literal></td>    <td><literal>[]</literal></td></tr>
237                         <tr><td><literal>tril([])</literal></td>    <td><literal>[]</literal></td></tr>
238                         <tr><td><literal>triu([])</literal></td>    <td><literal>[]</literal></td></tr>
239                         <tr><td><literal>min([])</literal></td>     <td><literal>[]</literal></td></tr>
240                         <tr><td><literal>max([])</literal></td>     <td><literal>[]</literal></td></tr>
241                         <tr><td><literal>sign([])</literal></td>    <td><literal>[]</literal></td></tr>
242                         <tr><td><literal>clean([])</literal></td>   <td><literal>[]</literal></td></tr>
243                         <tr><td><literal>svd([])</literal></td>     <td><literal>[]</literal></td></tr>
244                     </table>
245                     </td>
246                     <td></td>
247                     <td>
248                     <table>
249                         <tr><td><literal>sum([])</literal></td>     <td><literal>0</literal></td></tr>
250                         <tr><td><literal>prod([])</literal></td>    <td><literal>1</literal></td></tr>
251                         <tr><td><literal>mean([])</literal></td>    <td><literal>Nan</literal></td></tr>
252                         <tr><td><literal>median([])</literal></td>  <td><literal>Nan</literal></td></tr>
253                         <tr><td><literal>stdev([])</literal></td>   <td><literal>Nan</literal></td></tr>
254                         <tr><td><literal>mad([])</literal></td>     <td><literal>Nan</literal></td></tr>
255                         <tr><td><literal>variance([])</literal></td><td><literal>Nan</literal></td></tr>
256                     </table>
257                     </td>
258                     </tr>
259                     </table>
260                     </para>
261                 </listitem>
262                 <listitem>
263                     <para>
264                         В качестве входного аргумента функций [] часто используется для выбора значения
265                         по умолчанию входного аргумента (чтобы как-то пропусть его, избежать указания 
266                         фактического конкретного значения). Однако это не жёсткое правило.
267                     </para>
268                 </listitem>
269                 <!--
270                 <listitem>
271                     <para>
272                         Пустая линейная система (списки <literal> syslin</literal>) может иметь несколько
273                         строк или столбцов.
274                         w=ssrand(2,2,2);
275                         wr=[]*w;
276                         size(wr), w1=ss2tf(wr), size(w1)
277                     </para>
278                 </listitem>
279                 -->
280             </orderedlist>
281         </refsect3>
282         <refsect3 id="empty_assigned_as_destructor">
283             <title>Использование [ ] для удаления диапазонов в массивах</title>
284         </refsect3>
285         <para>
286             Что касается массива любого количества размерностей и любого размера, который может быть
287             матрицей или гиперматрицей любого типа данных, массивом структура или cell-массивом, то
288             [] может использоваться для удаления указанного диапазона (строк, столбцов и т.д.). Это
289             указание должно перекрывать полный размер массива по крайней мере вдоль одной из его
290             размерностей.
291         </para>
292         <para>Примеры:</para>
293         <para>С матрицей десятичных чисел:</para>
294         <programlisting role="example"><![CDATA[
295 a = grand(3,5,"uin",0,9)
296      ]]></programlisting>
297         <screen><![CDATA[
298 --> a = grand(3,5,"uin",0,9)
299  a  =
300    2.   4.   8.   0.   9.
301    2.   1.   3.   6.   4.
302    4.   9.   5.   9.   7.
303 --> a(:,[3 5]) = []
304  a  =
305    2.   4.   0.
306    2.   1.   6.
307    4.   9.   9.
308 --> a(2,:) = []
309  a  =
310    2.   4.   0.
311    4.   9.   9.
312 ]]></screen>
313         <para>
314             С гиперматрицей текстовых значений:
315         </para>
316         <programlisting role="example"><![CDATA[
317 cs = cumsum(grand(2,4,3,"uin",1,3));
318 t = matrix(strsplit(ascii(grand(1,cs($),"uin",ascii("a"),ascii("c"))),cs(1:$-1)),2,4,3)
319      ]]></programlisting>
320         <screen><![CDATA[
321 --> cs = cumsum(grand(2,4,3,"uin",1,3));
322 --> t = matrix(strsplit(ascii(grand(1,cs($),"uin",ascii("a"),ascii("c"))),cs(1:$-1)),2,4,3)
323  t  =
324 (:,:,1)
325 !ccc  b    b   b  !
326 !bbb  bcc  bc  c  !
327 (:,:,2)
328 !aa  aab  bc  a   !
329 !ab  a    cc  ba  !
330 (:,:,3)
331 !c   aba  c    abb  !
332 !bc  cc   acb  c    !
333 --> t(:,3,:) = []  // Удаление всех третьих столбцов
334  t  =
335 (:,:,1)
336 !ccc  b    b  !
337 !bbb  bcc  c  !
338 (:,:,2)
339 !aa  aab  a   !
340 !ab  a    ba  !
341 (:,:,3)
342 !c   aba  abb  !
343 !bc  cc   c    !
344 --> t(:,:,2) = []   // Удаление второй страницы
345  t  =
346 (:,:,1)
347 !ccc  b    b  !
348 !bbb  bcc  c  !
349 (:,:,2)
350 !c   aba  abb  !
351 !bc  cc   c    !
352 ]]></screen>
353         <para>
354             С cell-массивами:
355         </para>
356         <programlisting role="example"><![CDATA[
357 c = cat(3, {"start", -1.23, %f  ; (1-%s)^2, gda(), list(2,,%z)}, ..
358            {%t     , "abc", 5.2 ; int8(21), []   , %z})
359      ]]></programlisting>
360         <screen><![CDATA[
361 --> c = cat(3, {"start", -1.23, %f  ; (1-%s)^2, gda(), list(2,,%z)}, ..
362                {%t     , "abc", 5.2 ; int8(21), []   , %z})
363  c  =
364 (:,:,1)
365   [1x1 string    ]  [1x1 constant]  [1x1 boolean]
366   [1x1 polynomial]  [1x1 handle  ]  [    list   ]
367 (:,:,2)
368   [1x1 boolean]  [1x1 string  ]  [1x1 constant  ]
369   [1x1 int8   ]  [0x0 constant]  [1x1 polynomial]
370 --> c(:,2,:) = []                   // Удаление всех вторых столбцов
371  c  =
372 (:,:,1)
373   [1x1 string    ]  [1x1 boolean]
374   [1x1 polynomial]  [    list   ]
375 (:,:,2)
376   [1x1 boolean]  [1x1 constant  ]
377   [1x1 int8   ]  [1x1 polynomial]
378 --> c(1,:,:) = []                   // Удаление всех первых строк
379  c  =
380 (:,:,1)
381   [1x1 polynomial]  [ list]
382 (:,:,2)
383   [1x1 int8]  [1x1 polynomial]
384 ]]></screen>
385         <para>
386             С массивом структур:
387         </para>
388         <screen><![CDATA[
389 --> s(4,5).r = %pi;
390 --> s.b = %t
391  s  =
392 4x5 struct array with fields:
393    r
394    b
395 --> s([1 3],:) = []
396  s  =
397 2x5 struct array with fields:
398    r
399    b
400 --> s(:,2) = []
401  s  =
402 2x4 struct array with fields:
403    r
404    b
405 ]]></screen>
406     </refsection>
407     <refsection id="empty_examples">
408         <title>Другие примеры</title>
409         <programlisting role="example"><![CDATA[
410 type(string([]))
411 [type(int8([])) , type(int16([])) , type(int32([])) , type(int64([]))]
412 [type(uint8([])), type(uint16([])), type(uint32([])), type(uint64([]))]
413 [] * %F
414      ]]></programlisting>
415         <screen><![CDATA[
416 --> type(string([]))
417  ans  =
418    1.
419 --> [type(int8([])) , type(int16([])) , type(int32([])) , type(int64([]))]
420  ans  =
421    1.   1.   1.   1.
422 --> [type(uint8([])), type(uint16([])), type(uint32([])), type(uint64([]))]
423  ans  =
424    1.   1.   1.   1.
425 --> [] * %F
426  ans  =
427     []
428 ]]></screen>
429         <para/>
430         <programlisting role="example"><![CDATA[
431 A = [%s-1, %s^2]
432 A + []
433 A - []
434 A * []
435      ]]></programlisting>
436         <screen><![CDATA[
437 --> A = [%s-1, %s^2]
438  A  =
439            2
440   -1 +s   s
441 --> A + []
442  ans  =
443     []
444 --> A - []
445  ans  =
446     []
447 --> A * []
448  ans  =
449     []
450 ]]></screen>
451         <para/>
452         <programlisting role="example"><![CDATA[
453 string([]) == []
454 ["a" "bc"] + []
455 [] + ["a" "bc"]
456      ]]></programlisting>
457         <screen><![CDATA[
458 --> string([]) == []
459  ans  =
460   T
461 --> ["a" "bc"] + []
462  ans  =
463     []
464 --> [] + ["a" "bc"]
465  ans  =
466     []
467 ]]></screen>
468         <para/>
469         <programlisting role="example"><![CDATA[
470 A = rand(2,2);
471 A([],:)
472      ]]></programlisting>
473         <screen><![CDATA[
474 --> A = rand(2,2);
475 --> A([],:)
476  ans  =
477     []
478 ]]></screen>
479         <para/>
480         <programlisting role="example"><![CDATA[
481 [det([]) rank([]) trace([]) norm([]) cond([]) rcond([])]
482      ]]></programlisting>
483         <screen><![CDATA[
484 --> [det([]) rank([]) trace([]) norm([]) cond([]) rcond([])]
485  ans  =
486    1.   0.   0.   0.   0.   Inf
487 ]]></screen>
488         <para/>
489         <programlisting role="example"><![CDATA[
490 [sum([]) prod([]) mean([]) median([]) stdev([]) mad([])]
491      ]]></programlisting>
492         <screen><![CDATA[
493 --> [sum([]) prod([]) mean([]) median([]) stdev([]) mad([])]
494  ans  =
495    0.   1.   Nan   Nan   Nan   Nan
496 ]]></screen>
497     </refsection>
498     <refsection role="see also" id="empty_seealso">
499         <title>Смотрите также</title>
500         <simplelist type="inline">
501             <member>
502                 <link linkend="null">null</link>
503             </member>
504             <member>
505                 <link linkend="isempty">isempty</link>
506             </member>
507             <member>
508                 <link linkend="emptystr">emptystr</link>
509             </member>
510             <member>
511                 <link linkend="brackets">brackets</link>
512             </member>
513             <member>
514                 <link linkend="symbols">operators</link>
515             </member>
516             <member>
517                 <link linkend="matrices">matrices</link>
518             </member>
519             <member>
520                 <link linkend="oldEmptyBehaviour">oldEmptyBehaviour</link>
521             </member>
522             <member>
523                 <link linkend="insertion">insertion</link>
524             </member>
525         </simplelist>
526     </refsection>
527     <refsection id="empty_history">
528         <title>История</title>
529         <revhistory>
530             <revision>
531                 <revnumber>6.0.0</revnumber>
532                 <revremark>
533                     <itemizedlist>
534                       <listitem>
535                           <literal>A+[]</literal>, <literal>[]+A</literal> и <literal>A-[]</literal>
536                           теперь возвращают <literal>[]</literal> вместо <literal>A</literal>.
537                           <literal>[]-A</literal> теперь возвращают <literal>[]</literal> вместо
538                           <literal>-A</literal>.
539                       </listitem>
540                       <listitem>
541                          <literal> A>[] </literal>, <literal> A>=[] </literal>,
542                          <literal> A&lt;[] </literal>, <literal> A&lt;=[] </literal>,
543                          <literal> []>A </literal>, <literal> []>=A </literal>,
544                          <literal> []&lt;A </literal> и <literal> []&lt;=A </literal> теперь возвращают
545                          <literal> [] </literal> вместо ошибки.
546                       </listitem>
547                     </itemizedlist>
548                 </revremark>
549             </revision>
550         </revhistory>
551     </refsection>
552 </refentry>
553