1 <?xml version="1.0" encoding="UTF-8"?>
3 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4 * Copyright (C) 2008 - INRIA
5 * Copyright (C) 2011 - DIGITEO - Michael Baudin
7 * Copyright (C) 2012 - 2016 - Scilab Enterprises
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.
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">
22 <refname>rand</refname>
23 <refpurpose>Случайные числа</refpurpose>
26 <title>Синтаксис</title>
30 r = rand(m1,m2,...,key)
42 <title>Аргументы</title>
45 <term>m1, m2, ...</term>
48 целые числа, размер матрицы случайных чисел <literal>r</literal>.
56 строка, распределение случайных чисел (по умолчанию
57 <literal>key="uniform"</literal>). Доступными значениями являются:
60 <literal>"uniform"</literal> (равновероятный) или <literal>"u"</literal>
63 <literal>"normal"</literal> (нормальный) или <literal>"n"</literal>
73 вещественная или комплексная матрица. Рассматриваются только её
74 вещественное или комплексное содержимое и её размеры.
82 вещественный массив чисел двойной точности (double) размером
83 m1 на m2 на ... со случайными элементами.
91 матрица чисел двойной точности размером 1 на 1, целочисленное значение,
92 положительное, семя генератора случайных чисел (по умолчанию <literal>s=0</literal>).
99 <title>Описание</title>
101 Назначение данной функции в том, чтобы возвращать матрицу чисел двойной точности со
102 случайными вещественными или комплексными элементами. В зависимости от входных аргументов,
103 функция может возвращать матрицу случайных чисел двойной точности или может получать
104 или устанавливать закон распределения случайных чисел, или может получать или
105 устанавливать семя генератора случайных чисел.
109 <title>Генерация случайных чисел</title>
112 <term>r=rand()</term>
115 возвращает матрицу чисел двойной точности размером 1 на 1 с одним случайным
121 <term>r=rand(m1,m2)</term>
124 это матрица случайных чисел размером <literal>m1</literal> на <literal>m2</literal>.
129 <term>r=rand(m1,m2,...,mn)</term>
132 возвращает матрицу случайных чисел размером <literal>m1</literal> на
133 <literal>m2</literal> на ... на <literal>mn</literal>.
138 <term>r=rand(a)</term>
141 возвращает матрицу случайных чисел того же размера, что и <literal>a</literal>.
142 Матрица <literal>r</literal> является вещественной, если <literal>a</literal>
143 является вещественной и <literal>r</literal> является комплексной,
144 если <literal>a</literal> является комплексной матрицей.
151 <title>Смена закона распределения случайных чисел</title>
153 Входной аргумент <literal>key</literal> устанавливает закон распределения генерируемых
158 <term>rand("uniform")</term>
161 устанавливает генератор случайных чисел на генерацию случайных чисел по
162 равновероятному закону. Случайные числа равномерно распределены на интервале
168 <term>rand("normal")</term>
171 устанавливает генератор случайных чисел на генерацию случайных чисел по
172 нормальному (Гаусс-Лапласовскому) закону распределения, с
173 математическим ожиданием 0 и дисперсией 1.
178 <term>key=rand("info")</term>
181 возвращает текущий закон распределения генератора случайных чисел
182 ("uniform" для равновероятного или "normal" для нормального).
189 <title>Получение или установка семени генератора случайных чисел</title>
191 Есть возможность получить или установить семя генератора случайных чисел.
195 <term>s=rand("seed")</term>
197 <para>возвращает текущее значение семени.</para>
201 <term>rand("seed",s)</term>
204 устанавливает семя генератора случайных чисел равным <literal>s</literal>
205 (по умолчанию <literal>s=0</literal> при первом вызове).
212 <title>Примеры</title>
214 В следующем примере мы генерируем случайные числа двойной точности с различными
215 законами распределения.
217 <programlisting role="example"><![CDATA[
218 // Получим одно случайное число (на основе текущего распределения)
221 // Получим матрицу размером 4 на 6 (на основе текущего распределения)
224 // Получим матрицу размером 4 на 6 со значениями элементов,
225 // распределёнными по равновероятному закону распределения
226 r=rand(4,6,"uniform")
228 // Сформируем матрицу случайных чисел того же размера, что и x
232 // Сформируем массив случайных чисел размером 2 на 2 на 2
236 В следующем примере мы изменим закон распределения чисел, генерируемых функцией
237 <literal>rand</literal>. Сначала генерируем числа по нормальному закону распределения,
238 а затем числа но равновероятному закону на интервале [0,1).
240 <programlisting role="example"><![CDATA[
241 // настроим генератор случайных чисел на
242 // нормальный закон распределения
245 // получим текущий закон распределения
248 // настроим генератор случайных чисел на
249 // равновероятный закон распределения
252 // получим текущий закон распределения
256 В следующем примере мы сгенерируем матрицу комплексных чисел размером 2 на 3 по
257 нормальному закону распределения.
259 <programlisting role="example"><![CDATA[
260 // формируем матрицу случайных комплексных чисел размером 2 на 3
261 x=rand(2,3)+%i*rand(2,3)
262 // Формируем матрицу случайных комплексных чисел по нормальному
263 // закону распределения того же размера, что и x
267 В следующем примере мы построим на графике распределение случайных равновероятных чисел,
268 полученных <literal>rand</literal>.
270 <programlisting role="example"><![CDATA[
271 r=rand(1000,1,"uniform");
274 xtitle("Равновероятные числа из rand","X","Частота")
277 В следующем примере мы построим на графике распределение случайных чисел,
278 сгенерированных <literal>rand</literal> по нормальному закону распределения.
280 <programlisting role="example"><![CDATA[
281 r=rand(1000,1,"normal");
284 xtitle("Случайные числа по нормальному закону распределения из","X","Частота")
288 <title>Получение более или менее предсказуемых чисел</title>
290 Генератор псевдослучайных "равновероятных" чисел является детерминированной
291 последовательностью, которая предназначена для воспроизводства независимых одинаково
292 распределённых чисел, равновероятных на интервале [0,1).
295 Для того, чтобы получить повторяемые моделирования, начальное семя генератора случайных
296 чисел равно нулю, так что последовательность будет оставаться одной и той же от одной
297 сессии к другой. Иными словами, начальные числа, производимые <literal>rand()</literal>,
298 всегда: 0.2113249, 0.7560439, ...
301 В некоторых случаях моделирования мы можем захотеть инициализировать семя генератора
302 случайных чисел для того, чтобы получить менее предсказуемые последовательности.
303 В этом случае мы можем инициализировать семя с помощью выходного значения функции
304 <literal>getdate</literal>:
306 <programlisting role="example"><![CDATA[
312 <title>Генератор</title>
314 Генератор случайных "равновероятных" чисел описан в работе Майкла А. Малькольма,
315 (Michael A. Malcolm), Клива Б. Молера (Cleve B. Moler) "Urand, A Universal Random Number
316 Generator" (Urand, Универсальный Генератор Случайных Чисел), Stan-Cs-73-334, январь 1973,
317 факультет информатики, кафедра гуманитарных и естественных наук Стенфордского университета.
320 Это линейный конгруэнтный генератор вида:
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>
334 Согласно авторам, этот генератор является генератором полной длины, иначе говоря,
335 его период равен M = 2<superscript>31</superscript> = 2147483648.
338 Генератор случайных чисел с нормальным распределением (<literal>"normal"</literal>)
339 основан на методе Бокса-Мюллера, где источником равновероятных случайных чисел является Urand.
343 <title>Статистическое качество генератора</title>
345 В функции <link linkend="grand">grand</link> доступны более лучшие генераторы случайных
346 чисел в том смысле, что они имеют как более длинный период, так и более лучшие
347 статистические свойства. В случае, когда качество случайных чисел имеет значение,
348 следует использовать функцию <literal>grand</literal>.
349 Более того, функция <literal>grand</literal> имеет больше возможностей.
352 <refsection role="see also">
353 <title>Смотрите также</title>
354 <simplelist type="inline">
356 <link linkend="grand">grand</link>
359 <link linkend="ssrand">ssrand</link>
362 <link linkend="sprand">sprand</link>