1 <?xml version="1.0" encoding="UTF-8"?>
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 * Copyright (C) 2013 - Samuel GOUGEON : extension to hypermatrices
8 * Copyright (C) 2012 - 2016 - Scilab Enterprises
10 * This file is hereby licensed under the terms of the GNU GPL v2.0,
11 * pursuant to article 5.3.4 of the CeCILL v.2.1.
12 * This file was originally licensed under the terms of the CeCILL v2.1,
13 * and continues to be available under such terms.
14 * For more information, see the COPYING file which you should have received
15 * along with this program.
18 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
19 xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
20 xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
21 xml:lang="ru" xml:id="grand">
23 <refname>grand</refname>
24 <refpurpose>Случайные числа</refpurpose>
27 <title>Синтаксис</title>
29 Y = grand(m, n, "bet", A, B)
30 Y = grand(m, n, "bin", N, p)
31 Y = grand(m, n, "nbn", N, p)
32 Y = grand(m, n, "chi", Df)
33 Y = grand(m, n, "nch", Df, Xnon)
34 Y = grand(m, n, "exp", Av)
35 Y = grand(m, n, "f", Dfn, Dfd)
36 Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
37 Y = grand(m, n, "gam", shape, rate)
38 Y = grand(m, n, "nor", Av, Sd)
39 Y = grand(m, n, "geom", p)
40 Y = grand(m, n, "poi", mu)
41 Y = grand(m, n, "def")
42 Y = grand(m, n, "unf", Low, High)
43 Y = grand(m, n, "uin", Low, High)
44 Y = grand(m, n, "lgi")
46 Y = grand(m, n, o,..,"..",...)
51 Y = grand(n, "mn", Mean, Cov)
52 Y = grand(n, "markov", P, x0)
53 Y = grand(n, "mul", nb, P)
54 Y = grand(n, "prm", vect)
67 S = grand("phr2sd", phrase)
70 grand("setall", s1, s2, s3, s4)
75 <title>Аргументы</title>
81 целые числа, определяющие размеры матрицы/гиперматрицы <varname>Y</varname>.
89 матрица, у которой используются только её размеры (скажем <varname>m</varname> на <varname>n</varname>).
97 матрица или гиперматрица со случайными элементами, зависящая от входных аргументов.
105 выходное значение действия (строка или вещественный вектор-столбец).
112 <title>Описание</title>
114 Эта функция формирует случайные числа по различным законам
118 Последовательности вызова:
121 <programlisting role="no-scilab-exec"><![CDATA[
122 Y = grand(m, n, "bet", A, B)
123 Y = grand(m, n, "bin", N, p)
124 Y = grand(m, n, "nbn", N, p)
125 Y = grand(m, n, "chi", Df)
126 Y = grand(m, n, "nch", Df, Xnon)
127 Y = grand(m, n, "exp", Av)
128 Y = grand(m, n, "f", Dfn, Dfd)
129 Y = grand(m, n, "nf", Dfn, Dfd, Xnon)
130 Y = grand(m, n, "gam", shape, rate)
131 Y = grand(m, n, "nor", Av, Sd)
132 Y = grand(m, n, "geom", p)
133 Y = grand(m, n, "poi", mu)
134 Y = grand(m, n, "def")
135 Y = grand(m, n, "unf", Low, High)
136 Y = grand(m, n, "uin", Low, High)
137 Y = grand(m, n, "lgi")
141 формируют матрицу размером <varname>m</varname> на <varname>n</varname>,
142 элементы которой являются случайными числами.
144 Все эти последовательности вызова могут быть расширены для создания гиперматрицы случайных чисел,
145 у которой более двух размерностей, определённых в виде целых чисел, перечисленных перед типом
146 статистического распределения:
149 <programlisting role="no-scilab-exec"><![CDATA[
150 Y = grand(m, n, o, ..., "..", ...)
154 Другой способ указать размеры ожидаемого вектора, матрицы или гиперматрицы случайных чисел:
157 <programlisting role="no-scilab-exec"><![CDATA[
162 где <varname>X</varname> - матрица или гиперматрица размером
163 <varname>m</varname> на <varname>n</varname> на ... . В
164 данном случае используются
165 только размеры матрицы <varname>X</varname>.
168 Последовательности вызова:
170 <programlisting role="no-scilab-exec"><![CDATA[
171 Y = grand(n, "mn", Mean, Cov)
172 Y = grand(n, "markov", P, x0)
173 Y = grand(n, "mul", nb, P)
174 Y = grand(n, "prm", vect)
177 формируют матрицу размером <varname>m</varname> на <varname>n</varname> со
178 случайными элементами, где <varname>m</varname> - размер аргумента
179 <varname>Mean</varname>, <varname>Cov</varname>, <varname>P</varname> или
180 <varname>vect</varname> в зависимости от ситуации (подробности ниже).
183 Последовательности вызова:
185 <programlisting role="no-scilab-exec"><![CDATA[
197 grand("setall", s1, s2, s3, s4)
202 настраивают или запрашивают состояние имеющихся генераторов случайных чисел.
206 <title>Получение случайных чисел по заданному закону распределения</title>
209 <term>бета-распределение</term>
212 <code>Y = grand(m, n, "bet", A, B)</code> формирует случайные
213 реализации по бета-распределению с параметрами
214 <varname>A</varname> и <varname>B</varname>. Плотность бета-распределения лежит
215 на интервале (0 < x < 1):
219 \dfrac{x^{A-1}(1-x)^{B-1}}{\beta(A,B)}
223 <varname>A</varname> и <varname>B</varname> должны быть вещественными числами
224 >10<superscript>-37</superscript>. С этой функцией связана
225 функция <link linkend="cdfbet">cdfbet</link>.
230 <term>биномиальное распределение</term>
233 <code>Y = grand(m, n, "bin", N, p)</code> формирует случайные реализации по биномиальному закону распределения с параметрами
234 <varname>N</varname> (положительное целое) и <varname>p</varname> (вещественное число на интервале <literal>[0,1]</literal>): число
235 "успехов" в серии из <varname>N</varname> независимых случайных (распределение Бернулли) экспериментов с вероятностью "успеха" в
236 каждом из них <varname>p</varname>. С этой функцией связаны
237 функции: <link linkend="binomial">binomial</link>, <link linkend="cdfbin">cdfbin</link>.
242 <term>отрицательное биномиальное распределение</term>
245 <code>Y = grand(m, n, "nbn", N, p)</code> формирует случайные реализации по отрицательному биномиальному распределению с
246 параметрами <varname>N</varname> (положительное целое) и <varname>p</varname> (вещественное число на интервале
247 <literal>(0,1)</literal>): число "неудач" случившихся до <varname>N</varname>-го "успеха" в последовательности испытаний с
248 вероятностью "успеха" <varname>p</varname>. С этой функцией
249 связана функция <link linkend="cdfnbn">cdfnbn</link>.
254 <term>хи-квадрат распределение</term>
257 <code>Y = grand(m, n, "chi", Df)</code> формирует случайные
258 реализации по распределению хи-квадрат с <varname>Df</varname>
259 степенями свободы. Число степеней свободы должно быть
260 вещественным, строго больше нуля. С этой функцией связана функция: <link linkend="cdfchi">cdfchi</link>.
265 <term>нецентральное хи-квадрат распределение</term>
268 <code>Y = grand(m, n, "nch", Df, Xnonc)</code> формирует случайные реализации по нецентральному хи-квадрат распределению с
269 <varname>Df</varname> степенями свободы (вещественное значение >= <literal>1.0</literal>) и параметром нецентральности
270 <varname>Xnonc</varname> (вещественное число, больше либо равно
271 нулю). С этой функцией связана функция: <link linkend="cdfchn">cdfchn</link>.
276 <term>экспоненциальное распределение</term>
279 <code>Y = grand(m, n, "exp", Av)</code> формирует случайные реализации по экспоненциальному распределению с математическим
280 ожиданием <varname>Av</varname> (вещественное значение, строго больше нуля).
285 <term>F-распределение (отношение дисперсий, распределение Фишера)</term>
288 <code>Y = grand(m, n, "f", Dfn, Dfd)</code> формирует случайные реализации по F-распределению (отношение дисперсий, распределение
289 Фишера) с <varname>Dfn</varname> (вещественное значение, строго больше нуля) в числителе и <varname>Dfd</varname> степенями
290 свободы (вещественное значение, строго больше нуля) в знаменателе.
291 С этой функцией связана функция: <link linkend="cdff">cdff</link>.
296 <term>нецентральное F-распределение (отношение дисперсий)</term>
299 <code>Y = grand(m, n, "nf", Dfn, Dfd, Xnonc)</code> формирует случайные реализации по нецентральному F-распределению (отношению
300 дисперсий) с <varname>Dfn</varname> степенями свободы (вещественное значение, больше либо равно <literal>1</literal>) в
301 числителе, и <varname>Dfd</varname> степенями свободы (вещественное значение, строго больше нуля) в знаменателе и
302 параметром нецентральности <varname>Xnonc</varname> (вещественное число, больше либо равно нулю). С этой функцией связана функция:
303 <link linkend="cdffnc">cdffnc</link>.
308 <term>гамма-распределение</term>
311 <code>Y = grand(m, n, "gam", shape, rate)</code> формирует
312 случайные реализации по гамма-распределению с параметрами
313 <varname>shape</varname> (вещественное значение, строго
314 больше нуля) и <varname>rate</varname> (вещественное
315 значение, строго больше нуля) (<literal>real</literal>
316 > <literal>0</literal>). Плотность гамма-распределения
321 \dfrac{ \textrm{rate}^{\textrm{shape}} x^{\textrm{shape}-1} e^{-\textrm{rate} x}}{\gamma(\textrm{shape}) }
325 С этой функцией связаны: <link linkend="gamma">gamma</link>,
326 <link linkend="cdfgam">cdfgam</link>.
331 <term>распределение Гаусса-Лапласа (нормальное)</term>
334 <code>Y = grand(m, n, "nor", Av, Sd)</code> формирует случайные реализации по нормальному распределению с математическим ожиданием
335 <varname>Av</varname> (вещественное значение), среднеквадратичным отклонением <varname>Sd</varname> (вещественное значение, больше
336 либо равно нулю). С этой функцией связана: <link linkend="cdfnor">cdfnor</link>.
341 <term>многомерное гауссовское (многомерное нормальное) распределение</term>
344 <code>Y = grand(n, "mn", Mean, Cov)</code> формирует случайные реализации по многомерному гауссовскому распределению; среднее
345 значение <varname>Mean</varname> должно быть вектор-столбцом размером <literal>m</literal> на <literal>1</literal>, а
346 ковариация <varname>Cov</varname> должна быть симметричной положительно определённой матрицей размером <literal>m</literal>
347 на <literal>m</literal> (тогда <varname>Y</varname> будет матрицей размером <literal>m</literal> на <literal>n</literal>).
352 <term>геометрическое распределение</term>
355 <code>Y = grand(m, n, "geom", p)</code> формирует случайные реализации по геометрическому распределению с параметром
356 <varname>p</varname>: количество независимых экспериментов (с вероятностью "успеха" <varname>p</varname>) до тех пор пока не
357 будет "успех". Вероятность <varname>p</varname> должна быть в интервале <latex>[p_{min},1]</latex> (с <latex> p_{min} = 1{,}3\times 10^{-307} </latex>).
360 <varname>Y</varname> состоит из положительных целочисленных вещественных чисел, которые означают "число экспериментов,
361 проведённых до первого успешного".
366 <term>цепь Маркова</term>
369 <code>Y = grand(n, "markov", P, x0)</code> формирует <varname>n</varname> последовательных состояний цепи Маркова,
370 описанных матрицей переходных состояний <varname>P</varname>. Сумма элементов в каждой строке в <varname>P</varname> равна
371 <literal>1</literal>. Исходное состояние задаётся через <varname>x0</varname>. Если <varname>x0</varname> является
372 матрицей размером <code>m=size(x0,"*")</code>, то <varname>Y</varname> является матрицей размером
373 <varname>m</varname> на <varname>n</varname>. <code>Y(i,:)</code> является выборочной траекторией, полученной из исходного состояния
379 <term>мультиномиальное (полиномиальное) распределение</term>
382 <code>Y = grand(n, "mul", nb, P)</code> формирует <varname>n</varname> случайных реализаций по мультиномиальному
383 распределению: совокупность <varname>nb</varname> событий в <literal>m</literal> категориях (положить <varname>nb</varname>
384 "шаров" в <literal>m</literal> "ящиков"). <literal>P(i)</literal> является вероятностью того, что событие будет классифицировано в
385 категории <literal>i</literal>. Вектор-столбец вероятностей <varname>P</varname> размером <literal>m-1</literal> (вероятность
386 категории <literal>m</literal> равна <literal>1-sum(P)</literal>). <varname>Y</varname> имеет размер <literal>m</literal> на
387 <literal>n</literal>. Каждый столбец <literal>Y(:,j)</literal> является случайной реализацией по мультиномиальному распределению,
388 а <literal>Y(i,j)</literal> является количеством событий, попавших в категорию <literal>i</literal> (для
389 <literal>j</literal>-того наблюдения) (<literal>sum(Y(:,j)) = nb</literal>).
394 <term>распределение Пуассона</term>
397 <code>Y = grand(m, n, "poi", mu)</code> формирует случайные
398 реализации по распределению Пуассона с математическим ожиданием <varname>mu</varname> (вещественное значение, больше либо равно
399 нулю). С этой функцией связана: <link linkend="cdfpoi">cdfpoi</link>.
404 <term>случайные перестановки</term>
407 <code>Y = grand(n, "prm", vect)</code> формирует <varname>n</varname> случайных перестановок <varname>vect</varname>.
408 <varname>vect</varname> может быть вектор-столбцов вещественных чисел или вектором, матрицей или гиперматрицей
409 комплексных, целых, логических, полиномиальных или строковых значений; полной или разрежённой.
410 Из-за стековой структуры, <varname>vect</varname> не должен и не может быть вектор-строкой.
411 Эта возможность перекрывает Matlab'овскую функцию <code>randperm()</code> поскольку
412 <code>randperm(n)</code> эквивалентно <code>grand(1,'prm',(1:n)')</code>,
413 а <code>randperm(n, k)</code> может быть получено через
414 <code>grand(1,'prm',(1:n)'); ans(1:k)</code>.
419 <term>непрерывное равномерное распределение (def)</term>
422 <code>Y = grand(m, n, "def")</code> формирует случайные реализации по равномерному распределению на интервале
423 <literal>[0,1)</literal> (<literal>1</literal> в интервал не входит).
428 <term>непрерывное равномерное распределение (unf)</term>
431 <code>Y = grand(m, n, "unf", Low, High)</code> формирует случайные вещественные значения равномерно распределённые на интервале
432 <literal>[Low, High)</literal> (<varname>High</varname> в интервал не входит).
437 <term>дискретное равномерное распределение (uin)</term>
440 <code>Y = grand(m, n, "uin", Low, High)</code> формирует случайные целые числа, равномерно распределённые между значениями
441 <varname>Low</varname> и <varname>High</varname> (включительно). <varname>High</varname> и <varname>Low</varname> должны быть
442 такими целыми числами, что <literal>(High-Low+1) < 2.147483561e9</literal>.
447 <term>равномерное распределение (lgi)</term>
450 <code>Y = grand(m, n, "lgi")</code> возвращает базовый выход текущего генератора: случайные целые числа по равномерному
451 распределению на интервалах:
456 <literal>[0, 2^32 - 1]</literal> для mt и kiss;
461 <literal>[0, 2^31 - 87]</literal> для clcg2;
466 <literal>[0, 2^31 - 2]</literal> для clcg4;
471 <literal>[0, 2^31 - 1]</literal> для urand.
480 <title>Установка/получение текущего генератора и его состояния</title>
482 У пользователя есть возможность выбирать между основными генераторами (которые
483 дают случайные целые числа по распределению <literal>"lgi"</literal>, другие
491 Вихрь Марсенна (Mersenne-Twister), разработанный японскими учёными
492 Макото Мацумото и Такудзи Нисимурой, период около
493 <literal>2^19937</literal>, состояние задаётся массивом из
494 <literal>624</literal> целых чисел (плюс индекс на этот массив).
495 Этот генератор используется по умолчанию.
503 "Keep It Simple Stupid" ("придерживайся простоты"), разработанный
504 Джорджем Марсальи, период около <literal>2^123</literal>,
505 состояние задаётся четырьмя целыми числами.
513 Комбинация двух линейных конгруэнтных генераторов П. Л'Экюйера (P. L'Ecuyer) с периодом около <literal>2^61</literal>, состояние
514 задаётся двумя целыми числами.
522 Комбинация четырёх линейных конгруэнтных генераторов П. Л'Экюйера
523 (P. L'Ecuyer) с периодом около <literal>2^121</literal>, состояние
524 задаётся четырьмя целыми числами. Этот генератор разделён на разные
525 виртуальные (неперекрывающиеся) генераторы (<literal>101</literal>
526 генератор), которые могут быть полезными для разных задач (см.
527 "Опции, специфичные для "clcg4"" и "Тестовый пример для "clcg4"").
535 Генератор, используемый функцией Scilab'а <link linkend="rand">rand</link>, состояние задаётся одним целым числом,
536 период <literal>2^31</literal>. Этот генератор основан на "Urand,
537 A Universal Random Number Generator" By, Michael A. Malcolm, Cleve
538 B. Moler, Stan-Cs-73-334, January 1973, Computer Science
539 Department, School Of Humanities And Sciences, Stanford
540 University. Это самый быстрый генератор из данного списка, однако
541 его статистические качества менее удовлетворительны по сравнению с
542 другими генераторами.
548 Различные действия, общие для всех генераторов:
552 <term>действие = "getgen"</term>
555 <code>S = grand("getgen")</code> возвращает текущий основной
556 генератор. В данном случае <varname>S</varname> является одной
557 строкой из <literal>"mt"</literal>, <literal>"kiss"</literal>,
558 <literal>"clcg2"</literal>, <literal>"clcg4"</literal>,
559 <literal>"urand"</literal>.
564 <term>действие = "setgen"</term>
567 <code>grand("setgen",gen)</code> устанавливает текущий основной
568 генератор. В данном случае <varname>gen</varname> может быть одной
569 строкой из <literal>"mt"</literal>, <literal>"kiss"</literal>,
570 <literal>"clcg2"</literal>, <literal>"clcg4"</literal>,
571 <literal>"urand"</literal>.
572 Заметьте, что этот вызов возвращает новый текущий генератор, т.е.
573 <varname>gen</varname>.
578 <term>действие = "getsd"</term>
581 <code>S = grand("getsd")</code> получает текущее состояние
582 (текущие семена) текущего основного генератора.
583 <varname>S</varname> задаётся в виде вектор-столбца (целочисленных
584 значений) с количеством элементов <literal>625</literal> для
585 <literal>"mt"</literal> (первое значение является индексом в
586 интервале <literal>[1,624]</literal>), <literal>4</literal> для
587 <literal>"kiss"</literal>, <literal>2</literal> для
588 <literal>"clcg2"</literal>, <literal>4</literal> для
589 <literal>"clcg4"</literal> (для последнего вы получите текущее
590 состояние текущего виртуального генератора) и
591 <literal>1</literal> для <literal>"urand"</literal>.
596 <term>действие = "setsd"</term>
599 <code>grand("setsd", S)</code> и <code>grand("setsd", s1[, s2, s3, s4])</code> устанавливают состояние текущего основного генератора
607 <varname>S</varname>является вектор-столбцом целых чисел с количеством элементов <literal>625</literal>
608 (значение первого элемента вектора является индексом и должно быть в интервале <literal>[1,624]</literal>, а
609 значения остальных <literal>624</literal> элементов должны лежать в интервале
610 <literal>[0,2^32)</literal>), но не должны быть все нулями); более простая инициализация может быть
611 сделана с помощью только одного целого числа <varname>s1</varname> (<varname>s1</varname> должно
612 лежать в интервале <literal>[0,2^32)</literal>);
617 <term>для kiss</term>
620 должны быть указаны четыре целых числа <varname>s1</varname>, <varname>s2</varname>,
621 <varname>s3</varname>, <varname>s4</varname> на интервале <literal>[0,2^32)</literal>;
626 <term>для clcg2</term>
629 должны быть указаны два целых числа <varname>s1</varname> на интервале
630 <literal>[1,2^31-86]</literal> и <varname>s2</varname> на интервале <literal>[1,2^31-250]</literal>;
635 <term>для clcg4</term>
638 требуются четыре целых числа <varname>s1</varname> на
639 интервале <literal>[1,2^31-2]</literal>, <varname>s2</varname> на интервале <literal>[1,2^31-106]</literal>, <varname>s3</varname>
640 на интервале <literal>[1,2^31-226]</literal>, <varname>s4</varname> на интервале
641 <literal>[1,2^31-326]</literal>;
645 Предостережение: с clcg4 вы устанавливаете семена текущего виртуального генератора, но вы можете
646 потерять синхронизацию между ним и другими виртуальными генераторами (т.е. не гарантируется,
647 что генерируемая последовательность не перекрывается с генерируемой последовательностью
648 другого виртуального генератора) => вместо этого используйте опцию "setall".
654 <term>для urand</term>
657 должно быть указано одно целое число <varname>s1</varname> на интервале <literal>[0,2^31)</literal>.
665 <term>действие = "phr2sd"</term>
668 для заданной фразы <varname>phrase</varname> (символьной строки)
669 <code>Sd = grand("phr2sd", phrase)</code> генерирует вектор
670 <varname>Sd</varname> размером 1 на 2, который может
671 использоваться в качестве семени для изменения состояния
672 основного генератора (изначально подходил для clcg2).
679 <title>Опции, специфичные для clcg4</title>
681 Генератор clcg4 может использоваться как и остальные генераторы, но у него
682 есть то преимущество, что он может быть разделён на несколько
683 (<literal>101</literal>) виртуальных генераторов последовательности которых не
684 перекрываются (когда вы используете классический генератор, то вы можете
685 изменить исходное состояние (семена) для того, чтобы получить другую
686 последовательность, но не гарантируется, что вы получите абсолютно другую
687 последовательность). Каждому виртуальному генератору соответствует
688 последовательность из <literal>2^72</literal> значений, которая далее делится
689 на <literal>V=2^31</literal> сегментов (или блоков) длиной
690 <literal>W=2^41</literal>. Есть возможность вернуть заданный виртуальный
691 генератор в начало последовательности или в начало текущего сегмента или
692 перейти прямо к следующему сегменту. Можно также изменить исходное состояние
693 (семя) генератора <literal>0</literal> с помощью опции
694 <literal>"setall"</literal>, которая затем изменит также исходное состояние
695 остальных виртуальных генераторов так, чтобы получить синхронизацию, т.е. в
696 функции нескольких исходных состояний генератора <literal>0</literal> исходные
697 состояния генераторов <literal>1...100</literal> пересчитываются так, чтобы
698 получить <literal>101</literal> неперекрывающуюся последовательность.
702 <term>действие = "setcgn"</term>
705 <code>grand("setcgn",G)</code> устанавливает текущий виртуальный
706 генератор для clcg4 (когда clcg4 установлен, то есть используется
707 виртуальный генератор (clcg4) номер <varname>G</varname>);
708 виртуальные генераторы clcg4 пронумерованы <literal>0, 1, ..., 100</literal> (а поэтому <varname>G</varname> должно быть целым
709 числом на интервале <literal>[0,100]</literal>); по умолчанию
710 текущим виртуальным генератором является <literal>0</literal>.
715 <term>действие = "getcgn"</term>
718 <code>S = grand("getcgn")</code> возвращает номер текущего виртуального генератора clcg4.
723 <term>действие = "initgn"</term>
726 <code>grand("initgn", I)</code> заново инициализирует состояние текущего виртуального генератора.
733 устанавливает состояние в его исходное семя.
741 устанавливает состояние в его последнее (предыдущее) семя (т. е. в начало текущего сегмента).
749 устанавливает состояние на <literal>W</literal> значений нового семени от его последнего семени (т.е.
750 в начало следующего сегмента) и сбрасывает параметры текущего сегмента.
758 <term>действие = "setall"</term>
761 <code>grand("setall", s1, s2, s3, s4)</code> устанавливает
762 исходное состояние генератора <literal>0</literal> в
763 <varname>s1</varname>, <varname>s2</varname>,
764 <varname>s3</varname>, <varname>s4</varname>. Исходные семена
765 других генераторов устанавливаются так, чтобы была синхронизация.
766 Об ограничениях на <varname>s1</varname>, <varname>s2</varname>,
767 <varname>s3</varname>, <varname>s4</varname> смотри действие
768 <literal>"setsd"</literal>.
773 <term>действие = "advnst"</term>
776 <code>grand("advnst", K)</code> перемещает состояние текущего
777 генератора вперёд на <literal>2^K</literal> значений и сбрасывает
778 исходное семя в это значение.
785 <title>Примеры</title>
787 В следующем примере мы генерируем случайные числа по различным законам
788 распределения и строим соответствующие гистограммы.
790 <programlisting role="example"><![CDATA[
791 // Возвращает матрицу размером 400 на 800 случайных чисел
792 // по нормальному распределению, с матожиданием 0 и дисперсией 1.
793 R = grand(400,800,"nor",0,1);
796 xtitle("Случайные числа по нормальному закону распределения из функции grand","X","Частота");
798 <scilab:image localized="true">
799 R = grand(400,800,"nor",0,1);
801 xtitle("Случайные числа по нормальному закону распределения из функции grand","X","Частота");
804 <programlisting role="example"><![CDATA[
805 // Возвращает матрицу размером 400 на 800 случайных чисел
806 // с равномерным распределением в [0,1).
807 R = grand(400,800,"def");
810 xtitle("Случайные числа с равномерным распределением из функции grand","X","Частота");
812 <scilab:image localized="true">
813 R = grand(400,800,"def");
815 xtitle("Случайные числа с равномерным распределением из функции grand","X","Частота");
818 <programlisting role="example"><![CDATA[
819 // Возвращает матрицу размером 400 на 800 случайных чисел
820 // по распределению Пуассона и матожиданием, равным 5.
821 R = grand(400,800,"poi",5);
824 xtitle("Случайные числа по закону распределения Пуассона из grand","X","Частота");
826 <scilab:image localized="true">
827 R = grand(400,800,"poi",5);
829 xtitle("Случайные числа по закону распределения Пуассона из grand","X","Частота");
833 В следующем примере мы генерируем случайные числа по экспоненциальному распределению, а затем сравниваем эмпирическое распределение с теоретическим.
835 <programlisting role="example"><![CDATA[
838 X = grand(1,N,"exp",lambda);
840 classes = linspace(0,12,25);
843 y = (1/lambda)*exp(-(1/lambda)*x);
845 legend(["Эксперимент" "Теория"]);
846 xtitle("Случайные числа по экспоненциальному закону распределения из функции grand","X","Частота");
848 <scilab:image localized="true">
851 X = grand(1,N,"exp",lambda);
852 classes = linspace(0,12,25);
855 y = (1/lambda)*exp(-(1/lambda)*x);
857 legend(["Эксперимент" "Теория"]);
858 xtitle("Случайные числа по экспоненциальному закону распределения из функции grand","X","Частота");
861 В следующем примере мы генерируем случайные числа по закону гамма-
862 распределения, а затем сравниваем эмпирическое распределение с теоретическим.
864 <programlisting role="example"><![CDATA[
868 R=grand(1,N,"gam",A,B);
869 XS=gsort(R,"g","i")';
871 P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
873 plot(XS,PS,"b-"); // Эмпирическое распределение
874 plot(XS,P,"r-"); // Теоретическое распределение
875 legend(["Эксперимент" "Теория"]);
876 xtitle("Интегральная функция распределения случайных чисел по закону гамма-распределения","X","F");
878 <scilab:image localized="true">
882 R=grand(1,N,"gam",A,B);
883 XS=gsort(R,"g","i")';
885 P=cdfgam("PQ",XS,A*ones(XS),B*ones(XS));
887 plot(XS,PS,"b-"); // Эмпирическое распределение
888 plot(XS,P,"r-"); // Теоретическое распределение
889 legend(["Эксперимент" "Теория"]);
890 xtitle("Интегральная функция распределения случайных чисел по закону гамма-распределения","X","F");
893 В следующем примере мы генерируем 10 случайных целых чисел в интервале
894 <literal>[1,365]</literal>.
896 <programlisting role="example"><![CDATA[
897 grand(10,1,"uin",1,365)
900 В следующем примере мы генерируем <literal>12</literal> перестановок набора
901 чисел <literal>[1, 2, ..., 7]</literal>. Эти <literal>12</literal>
902 перестановок сохраняются столбец за столбцом.
904 <programlisting role="example"><![CDATA[
905 grand(12,"prm",(1:7)')
908 В следующем примере мы формируем гиперматрицу случайных чисел с "нормальным" распределением размерами <varname>10</varname>
909 на <varname>10</varname> на <varname>10</varname> и строим гистограммы. Показываются первый и последний слои.
911 <programlisting role="example"><![CDATA[
912 // Возвращает гиперматрицу случайных чисел с нормальным
913 // распределением, мат. ожидание 0 и среднеквадратичное отклонение 1, // размерами 10 на 10 на 10.
914 // Показаны только первый и последний слои.
915 R = grand(10,10,10,"nor",0,1);
923 <scilab:image localized="true">
924 R = grand(10,10,10,"nor",0,1);
934 <title>Получение более или менее предсказуемых чисел</title>
936 Генераторы псевдослучайных чисел основаны на детерминированных
937 последовательностях. Для того, чтобы получить повторное воспроизведение
938 моделирования, исходное семя генератора равно такой константе, что
939 последовательность будет оставаться одной и той же от одной сессии к другой.
940 Следовательно, по умолчанию, первые числа, производимые функцией
941 <function>grand</function>, всегда одни и те же.
944 В некоторых ситуациях мы можем захотеть инициализировать семя генератора для
945 того, чтобы получить менее предсказуемые числа. В этом случае мы можем
946 инициализировать семя с помощью выходного значения функции
947 <function>getdate</function>:
949 <programlisting role="example"><![CDATA[
955 <title>Тестовый пример для clcg4</title>
957 Пример необходимости возможности разделения clcg4 следующий. Сравниваются два
958 статистических метода по данным разного размера. Первый является
959 бутстреп-методом и считается точным при использовании меньшего количества данных,
960 чем второй метод, который использует только грубую силу. Для первого метода будет
961 генерироваться набор данных размером равномерно распределённым между
962 <literal>25</literal> и <literal>50</literal>. Затем будет генерироваться и
963 анализироваться набор данных определённого размера. Второй метод будет
964 выбирать размер набора данных между <literal>100</literal> и
965 <literal>200</literal>, генерировать данные и анализировать их. Этот процесс
966 будет повторяться <literal>1000</literal> раз. Для уменьшения разброса мы
967 хотим, чтобы числа, используемые в этих двух методах были одинаковыми для
968 каждого из <literal>1000</literal> сравнений. Но второй метод будет
969 использовать больше случайных чисел, чем первый метод и без этого пакета
970 синхронизация была бы затруднительна. С clcg4 это легко. Используем генератор
971 <literal>0</literal> для получения размера выборки для метода один и генератор
972 <literal>1</literal> для получения данных. Затем сбрасываем состояние к
973 начальному текущего блока и делаем то же самое для второго метода. Это
974 гарантирует, что исходные данные для второго метода те же, что использовались
975 в первом методе. Когда они оба закончатся, передвигаем вперёд блок для обоих
979 <refsection role="see also">
980 <title>Смотрите также</title>
981 <simplelist type="inline">
983 <link linkend="rand">rand</link>
986 <link linkend="sprand">sprand</link>
989 <link linkend="ssrand">ssrand</link>