RandStream

Поток случайных чисел

Конструктор

RandStream

Описание

Псевдослучайные числа в MATLAB® прибывают из одного или нескольких потоков случайных чисел. Самый простой способ сгенерировать массивы случайных чисел состоит в том, чтобы использовать randrandn, или randi. Эти функции все используют тот же поток универсальных случайных чисел, известных the global stream. Можно создать другие потоки, которые действуют отдельно от глобального потока, и можно использовать их randrandi, или randn методы, чтобы сгенерировать массивы случайных чисел. Можно также создать поток случайных чисел и сделать его глобальным потоком.

Чтобы создать один поток случайных чисел, используйте RandStream конструктор. Чтобы создать несколько независимых потоков случайных чисел, используйте RandStream.create. rng функция обеспечивает простой интерфейс, чтобы создать новый глобальный поток.

stream = RandStream.getGlobalStream возвращает глобальный поток случайных чисел, то есть, тот, в настоящее время используемый randrandi, и randn функции.

prevstream = RandStream.setGlobalStream(stream) называет поток случайных чисел stream как новый глобальный поток, который будет использоваться randrandi, и randn функции, и возвращают предыдущий глобальный поток.

Поток случайных чисел s имеет свойства, которые управляют его поведением. Доступ или присвоение к свойству с помощью p = s.Property или s.Property = p. В следующей таблице перечислены заданные свойства:

Свойства

СвойствоОписание
TypeАлгоритм Генератора (Только для чтения) используется потоком. Список возможных генераторов дан RandStream.list.
SeedЗначение Seed (Только для чтения) раньше создавало поток.
NumStreamsКоличество (Только для чтения) потоков в группе, в которой был создан текущий поток.
StreamIndexИндекс (Только для чтения) текущего потока из числа группы потоков, с которыми это было создано.
State

Внутреннее состояние генератора. Вы не должны зависеть от формата этого свойства. Значение вы присваиваете S.State должно быть значение, считанное из S.State ранее. Используйте reset возвратить поток в предсказуемое состояние не ранее читая из State свойство.

Последовательность случайных чисел, произведенных потоком случайных чисел s определяется внутренним состоянием его генератора случайных чисел. Сохранение и восстановление внутреннего состояния генератора с State свойство позволяет вам воспроизводить последовательность случайных чисел.

SubstreamИндекс подпотока, в который в настоящее время установлен поток. Значение по умолчанию равняется 1. Несколько подпотоков не поддержаны всеми типами генератора; мультипликативный изолированный генератор Фибоначчи (mlfg6331_64) и объединенный несколько рекурсивный генератор (mrg32k3a) поддержите подпотоки.
NormalTransformАлгоритм преобразования используется randn(s, ...) сгенерировать нормальные псевдослучайные значения. Возможными значениями является 'Ziggurat'полярный, или 'Inversion'.
AntitheticЛогическое значение, указывающее, ли S генерирует прямо противоположные псевдослучайные значения, то есть, обычные значения, вычтенные от 1. Значение по умолчанию является ложным.
FullPrecisionЛогическое значение, указывающее, ли S генерирует значения с помощью его полной точности. Некоторые генераторы могут создать псевдослучайную стоимость быстрее, но с меньшим количеством случайных битов, если FullPrecision является ложным. Значение по умолчанию верно.

Методы

МетодОписание
RandStreamСоздайте поток случайных чисел.
RandStream.createСоздайте несколько независимых потоков случайных чисел.
getПолучите свойства случайного потокового объекта.
listПеречислите доступные алгоритмы генератора случайных чисел.
setУстановите случайное потоковое свойство.
RandStream.getGlobalStreamПолучите глобальный поток случайных чисел.
RandStream.setGlobalStreamУстановите глобальный поток случайных чисел.
resetСбросьте поток к его начальному внутреннему состоянию
randПсевдослучайные числа от равномерного распределения
randnПсевдослучайные числа от стандартного нормального распределения
randiПсевдослучайные целые числа от универсального дискретного распределения
randpermСлучайное сочетание множества значений

Примеры

Пример 1

Создайте единый поток и определяйте его как текущий глобальный поток:

s = RandStream('mt19937ar','Seed',1);
RandStream.setGlobalStream(s);

Пример 2

Создайте три независимых потока:

[s1,s2,s3] = RandStream.create('mrg32k3a','NumStreams',3);
r1 = rand(s1,100000,1);
r2 = rand(s2,100000,1);
r3 = rand(s3,100000,1);
corrcoef([r1,r2,r3])

Пример 3

Создайте только один поток из набора трех независимых потоков и определяйте его как текущий глобальный поток:

s2 = RandStream.create('mrg32k3a','NumStreams',3,...
     'StreamIndices',2);
RandStream.setGlobalStream(s2);

Пример 4

Сбросьте глобальный поток случайных чисел, который лежит в основе randrandi, и randn назад к его началу, чтобы воспроизвести предыдущие результаты:

stream = RandStream.getGlobalStream;
reset(stream);

Пример 5

Сохраните и восстановите состояние текущего глобального потока, чтобы воспроизвести выход rand:

stream = RandStream.getGlobalStream;
savedState = stream.State;
u1 = rand(1,5)
u1 =
    0.8147    0.9058    0.1270    0.9134    0.6324

stream.State = savedState;
u2 = rand(1,5)
u2 =
    0.8147    0.9058    0.1270    0.9134    0.6324
u2 содержит точно те же значения как u1.

Пример 6

Сбросьте глобальный поток случайных чисел к его начальным установкам. Это вызывает randrandi, и randn запускаться, как будто в новом сеансе работы с MATLAB:

s = RandStream('mt19937ar','Seed',0);
RandStream.setGlobalStream(s);

Пример 7

Повторно инициализируйте глобальный поток случайных чисел с помощью seed на основе текущего времени. Это вызывает randrandi, и randn возвращать различные значения в различных сеансах работы с MATLAB. Обычно не желательно сделать это несколько раз на сеанс работы с MATLAB, когда это может влиять на статистические свойства случайных чисел, которые производит MATLAB:

s = RandStream('mt19937ar','Seed','shuffle');
RandStream.setGlobalStream(s);

Пример 8

Измените алгоритм преобразования что randn использование, чтобы создать нормальную псевдослучайную стоимость от универсальных значений. Это не заменяет или сбрасывать глобальный поток.

stream = RandStream.getGlobalStream;
stream.NormalTransform = 'inversion'

Смотрите также

| | |