5d5917d37a960bceffd79922f5cf8dcd3fdbebee
[scilab.git] / scilab / modules / randlib / help / ru_RU / grand.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) Jean-Philippe Chancelier and Bruno Pincon
5  * Copyright (C) 2010-2011 - DIGITEO - Michael Baudin
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  -->
14 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"  xml:lang="ru" xml:id="grand">
15     <refnamediv>
16         <refname>grand</refname>
17         <refpurpose>Случайные числа</refpurpose>
18     </refnamediv>
19     <refsynopsisdiv>
20         <title>Последовательность вызова</title>
21         <synopsis>
22             Y = grand(m, n, "bet", A, B)
23             Y = grand(m, n, "bin", N, p)
24             Y = grand(m, n, "nbn", N, p)
25             Y = grand(m, n, "chi", Df)
26             Y = grand(m, n, "nch", Df, Xnon)
27             Y = grand(m, n, "exp", Av)
28             Y = grand(m, n, "f", Dfn, Dfd)
29             Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
30             Y = grand(m, n, "gam", shape, scale)
31             Y = grand(m, n, "nor", Av, Sd)
32             Y = grand(m, n, "geom", p)
33             Y = grand(m, n, "poi", mu)
34             Y = grand(m, n, "def")
35             Y = grand(m, n, "unf", Low, High)
36             Y = grand(m, n, "uin", Low, High)
37             Y = grand(m, n, "lgi")
38             
39             Y = grand(X, ...)
40             
41             Y = grand(n,  "mn", Mean, Cov)
42             Y = grand(n,  "markov", P, x0)
43             Y = grand(n,  "mul", nb, P)
44             Y = grand(n,  "prm", vect)
45             
46             S = grand("getgen")
47             grand("setgen", gen)
48             
49             S = grand("getsd")
50             grand("setsd", S)
51             
52             S = grand("phr2sd", phrase)
53             
54             grand("setcgn", G)
55             S = grand("getcgn")
56             
57             grand("initgn", I)
58             
59             grand("setall", s1, s2, s3, s4)
60             
61             grand("advnst", K)
62         </synopsis>
63     </refsynopsisdiv>
64     <refsection>
65         <title>Аргументы</title>
66         <variablelist>
67             <varlistentry>
68                 <term>m, n</term>
69                 <listitem>
70                     <para>
71                         целые числа, определяющие размеры матрицы <varname>Y</varname>.
72                     </para>
73                 </listitem>
74             </varlistentry>
75             <varlistentry>
76                 <term>X</term>
77                 <listitem>
78                     <para>
79                         матрица, у которой используются только её размеры (скажем <varname>m</varname> на <varname>n</varname>).
80                     </para>
81                 </listitem>
82             </varlistentry>
83             <varlistentry>
84                 <term>Y</term>
85                 <listitem>
86                     <para>
87                         матрица размером <varname>m</varname> на <varname>n</varname>, элементы которой являются случайными числами двойной точности (double).
88                     </para>
89                 </listitem>
90             </varlistentry>
91             <varlistentry>
92                 <term>S</term>
93                 <listitem>
94                     <para>
95                         выходное значение действия (строка или вещественный вектор-столбец).
96                     </para>
97                 </listitem>
98             </varlistentry>
99         </variablelist>
100     </refsection>
101     <refsection>
102         <title>Описание</title>
103         <para>
104             Эта функция формирует случайные числа по различным законам
105             распределения.
106         </para>
107         <para>
108             Последовательности вызова:
109         </para>
110         <para>
111             <programlisting role="no-scilab-exec"><![CDATA[
112                 Y = grand(m, n, "bet", A, B)
113                 Y = grand(m, n, "bin", N, p)
114                 Y = grand(m, n, "nbn", N, p)
115                 Y = grand(m, n, "chi", Df)
116                 Y = grand(m, n, "nch", Df, Xnon)
117                 Y = grand(m, n, "exp", Av)
118                 Y = grand(m, n, "f", Dfn, Dfd)
119                 Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
120                 Y = grand(m, n, "gam", shape, scale)
121                 Y = grand(m, n, "nor", Av, Sd)
122                 Y = grand(m, n, "geom", p)
123                 Y = grand(m, n, "poi", mu)
124                 Y = grand(m, n, "def")
125                 Y = grand(m, n, "unf", Low, High)
126                 Y = grand(m, n, "uin", Low, High)
127                 Y = grand(m, n, "lgi")
128              ]]></programlisting>
129         </para>
130         <para>
131             формируют матрицу размером <varname>m</varname> на <varname>n</varname>,
132             элементы которой являются случайными числами.
133         </para>
134         <para>
135             Последовательность вызова:
136         </para>
137         <para>
138             <programlisting role="no-scilab-exec"><![CDATA[
139                 Y = grand(X, ...)
140             ]]></programlisting>
141         </para>
142         <para>
143             где <varname>X</varname> - матрица размером <varname>m</varname> на
144             <varname>n</varname>, производит тот же эффект. В данном случае используются
145             только размеры матрицы <varname>X</varname>.
146         </para>
147         <para>
148             Последовательности вызова:
149         </para>
150         <programlisting role="no-scilab-exec"><![CDATA[
151             Y = grand(n, "mn", Mean, Cov)
152             Y = grand(n, "markov", P, x0)
153             Y = grand(n, "mul", nb, P)
154             Y = grand(n, "prm", vect)
155         ]]></programlisting>
156         <para>
157             формируют матрицу размером <varname>m</varname> на <varname>n</varname> со
158             случайными элементами, где <varname>m</varname> - размер аргумента
159             <varname>Mean</varname>, <varname>Cov</varname>, <varname>P</varname> или
160             <varname>vect</varname> в зависимости от ситуации (подробности ниже).
161         </para>
162         <para>
163             Последовательности вызова:
164         </para>
165         <programlisting role="no-scilab-exec"><![CDATA[
166             S = grand("getgen")
167             grand("setgen", gen)
168
169             S = grand("getsd")
170             grand("setsd", S)
171
172             grand("setcgn", G)
173             S = grand("getcgn")
174
175             grand("initgn", I)
176
177             grand("setall", s1, s2, s3, s4)
178
179             grand("advnst", K)
180         ]]></programlisting>
181         <para>
182             настраивают или запрашивают состояние имеющихся генераторов случайных чисел.
183         </para>
184     </refsection>
185     <refsection>
186         <title>Получение случайных чисел по заданному закону распределения</title>
187         <variablelist>
188             <varlistentry>
189                 <term>бета-распределение</term>
190                 <listitem>
191                     <para>
192                         <code>Y = grand(m, n, "bet", A, B)</code> формирует случайные
193                         реализации по бета-распределению с параметрами
194                         <varname>A</varname> и <varname>B</varname>.  Плотность бета-распределения лежит на интервале <latex><![CDATA[(0 < x < 1)]]></latex>:
195                     </para>
196                     <para>
197                         <latex>
198                             \dfrac{x^{A-1}(1-x)^{B-1}}{\beta(A,B)}
199                         </latex>
200                     </para>
201                     <para>
202                         <varname>A</varname> и <varname>B</varname> должны быть вещественными числами <latex><![CDATA[>10^{-37}]]></latex>. С этой функцией связана
203                         функция <link linkend="cdfbet">cdfbet</link>.
204                     </para>
205                 </listitem>
206             </varlistentry>
207             <varlistentry>
208                 <term>биномиальное распределение</term>
209                 <listitem>
210                     <para>
211                         <code>Y = grand(m, n, "bin", N, p)</code> формирует случайные реализации по биномиальному закону распределения с параметрами
212                         <varname>N</varname> (положительное целое) и <varname>p</varname> (вещественное число на интервале <literal>[0,1]</literal>): число
213                         "успехов" в серии из <varname>N</varname> независимых случайных (распределение Бернулли) экспериментов с вероятностью "успеха" в
214                         каждом из них <varname>p</varname>. С этой функцией связаны
215                         функции: <link linkend="binomial">binomial</link>, <link linkend="cdfbin">cdfbin</link>.
216                     </para>
217                 </listitem>
218             </varlistentry>
219             <varlistentry>
220                 <term>отрицательное биномиальное распределение</term>
221                 <listitem>
222                     <para>
223                         <code>Y = grand(m, n, "nbn", N, p)</code>  формирует случайные реализации по отрицательному биномиальному распределению с
224                         параметрами  <varname>N</varname> (положительное целое) и <varname>p</varname> (вещественное число на интервале
225                         <literal>(0,1)</literal>): число "неудач" случившихся до  <varname>N</varname>-го "успеха" в последовательности испытаний с
226                         вероятностью "успеха" <varname>p</varname>. С этой функцией
227                         связана функция <link linkend="cdfnbn">cdfnbn</link>.
228                     </para>
229                 </listitem>
230             </varlistentry>
231             <varlistentry>
232                 <term>хи-квадрат распределение</term>
233                 <listitem>
234                     <para>
235                         <code>Y = grand(m, n, "chi", Df)</code> формирует случайные
236                         реализации по распределению хи-квадрат с <varname>Df</varname>
237                         степенями свободы. Число степеней свободы должно быть
238                         вещественным, строго больше нуля. С этой функцией связана функция: <link linkend="cdfchi">cdfchi</link>.
239                     </para>
240                 </listitem>
241             </varlistentry>
242             <varlistentry>
243                 <term>нецентральное хи-квадрат распределение</term>
244                 <listitem>
245                     <para>
246                         <code>Y = grand(m, n, "nch", Df, Xnonc)</code>  формирует случайные реализации по нецентральному хи-квадрат распределению с
247                         <varname>Df</varname>  степенями свободы (вещественное значение &gt;= <literal>1.0</literal>) и параметром нецентральности
248                         <varname>Xnonc</varname> (вещественное число, больше либо равно
249                         нулю). С этой функцией связана функция: <link linkend="cdfchn">cdfchn</link>.
250                     </para>
251                 </listitem>
252             </varlistentry>
253             <varlistentry>
254                 <term>экспоненциальное распределение</term>
255                 <listitem>
256                     <para>
257                         <code>Y = grand(m, n, "exp", Av)</code> формирует случайные реализации по экспоненциальному распределению с математическим
258                         ожиданием <varname>Av</varname> (вещественное значение, строго больше нуля).
259                     </para>
260                 </listitem>
261             </varlistentry>
262             <varlistentry>
263                 <term>F-распределение (отношение дисперсий, распределение Фишера)</term>
264                 <listitem>
265                     <para>
266                         <code>Y = grand(m, n, "f", Dfn, Dfd)</code> формирует случайные реализации по F-распределению (отношение дисперсий, распределение
267                         Фишера) с <varname>Dfn</varname> (вещественное значение, строго больше нуля) в числителе и <varname>Dfd</varname> степенями
268                         свободы (вещественное значение, строго больше нуля) в знаменателе.
269                         С этой функцией связана функция: <link linkend="cdff">cdff</link>.
270                     </para>
271                 </listitem>
272             </varlistentry>
273             <varlistentry>
274                 <term>нецентральное F-распределение (отношение дисперсий)</term>
275                 <listitem>
276                     <para>
277                         <code>Y = grand(m, n, "nf", Dfn, Dfd, Xnonc)</code> формирует случайные реализации по нецентральному F-распределению (отношению
278                         дисперсий) с <varname>Dfn</varname> степенями свободы (вещественное значение, больше либо равно <literal>1</literal>)  в
279                         числителе, и <varname>Dfd</varname> степенями свободы (вещественное значение, строго больше нуля) в знаменателе и
280                         параметром нецентральности <varname>Xnonc</varname> (вещественное число, больше либо равно нулю). С этой функцией связана функция:
281                         <link linkend="cdffnc">cdffnc</link>.
282                     </para>
283                 </listitem>
284             </varlistentry>
285             <varlistentry>
286                 <term>гамма-распределение</term>
287                 <listitem>
288                     <para>
289                         <code>Y = grand(m, n, "gam", shape, scale)</code> формирует случайные реализации по гамма-распределению с параметрами
290                         <varname>shape</varname> (вещественное значение, строго больше нуля) и <varname>scale</varname> (вещественное значение, строго
291                         больше нуля) (<literal>real</literal> &gt; <literal>0</literal>). Плотность гамма-распределения равна:
292                     </para>
293                     <para>
294                         <latex>
295                             \dfrac{ \textrm{scale}^{\textrm{shape}} x^{\textrm{shape}-1} e^{-\textrm{scale} x}}{\gamma(\textrm{shape}) }
296                         </latex>
297                     </para>
298                     <para>
299                         С этой функцией связаны: <link linkend="gamma">gamma</link>,
300                         <link linkend="cdfgam">cdfgam</link>.
301                     </para>
302                 </listitem>
303             </varlistentry>
304             <varlistentry>
305                 <term>распределение Гаусса-Лапласа (нормальное)</term>
306                 <listitem>
307                     <para>
308                         <code>Y = grand(m, n, "nor", Av, Sd)</code> формирует случайные реализации по нормальному распределению с математическим ожиданием
309                         <varname>Av</varname>  (вещественное значение), среднеквадратичным отклонением  <varname>Sd</varname> (вещественное значение, больше
310                         либо равно нулю). С этой функцией связана: <link linkend="cdfnor">cdfnor</link>.
311                     </para>
312                 </listitem>
313             </varlistentry>
314             <varlistentry>
315                 <term>многомерное гауссовское (многомерное нормальное) распределение</term>
316                 <listitem>
317                     <para>
318                         <code>Y = grand(n, "mn", Mean, Cov)</code> формирует случайные реализации по многомерному гауссовскому распределению; среднее
319                         значение <varname>Mean</varname> должно быть вектор-столбцом размером <literal>m</literal> на <literal>1</literal>, а
320                         ковариация <varname>Cov</varname> должна быть симметричной положительно определённой матрицей размером <literal>m</literal>
321                         на <literal>m</literal> (тогда <varname>Y</varname> будет матрицей размером <literal>m</literal> на  <literal>n</literal>).
322                     </para>
323                 </listitem>
324             </varlistentry>
325             <varlistentry>
326                 <term>геометрическое распределение</term>
327                 <listitem>
328                     <para>
329                         <code>Y = grand(m, n, "geom", p)</code>  формирует случайные реализации по геометрическому распределению с параметром
330                         <varname>p</varname>: количество независимых экспериментов (с вероятностью "успеха" <varname>p</varname>) до тех пор пока не
331                         будет "успех". Вероятность  <varname>p</varname> должна быть в интервале <latex>[p_{min},1]</latex> (с <latex> p_{min} = 1{,}3\times 10^{-307} </latex>).
332                     </para>
333                     <para>
334                         <varname>Y</varname>  состоит из положительных целочисленных вещественных чисел, которые означают "число экспериментов,
335                         проведённых до первого успешного".
336                     </para>
337                 </listitem>
338             </varlistentry>
339             <varlistentry>
340                 <term>цепь Маркова</term>
341                 <listitem>
342                     <para>
343                         <code>Y = grand(n, "markov", P, x0)</code> формирует <varname>n</varname> последовательных состояний цепи Маркова,
344                         описанных матрицей переходных состояний <varname>P</varname>. Сумма элементов в каждой строке в <varname>P</varname> равна
345                         <literal>1</literal>. Исходное состояние задаётся через <varname>x0</varname>. Если <varname>x0</varname> является
346                         матрицей размером <code>m=size(x0,"*")</code>, то <varname>Y</varname> является матрицей размером
347                         <varname>m</varname> на <varname>n</varname>.  <code>Y(i,:)</code> является выборочной траекторией, полученной из исходного состояния
348                         <code>x0(i)</code>.
349                     </para>
350                 </listitem>
351             </varlistentry>
352             <varlistentry>
353                 <term>мультиномиальное (полиномиальное) распределение</term>
354                 <listitem>
355                     <para>
356                         <code>Y = grand(n, "mul", nb, P)</code>  формирует <varname>n</varname> случайных реализаций по мультиномиальному
357                         распределению: совокупность <varname>nb</varname> событий в <literal>m</literal> категориях (положить <varname>nb</varname>
358                         "шаров" в <literal>m</literal> "ящиков"). <literal>P(i)</literal> является вероятностью того, что событие будет классифицировано в
359                         категории <literal>i</literal>. Вектор-столбец вероятностей <varname>P</varname> размером <literal>m-1</literal> (вероятность
360                         категории <literal>m</literal> равна <literal>1-sum(P)</literal>). <varname>Y</varname>  имеет размер <literal>m</literal> на
361                         <literal>n</literal>. Каждый столбец <literal>Y(:,j)</literal> является случайной реализацией по мультиномиальному распределению,
362                         а <literal>Y(i,j)</literal> является  количеством событий, попавших в категорию <literal>i</literal> (для
363                         <literal>j</literal>-того наблюдения) (<literal>sum(Y(:,j)) = nb</literal>).
364                     </para>
365                 </listitem>
366             </varlistentry>
367             <varlistentry>
368                 <term>распределение Пуассона</term>
369                 <listitem>
370                     <para>
371                         <code>Y = grand(m, n, "poi", mu)</code> формирует случайные
372                         реализации по распределению Пуассона с математическим ожиданием <varname>mu</varname> (вещественное значение, больше либо равно
373                         нулю). С этой функцией связана: <link linkend="cdfpoi">cdfpoi</link>.
374                     </para>
375                 </listitem>
376             </varlistentry>
377             <varlistentry>
378                 <term>случайные перестановки</term>
379                 <listitem>
380                     <para>
381                         <code>Y = grand(n, "prm", vect)</code> формирует <varname>n</varname> случайных перестановок вектора-столбца
382                         <varname>vect</varname> размером <literal>m</literal> на <literal>1</literal>.
383                     </para>
384                 </listitem>
385             </varlistentry>
386             <varlistentry>
387                 <term>непрерывное равномерное распределение (def)</term>
388                 <listitem>
389                     <para>
390                         <code>Y = grand(m, n, "def")</code> формирует случайные реализации по равномерному распределению на интервале
391                         <literal>[0,1)</literal> (<literal>1</literal>  в интервал не входит).
392                     </para>
393                 </listitem>
394             </varlistentry>
395             <varlistentry>
396                 <term>непрерывное равномерное распределение (unf)</term>
397                 <listitem>
398                     <para>
399                         <code>Y = grand(m, n, "unf", Low, High)</code> формирует случайные вещественные значения равномерно распределённые на интервале
400                         <literal>[Low, High)</literal> (<varname>High</varname> в интервал не входит).
401                     </para>
402                 </listitem>
403             </varlistentry>
404             <varlistentry>
405                 <term>дискретное равномерное распределение (uin)</term>
406                 <listitem>
407                     <para>
408                         <code>Y = grand(m, n, "uin", Low, High)</code> формирует случайные целые числа, равномерно распределённые между значениями
409                         <varname>Low</varname> и <varname>High</varname> (включительно). <varname>High</varname> и <varname>Low</varname> должны быть
410                         такими целыми числами, что <latex><![CDATA[(\textrm{High}-\textrm{Low}+1) < 2\,147\,483\,561]]></latex>.
411                     </para>
412                 </listitem>
413             </varlistentry>
414             <varlistentry>
415                 <term>равномерное распределение (lgi)</term>
416                 <listitem>
417                     <para>
418                         <code>Y = grand(m, n, "lgi")</code> возвращает базовый выход текущего генератора: случайные целые числа по равномерному
419                         распределению на интервалах:
420                     </para>
421                     <itemizedlist>
422                         <listitem>
423                             <para>
424                                 <literal>[0, 2^32 - 1]</literal>  для mt, kiss и fsultra;
425                             </para>
426                         </listitem>
427                         <listitem>
428                             <para>
429                                 <literal>[0, 2^31 - 87]</literal> для clcg2;
430                             </para>
431                         </listitem>
432                         <listitem>
433                             <para>
434                                 <literal>[0, 2^31 - 2]</literal> для clcg4;
435                             </para>
436                         </listitem>
437                         <listitem>
438                             <para>
439                                 <literal>[0, 2^31 - 1]</literal> для urand.
440                             </para>
441                         </listitem>
442                     </itemizedlist>
443                 </listitem>
444             </varlistentry>
445         </variablelist>
446     </refsection>
447     <refsection>
448         <title>Установка/получение текущего генератора и его состояния</title>
449         <para>
450             У пользователя есть возможность выбирать между основными генераторами (которые
451             дают случайные целые числа по распределению <literal>"lgi"</literal>, другие
452             получаются из него).
453         </para>
454         <variablelist>
455             <varlistentry>
456                 <term>mt</term>
457                 <listitem>
458                     <para>
459                         Вихрь Марсенна (Mersenne-Twister), разработанный японскими учёными
460                         Макото Мацумото и Такудзи Нисимурой, период около
461                         <literal>2^19937</literal>, состояние задаётся массивом из
462                         <literal>624</literal> целых чисел (плюс индекс на этот массив).
463                         Этот генератор используется по умолчанию.
464                     </para>
465                 </listitem>
466             </varlistentry>
467             <varlistentry>
468                 <term>kiss</term>
469                 <listitem>
470                     <para>
471                         "Keep It Simple Stupid" ("придерживайся простоты"), разработанный
472                         Джорджем Марсальи, период около <literal>2^123</literal>,
473                         состояние задаётся четырьмя целыми числами.
474                     </para>
475                 </listitem>
476             </varlistentry>
477             <varlistentry>
478                 <term>clcg2</term>
479                 <listitem>
480                     <para>
481                         Комбинация двух линейных конгруэнтных генераторов П. Л'Экюйера (P. L'Ecuyer) с периодом около <literal>2^61</literal>, состояние
482                         задаётся двумя целыми числами.
483                     </para>
484                 </listitem>
485             </varlistentry>
486             <varlistentry>
487                 <term>clcg4</term>
488                 <listitem>
489                     <para>
490                         Комбинация четырёх линейных конгруэнтных генераторов П. Л'Экюйера
491                         (P. L'Ecuyer)  с периодом около <literal>2^121</literal>, состояние
492                         задаётся четырьмя целыми числами. Этот генератор разделён на разные
493                         виртуальные (неперекрывающиеся) генераторы (<literal>101</literal>
494                         генератор), которые могут быть полезными для разных задач (см.
495                         "Опции, специфичные для "clcg4"" и "Тестовый пример для "clcg4"").
496                     </para>
497                 </listitem>
498             </varlistentry>
499             <varlistentry>
500                 <term>fsultra</term>
501                 <listitem>
502                     <para>
503                         Генератор вычитания с займом (Subtract-with-Borrow), смешанный с
504                         конгруэнтным генератором Арифа Замана (Arif Zaman) и Джорджа
505                         Марсальи (George Marsaglia), с периодом свыше
506                         <literal>10^356</literal>, состояние задаётся массивом из
507                         <literal>37</literal> целых чисел (плюс индекс на этот массив,
508                         флаг (<literal>0</literal> или <literal>1</literal>) и другое
509                         целое число).
510                     </para>
511                 </listitem>
512             </varlistentry>
513             <varlistentry>
514                 <term>urand</term>
515                 <listitem>
516                     <para>
517                         Генератор, используемый функцией Scilab'а <link linkend="rand">rand</link>, состояние задаётся одним целым числом,
518                         период <literal>2^31</literal>. Этот генератор основан на "Urand,
519                         A Universal Random Number Generator" By, Michael A. Malcolm, Cleve
520                         B. Moler, Stan-Cs-73-334, January 1973, Computer Science
521                         Department, School Of Humanities And Sciences, Stanford
522                         University. Это самый быстрый генератор из данного списка, однако
523                         его статистические качества менее удовлетворительны по сравнению с
524                         другими генераторами.
525                     </para>
526                 </listitem>
527             </varlistentry>
528         </variablelist>
529         <para>
530             Различные действия, общие для всех генераторов:
531         </para>
532         <variablelist>
533             <varlistentry>
534                 <term>действие = "getgen"</term>
535                 <listitem>
536                     <para>
537                         <code>S = grand("getgen")</code> возвращает текущий основной
538                         генератор. В данном случае <varname>S</varname> является одной
539                         строкой из <literal>"mt"</literal>, <literal>"kiss"</literal>,
540                         <literal>"clcg2"</literal>, <literal>"clcg4"</literal>,
541                         <literal>"urand"</literal>, <literal>"fsultra"</literal>.
542                     </para>
543                 </listitem>
544             </varlistentry>
545             <varlistentry>
546                 <term>действие = "setgen"</term>
547                 <listitem>
548                     <para>
549                         <code>grand("setgen",gen)</code> устанавливает текущий основной
550                         генератор. В данном случае <varname>gen</varname> может быть одной
551                         строкой из <literal>"mt"</literal>, <literal>"kiss"</literal>,
552                         <literal>"clcg2"</literal>, <literal>"clcg4"</literal>,
553                         <literal>"urand"</literal>, <literal>"fsultra"</literal>.
554                         Заметьте, что этот вызов возвращает новый текущий генератор, т.е.
555                         <varname>gen</varname>.
556                     </para>
557                 </listitem>
558             </varlistentry>
559             <varlistentry>
560                 <term>действие = "getsd"</term>
561                 <listitem>
562                     <para>
563                         <code>S = grand("getsd")</code> получает текущее состояние
564                         (текущие семена) текущего основного генератора.
565                         <varname>S</varname> задаётся в виде вектор-столбца (целочисленных
566                         значений) с количеством элементов <literal>625</literal> для
567                         <literal>"mt"</literal> (первое значение является индексом в
568                         интервале <literal>[1,624]</literal>),  <literal>4</literal> для
569                         <literal>"kiss"</literal>,  <literal>2</literal> для
570                         <literal>"clcg2"</literal>, <literal>40</literal> для
571                         <literal>"fsultra"</literal>,  <literal>4</literal> для
572                         <literal>"clcg4"</literal> (для последнего вы получите текущее
573                         состояние текущего виртуального генератора) и
574                         <literal>1</literal> для <literal>"urand"</literal>.
575                     </para>
576                 </listitem>
577             </varlistentry>
578             <varlistentry>
579                 <term>действие = "setsd"</term>
580                 <listitem>
581                     <para>
582                         <code>grand("setsd", S)</code> и <code>grand("setsd", s1[, s2, s3, s4])</code>  устанавливают состояние текущего основного генератора
583                         (несколько семян):
584                     </para>
585                     <variablelist>
586                         <varlistentry>
587                             <term>для mt</term>
588                             <listitem>
589                                 <para>
590                                     <varname>S</varname>является вектор-столбцом целых чисел с количеством элементов <literal>625</literal>
591                                     (значение первого элемента вектора является индексом и должно быть в интервале <literal>[1,624]</literal>, а
592                                     значения остальных <literal>624</literal> элементов должны лежать в интервале
593                                     <literal>[0,2^32)</literal>), но не должны быть все нулями); более простая инициализация может быть
594                                     сделана с помощью только одного целого числа <varname>s1</varname> (<varname>s1</varname> должно
595                                     лежать в интервале <literal>[0,2^32)</literal>);
596                                 </para>
597                             </listitem>
598                         </varlistentry>
599                         <varlistentry>
600                             <term>для kiss</term>
601                             <listitem>
602                                 <para>
603                                     должны быть указаны четыре целых числа <varname>s1</varname>, <varname>s2</varname>,
604                                     <varname>s3</varname>, <varname>s4</varname> на интервале <literal>[0,2^32)</literal>;
605                                 </para>
606                             </listitem>
607                         </varlistentry>
608                         <varlistentry>
609                             <term>для clcg2</term>
610                             <listitem>
611                                 <para>
612                                     должны быть указаны два целых числа <varname>s1</varname> на интервале
613                                     <literal>[1,2^31-86]</literal> и <varname>s2</varname> на интервале  <literal>[1,2^31-250]</literal>;
614                                 </para>
615                             </listitem>
616                         </varlistentry>
617                         <varlistentry>
618                             <term>для clcg4</term>
619                             <listitem>
620                                 <para>
621                                     требуются четыре целых числа <varname>s1</varname> на
622                                     интервале <literal>[1,2^31-2]</literal>, <varname>s2</varname> на интервале <literal>[1,2^31-106]</literal>, <varname>s3</varname>
623                                     на интервале <literal>[1,2^31-226]</literal>, <varname>s4</varname> на интервале
624                                     <literal>[1,2^31-326]</literal>;
625                                 </para>
626                                 <para>
627                                     <caution>
628                                         Предостережение: с clcg4 вы устанавливаете семена текущего виртуального генератора, но вы можете
629                                         потерять синхронизацию между ним и другими виртуальными генераторами (т.е. не гарантируется,
630                                         что генерируемая последовательность не перекрывается с генерируемой последовательностью
631                                         другого  виртуального генератора) =&gt; вместо этого используйте опцию "setall".
632                                     </caution>
633                                 </para>
634                             </listitem>
635                         </varlistentry>
636                         <varlistentry>
637                             <term>для urand</term>
638                             <listitem>
639                                 <para>
640                                     должно быть указано одно целое число <varname>s1</varname> на интервале <literal>[0,2^31)</literal>.
641                                 </para>
642                             </listitem>
643                         </varlistentry>
644                         <varlistentry>
645                             <term>для fsultra</term>
646                             <listitem>
647                                 <para>
648                                     <varname>S</varname> является вектором целых чисел, состоящий из 40 элементов  (первый элемент является
649                                     индексом и должен быть на интервале <literal>[0,37]</literal>, второй элемент является
650                                     флагом (0 или 1), третий элемент является целым числом на интервале  <literal>[1,2^32[</literal>, а 37
651                                     остальных целых чисел должны быть на интервале <literal>[0,2^32[</literal>. Более простая (и
652                                     рекомендованная) инициализация может быть сделана с помощью двух целых чисел <varname>s1</varname> и
653                                     <varname>s2</varname> на интервале <literal>[0,2^32[</literal>.
654                                 </para>
655                             </listitem>
656                         </varlistentry>
657                     </variablelist>
658                 </listitem>
659             </varlistentry>
660             <varlistentry>
661                 <term>действие = "phr2sd"</term>
662                 <listitem>
663                     <para>
664                         для заданной фразы <varname>phrase</varname> (символьной строки)
665                         <code>Sd = grand("phr2sd", phrase)</code> генерирует вектор
666                         <varname>Sd</varname> размером 1 на 2, который может
667                         использоваться в качестве семени для изменения состояния
668                         основного генератора (изначально подходил для clcg2).
669                     </para>
670                 </listitem>
671             </varlistentry>
672         </variablelist>
673     </refsection>
674     <refsection>
675         <title>Опции, специфичные для clcg4</title>
676         <para>
677             Генератор clcg4 может использоваться как и остальные генераторы, но у него
678             есть то преимущество, что он может быть разделён на несколько
679             (<literal>101</literal>) виртуальных генераторов последовательности которых не
680             перекрываются (когда вы используете классический генератор, то вы можете
681             изменить исходное состояние (семена) для того, чтобы получить другую
682             последовательность, но не гарантируется, что вы получите абсолютно другую
683             последовательность). Каждому виртуальному генератору соответствует
684             последовательность из  <literal>2^72</literal> значений, которая далее делится
685             на <literal>V=2^31</literal> сегментов (или блоков) длиной
686             <literal>W=2^41</literal>. Есть возможность вернуть заданный виртуальный
687             генератор в начало последовательности или в начало текущего сегмента или
688             перейти прямо к следующему сегменту. Можно также изменить исходное состояние
689             (семя) генератора <literal>0</literal> с помощью опции
690             <literal>"setall"</literal>, которая затем изменит также исходное состояние
691             остальных виртуальных генераторов так, чтобы получить синхронизацию, т.е. в
692             функции нескольких исходных состояний генератора <literal>0</literal> исходные
693             состояния генераторов <literal>1...100</literal> пересчитываются так, чтобы
694             получить <literal>101</literal> неперекрывающуюся последовательность.
695         </para>
696         <variablelist>
697             <varlistentry>
698                 <term>действие = "setcgn"</term>
699                 <listitem>
700                     <para>
701                         <code>grand("setcgn",G)</code> устанавливает текущий виртуальный
702                         генератор для clcg4 (когда clcg4 установлен, то есть используется
703                         виртуальный генератор (clcg4) номер  <varname>G</varname>);
704                         виртуальные генераторы clcg4 пронумерованы <literal>0, 1, ..., 100</literal> (а поэтому <varname>G</varname> должно быть целым
705                         числом на интервале <literal>[0,100]</literal>); по умолчанию
706                         текущим виртуальным генератором является <literal>0</literal>.
707                     </para>
708                 </listitem>
709             </varlistentry>
710             <varlistentry>
711                 <term>действие = "getcgn"</term>
712                 <listitem>
713                     <para>
714                         <code>S = grand("getcgn")</code> возвращает номер текущего виртуального генератора clcg4.
715                     </para>
716                 </listitem>
717             </varlistentry>
718             <varlistentry>
719                 <term>действие = "initgn"</term>
720                 <listitem>
721                     <para>
722                         <code>grand("initgn", I)</code> заново инициализирует состояние текущего виртуального генератора.
723                     </para>
724                     <variablelist>
725                         <varlistentry>
726                             <term>I = -1</term>
727                             <listitem>
728                                 <para>
729                                     устанавливает состояние в его исходное семя.
730                                 </para>
731                             </listitem>
732                         </varlistentry>
733                         <varlistentry>
734                             <term>I = 0</term>
735                             <listitem>
736                                 <para>
737                                     устанавливает состояние в его последнее (предыдущее) семя (т. е. в начало текущего сегмента).
738                                 </para>
739                             </listitem>
740                         </varlistentry>
741                         <varlistentry>
742                             <term>I = 1</term>
743                             <listitem>
744                                 <para>
745                                     устанавливает состояние на <literal>W</literal> значений нового семени от его последнего семени (т.е.
746                                     в начало следующего сегмента) и сбрасывает параметры текущего сегмента.
747                                 </para>
748                             </listitem>
749                         </varlistentry>
750                     </variablelist>
751                 </listitem>
752             </varlistentry>
753             <varlistentry>
754                 <term>действие = "setall"</term>
755                 <listitem>
756                     <para>
757                         <code>grand("setall", s1, s2, s3, s4)</code> устанавливает
758                         исходное состояние генератора <literal>0</literal> в
759                         <varname>s1</varname>, <varname>s2</varname>,
760                         <varname>s3</varname>, <varname>s4</varname>. Исходные семена
761                         других генераторов устанавливаются так, чтобы была синхронизация.
762                         Об ограничениях на <varname>s1</varname>, <varname>s2</varname>,
763                         <varname>s3</varname>, <varname>s4</varname> смотри действие
764                         <literal>"setsd"</literal>.
765                     </para>
766                 </listitem>
767             </varlistentry>
768             <varlistentry>
769                 <term>действие = "advnst"</term>
770                 <listitem>
771                     <para>
772                         <code>grand("advnst", K)</code>  перемещает состояние текущего
773                         генератора вперёд на <literal>2^K</literal> значений и сбрасывает
774                         исходное семя в это значение.
775                     </para>
776                 </listitem>
777             </varlistentry>
778         </variablelist>
779     </refsection>
780     <refsection>
781         <title>Примеры</title>
782         <para>
783             В следующем примере мы генерируем случайные числа по различным законам
784             распределения и строим соответствующие гистограммы.
785         </para>
786         <programlisting role="example"><![CDATA[
787 // Возвращает матрицу размером 400 на 800 случайных чисел
788 // по нормальному распределению, с матожиданием 0 и дисперсией 1.
789 R = grand(400,800,"nor",0,1);
790 scf();
791 histplot(10,R);
792 xtitle("Случайные числа по нормальному закону распределения из функции grand","X","Частота");
793 ]]></programlisting>
794         <scilab:image localized="true">
795             R = grand(400,800,"nor",0,1);
796             histplot(10,R);
797             xtitle("Случайные числа по нормальному закону распределения из функции grand","X","Частота");
798         </scilab:image>
799         
800         <programlisting role="example"><![CDATA[
801 // Возвращает матрицу размером 400 на 800 случайных чисел
802 // с равномерным распределением в [0,1).
803 R = grand(400,800,"def");
804 scf();
805 histplot(10,R);
806 xtitle("Случайные числа с равномерным распределением из функции grand","X","Частота");
807  ]]></programlisting>
808         <scilab:image localized="true">
809             R = grand(400,800,"def");
810             histplot(10,R);
811             xtitle("Случайные числа с равномерным распределением из функции grand","X","Частота");
812         </scilab:image>
813         
814         <programlisting role="example"><![CDATA[
815 // Возвращает матрицу размером 400 на 800 случайных чисел
816 // по распределению Пуассона и матожиданием, равным 5.
817 R = grand(400,800,"poi",5);
818 scf();
819 histplot(10,R);
820 xtitle("Случайные числа по закону распределения Пуассона из grand","X","Частота");
821  ]]></programlisting>
822         <scilab:image localized="true">
823             R = grand(400,800,"poi",5);
824             histplot(10,R);
825             xtitle("Случайные числа по закону распределения Пуассона из grand","X","Частота");
826         </scilab:image>
827         
828         <para>
829             В следующем примере мы генерируем случайные числа по экспоненциальному распределению, а затем сравниваем эмпирическое распределение с теоретическим.
830         </para>
831         <programlisting role="example"><![CDATA[
832 lambda=1.6;
833 N=100000;
834 X = grand(1,N,"exp",lambda);
835 scf();
836 classes = linspace(0,12,25);
837 histplot(classes,X)
838 x=linspace(0,12,25);
839 y = (1/lambda)*exp(-(1/lambda)*x);
840 plot(x,y,"ro-");
841 legend(["Эксперимент" "Теория"]);
842 xtitle("Случайные числа по экспоненциальному закону распределения из функции grand","X","Частота");
843  ]]></programlisting>
844         <scilab:image localized="true">
845             lambda=1.6;
846             N=100000;
847             X = grand(1,N,"exp",lambda);
848             classes = linspace(0,12,25);
849             histplot(classes,X)
850             x=linspace(0,12,25);
851             y = (1/lambda)*exp(-(1/lambda)*x);
852             plot(x,y,"ro-");
853             legend(["Эксперимент" "Теория"]);
854             xtitle("Случайные числа по экспоненциальному закону распределения из функции grand","X","Частота");
855         </scilab:image>
856         <para>
857             В следующем примере мы генерируем случайные числа по закону гамма-
858             распределения, а затем сравниваем эмпирическое распределение с теоретическим.
859         </para>
860         <programlisting role="example"><![CDATA[
861 N=10000;
862 A=10;
863 B=4;
864 R=grand(1,N,"gam",A,B);
865 XS=gsort(R,"g","i")';
866 PS=(1:N)'/N;
867 P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
868 scf();
869 plot(XS,PS,"b-"); // Эмпирическое распределение
870 plot(XS,P,"r-"); // Теоретическое распределение
871 legend(["Эксперимент" "Теория"]);
872 xtitle("Интегральная функция распределения случайных чисел по закону гамма-распределения","X","F");
873 ]]></programlisting>
874         <scilab:image localized="true">
875             N=10000;
876             A=10;
877             B=4;
878             R=grand(1,N,"gam",A,B);
879             XS=gsort(R,"g","i")';
880             PS=(1:N)'/N;
881             P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
882             scf();
883             plot(XS,PS,"b-"); // Эмпирическое распределение
884             plot(XS,P,"r-"); // Теоретическое распределение
885             legend(["Эксперимент" "Теория"]);
886             xtitle("Интегральная функция распределения случайных чисел по закону гамма-распределения","X","F");
887         </scilab:image>
888         <para>
889             В следующем примере мы генерируем 10 случайных целых чисел в интервале
890             <literal>[1,365]</literal>.
891         </para>
892         <programlisting role="example"><![CDATA[
893 grand(10,1,"uin",1,365)
894  ]]></programlisting>
895         <para>
896             В следующем примере мы генерируем <literal>12</literal> перестановок набора
897             чисел <literal>[1, 2, ..., 7]</literal>. Эти <literal>12</literal>
898             перестановок сохраняются столбец за столбцом.
899         </para>
900         <programlisting role="example"><![CDATA[
901 grand(12,"prm",(1:7)')
902  ]]></programlisting>
903     </refsection>
904     <refsection>
905         <title>Получение более или менее предсказуемых чисел</title>
906         <para>
907             Генераторы псевдослучайных чисел основаны на детерминированных
908             последовательностях. Для того, чтобы получить повторное воспроизведение
909             моделирования, исходное семя генератора равно такой константе, что
910             последовательность будет оставаться одной и той же от одной сессии к другой.
911             Следовательно, по умолчанию, первые числа, производимые функцией
912             <function>grand</function>, всегда одни и те же.
913         </para>
914         <para>
915             В некоторых ситуациях мы можем захотеть инициализировать семя генератора для
916             того, чтобы получить менее предсказуемые числа. В этом случае мы можем
917             инициализировать семя с помощью выходного значения функции
918             <function>getdate</function>:
919         </para>
920         <programlisting role="example"><![CDATA[
921 n=getdate("s");
922 grand("setsd",n)
923     ]]></programlisting>
924     </refsection>
925     <refsection>
926         <title>Тестовый пример для clcg4</title>
927         <para>
928             Пример необходимости возможности разделения clcg4 следующий. Сравниваются два
929             статистических метода по данным разного размера. Первый является 
930             бутстреп-методом и считается точным при использовании меньшего количества данных,
931             чем второй метод, который использует только грубую силу. Для первого метода будет
932             генерироваться набор данных размером равномерно распределённым между
933             <literal>25</literal> и <literal>50</literal>. Затем будет генерироваться и
934             анализироваться набор данных определённого размера. Второй метод будет
935             выбирать размер набора данных между <literal>100</literal> и
936             <literal>200</literal>, генерировать данные и анализировать их. Этот процесс
937             будет повторяться <literal>1000</literal> раз. Для уменьшения разброса мы
938             хотим, чтобы числа, используемые в этих двух методах были одинаковыми для
939             каждого из <literal>1000</literal> сравнений. Но второй метод будет
940             использовать больше случайных чисел, чем первый метод и без этого пакета
941             синхронизация была бы затруднительна. С clcg4 это легко. Используем генератор
942             <literal>0</literal> для получения размера выборки для метода один и генератор
943             <literal>1</literal> для получения данных. Затем сбрасываем состояние  к
944             начальному текущего блока и делаем то же самое для второго метода. Это
945             гарантирует, что исходные данные для второго метода те же, что использовались
946             в первом методе. Когда они оба закончатся, передвигаем вперёд блок для обоих
947             генераторов.
948         </para>
949     </refsection>
950     <refsection role="see also">
951         <title>Смотрите также</title>
952         <simplelist type="inline">
953             <member>
954                 <link linkend="rand">rand</link>
955             </member>
956             <member>
957                 <link linkend="sprand">sprand</link>
958             </member>
959             <member>
960                 <link linkend="ssrand">ssrand</link>
961             </member>
962         </simplelist>
963     </refsection>
964 </refentry>