elementary_functions: fix rand() with a single key letter after 02f1f9cd
[scilab.git] / scilab / modules / elementary_functions / help / ru_RU / elementarymatrices / random / rand.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) 2008 - INRIA
5  * Copyright (C) 2011 - DIGITEO - Michael Baudin
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  -->
17 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
18           xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml"
19           xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook"
20           xmlns:scilab="http://www.scilab.org" xml:id="rand" xml:lang="ru">
21     <refnamediv>
22         <refname>rand</refname>
23         <refpurpose>Случайные числа</refpurpose>
24     </refnamediv>
25     <refsynopsisdiv>
26         <title>Синтаксис</title>
27         <synopsis>
28             r = rand()
29             r = rand(m1,m2,...)
30             r = rand(m1,m2,...,key)
31             r = rand(x)
32             r = rand(x,key)
33
34             s = rand("seed")
35             rand("seed",s)
36
37             rand(key)
38             key = rand("info")
39         </synopsis>
40     </refsynopsisdiv>
41     <refsection>
42         <title>Аргументы</title>
43         <variablelist>
44             <varlistentry>
45                 <term>m1, m2, ...</term>
46                 <listitem>
47                     <para>
48                         целые числа, размер матрицы случайных чисел <literal>r</literal>.
49                     </para>
50                 </listitem>
51             </varlistentry>
52             <varlistentry>
53                 <term>key</term>
54                 <listitem>
55                     <para>
56                         строка, распределение случайных чисел (по умолчанию
57                         <literal>key="uniform"</literal>). Доступными значениями являются:
58                         <itemizedlist>
59                         <listitem>
60                         <literal>"uniform"</literal> (равновероятный) или <literal>"u"</literal>
61                         </listitem>
62                         <listitem>
63                         <literal>"normal"</literal> (нормальный) или <literal>"n"</literal>
64                         </listitem>
65                         </itemizedlist>
66                     </para>
67                 </listitem>
68             </varlistentry>
69             <varlistentry>
70                 <term>x</term>
71                 <listitem>
72                     <para>
73                         вещественная или комплексная матрица. Рассматриваются только её
74                         вещественное или комплексное содержимое и её размеры.
75                     </para>
76                 </listitem>
77             </varlistentry>
78             <varlistentry>
79                 <term>r</term>
80                 <listitem>
81                     <para>
82                         вещественный массив чисел двойной точности (double) размером
83                         m1 на m2 на ... со случайными элементами.
84                     </para>
85                 </listitem>
86             </varlistentry>
87             <varlistentry>
88                 <term>s</term>
89                 <listitem>
90                     <para>
91                         матрица чисел двойной точности размером  1 на 1, целочисленное значение,
92                         положительное, семя генератора случайных чисел (по умолчанию <literal>s=0</literal>).
93                     </para>
94                 </listitem>
95             </varlistentry>
96         </variablelist>
97     </refsection>
98     <refsection>
99         <title>Описание</title>
100         <para>
101             Назначение данной функции в том, чтобы возвращать матрицу чисел двойной точности со
102             случайными вещественными или комплексными элементами. В зависимости от входных аргументов,
103             функция может возвращать матрицу случайных чисел двойной точности или может получать
104             или устанавливать закон распределения случайных чисел, или может получать или
105             устанавливать семя генератора случайных чисел.
106         </para>
107     </refsection>
108     <refsection>
109         <title>Генерация случайных чисел</title>
110         <variablelist>
111             <varlistentry>
112                 <term>r=rand()</term>
113                 <listitem>
114                     <para>
115                         возвращает матрицу чисел двойной точности размером 1 на 1 с одним случайным
116                         значением.
117                     </para>
118                 </listitem>
119             </varlistentry>
120             <varlistentry>
121                 <term>r=rand(m1,m2)</term>
122                 <listitem>
123                     <para>
124                         это матрица случайных чисел размером <literal>m1</literal> на <literal>m2</literal>.
125                     </para>
126                 </listitem>
127             </varlistentry>
128             <varlistentry>
129                 <term>r=rand(m1,m2,...,mn)</term>
130                 <listitem>
131                     <para>
132                         возвращает матрицу случайных чисел размером <literal>m1</literal> на
133                         <literal>m2</literal> на ... на <literal>mn</literal>.
134                     </para>
135                 </listitem>
136             </varlistentry>
137             <varlistentry>
138                 <term>r=rand(a)</term>
139                 <listitem>
140                     <para>
141                         возвращает матрицу случайных чисел того же размера, что и <literal>a</literal>.
142                         Матрица <literal>r</literal> является вещественной, если  <literal>a</literal>
143                         является вещественной и  <literal>r</literal> является комплексной,
144                         если <literal>a</literal> является комплексной матрицей.
145                     </para>
146                 </listitem>
147             </varlistentry>
148         </variablelist>
149     </refsection>
150     <refsection>
151         <title>Смена закона распределения случайных чисел</title>
152         <para>
153             Входной аргумент <literal>key</literal> устанавливает закон распределения генерируемых
154             случайных чисел.
155         </para>
156         <variablelist>
157             <varlistentry>
158                 <term>rand("uniform")</term>
159                 <listitem>
160                     <para>
161                         устанавливает генератор случайных чисел на генерацию случайных чисел по
162                         равновероятному закону. Случайные числа равномерно распределены на интервале
163                         [0,1).
164                     </para>
165                 </listitem>
166             </varlistentry>
167             <varlistentry>
168                 <term>rand("normal")</term>
169                 <listitem>
170                     <para>
171                         устанавливает генератор случайных чисел на генерацию случайных чисел по
172                         нормальному (Гаусс-Лапласовскому) закону распределения, с
173                         математическим ожиданием 0 и дисперсией 1.
174                     </para>
175                 </listitem>
176             </varlistentry>
177             <varlistentry>
178                 <term>key=rand("info")</term>
179                 <listitem>
180                     <para>
181                         возвращает текущий закон распределения генератора случайных чисел
182                         ("uniform" для равновероятного или "normal" для нормального).
183                     </para>
184                 </listitem>
185             </varlistentry>
186         </variablelist>
187     </refsection>
188     <refsection>
189         <title>Получение или установка семени генератора случайных чисел</title>
190         <para>
191             Есть возможность получить или установить семя генератора случайных чисел.
192         </para>
193         <variablelist>
194             <varlistentry>
195                 <term>s=rand("seed")</term>
196                 <listitem>
197                     <para>возвращает текущее значение семени.</para>
198                 </listitem>
199             </varlistentry>
200             <varlistentry>
201                 <term>rand("seed",s)</term>
202                 <listitem>
203                     <para>
204                         устанавливает семя генератора случайных чисел равным <literal>s</literal>
205                         (по умолчанию <literal>s=0</literal> при первом вызове).
206                     </para>
207                 </listitem>
208             </varlistentry>
209         </variablelist>
210     </refsection>
211     <refsection>
212         <title>Примеры</title>
213         <para>
214             В следующем примере мы генерируем случайные числа двойной точности с различными
215             законами распределения.
216         </para>
217         <programlisting role="example"><![CDATA[
218 // Получим одно случайное число (на основе текущего распределения)
219 r=rand()
220
221 // Получим матрицу размером 4 на 6 (на основе текущего распределения)
222 r=rand(4,6)
223
224 // Получим матрицу размером 4 на 6 со значениями элементов,
225 // распределёнными по равновероятному закону распределения
226 r=rand(4,6,"uniform")
227
228 // Сформируем матрицу случайных чисел того же размера, что и x
229 x=rand(4,4);
230 r=rand(x,"normal")
231
232 // Сформируем массив случайных чисел размером 2 на 2 на 2
233 r=rand(2,2,2)
234  ]]></programlisting>
235         <para>
236             В следующем примере мы изменим закон распределения чисел, генерируемых функцией
237             <literal>rand</literal>. Сначала генерируем числа по нормальному закону распределения,
238             а затем числа но равновероятному закону на интервале [0,1).
239         </para>
240         <programlisting role="example"><![CDATA[
241     // настроим генератор случайных чисел на
242     // нормальный закон распределения
243     rand("normal")
244     r=rand(4,6)
245     // получим текущий закон распределения
246     key=rand("info")
247
248     // настроим генератор случайных чисел на
249     // равновероятный закон распределения
250     rand("uniform")
251     r=rand(4,6)
252     // получим текущий закон распределения
253     key=rand("info")
254     ]]></programlisting>
255         <para>
256             В следующем примере мы сгенерируем матрицу комплексных чисел размером 2 на 3 по
257             нормальному закону распределения.
258         </para>
259         <programlisting role="example"><![CDATA[
260     // формируем матрицу случайных комплексных чисел размером 2 на 3
261     x=rand(2,3)+%i*rand(2,3)
262     // Формируем матрицу случайных комплексных чисел по нормальному
263     // закону распределения того же размера, что и x
264     r=rand(x,"normal")
265     ]]></programlisting>
266         <para>
267             В следующем примере мы построим на графике распределение случайных равновероятных чисел,
268             полученных <literal>rand</literal>.
269         </para>
270         <programlisting role="example"><![CDATA[
271     r=rand(1000,1,"uniform");
272     scf();
273     histplot(10,r);
274     xtitle("Равновероятные числа из rand","X","Частота")
275     ]]></programlisting>
276         <para>
277             В следующем примере мы построим на графике распределение случайных чисел,
278             сгенерированных <literal>rand</literal> по нормальному закону распределения.
279         </para>
280         <programlisting role="example"><![CDATA[
281     r=rand(1000,1,"normal");
282     scf();
283     histplot(10,r);
284     xtitle("Случайные числа по нормальному закону распределения из","X","Частота")
285     ]]></programlisting>
286     </refsection>
287     <refsection>
288         <title>Получение более или менее предсказуемых чисел</title>
289         <para>
290             Генератор псевдослучайных "равновероятных" чисел является детерминированной
291             последовательностью, которая предназначена для воспроизводства независимых одинаково
292             распределённых чисел, равновероятных на интервале [0,1).
293         </para>
294         <para>
295             Для того, чтобы получить повторяемые моделирования, начальное семя генератора случайных
296             чисел равно нулю, так что последовательность будет оставаться одной и той же от одной
297             сессии к другой. Иными словами, начальные числа, производимые <literal>rand()</literal>,
298             всегда: 0.2113249,  0.7560439, ...
299         </para>
300         <para>
301             В некоторых случаях моделирования мы можем захотеть инициализировать семя генератора
302             случайных чисел для того, чтобы получить менее предсказуемые последовательности.
303             В этом случае мы можем инициализировать семя с помощью выходного значения функции
304             <literal>getdate</literal>:
305         </para>
306         <programlisting role="example"><![CDATA[
307 n=getdate("s");
308 rand("seed",n);
309  ]]></programlisting>
310     </refsection>
311     <refsection>
312         <title>Генератор</title>
313         <para>
314             Генератор случайных "равновероятных" чисел описан в работе Майкла А. Малькольма,
315             (Michael A. Malcolm), Клива Б. Молера (Cleve B. Moler) "Urand, A Universal Random Number
316             Generator" (Urand, Универсальный Генератор Случайных Чисел), Stan-Cs-73-334, январь 1973,
317             факультет информатики, кафедра гуманитарных и естественных наук Стенфордского университета.
318         </para>
319         <para>
320             Это линейный конгруэнтный генератор вида:
321         </para>
322         <para>
323              x = (a x + c) mod M
324         </para>
325         <para>
326             где константами являются
327           <table border="0" cellpadding="0">
328              <tr><td>a = 843314861</td></tr>
329              <tr><td>c = 453816693</td></tr>
330              <tr><td>M = 2<superscript>31</superscript></td></tr>
331           </table>
332         </para>
333         <para>
334             Согласно авторам, этот генератор является генератором полной длины, иначе говоря,
335             его период равен M = 2<superscript>31</superscript> = 2147483648.
336         </para>
337         <para>
338             Генератор случайных чисел с нормальным распределением (<literal>"normal"</literal>)
339             основан на методе Бокса-Мюллера, где источником равновероятных случайных чисел является  Urand.
340         </para>
341     </refsection>
342     <refsection>
343         <title>Статистическое качество генератора</title>
344         <para>
345             В функции <link linkend="grand">grand</link> доступны более лучшие генераторы случайных
346             чисел в том смысле, что они имеют как более длинный период, так и более лучшие
347             статистические свойства. В случае, когда качество случайных чисел имеет значение,
348             следует использовать функцию <literal>grand</literal>.
349             Более того, функция <literal>grand</literal> имеет больше возможностей.
350         </para>
351     </refsection>
352     <refsection role="see also">
353         <title>Смотрите также</title>
354         <simplelist type="inline">
355             <member>
356                 <link linkend="grand">grand</link>
357             </member>
358             <member>
359                 <link linkend="ssrand">ssrand</link>
360             </member>
361             <member>
362                 <link linkend="sprand">sprand</link>
363             </member>
364         </simplelist>
365     </refsection>
366 </refentry>