RandStream

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

Конструктор

RandStream

Описание

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

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

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

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

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

Свойства

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

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

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

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

Методы

МетодОписание
RandStreamСоздайте поток случайных чисел.
RandStream.createСоздайте несколько независимых потоков случайных чисел.
получениеПолучите свойства случайного потокового объекта.
listПеречислите доступные алгоритмы генератора случайных чисел.
наборУстановите случайное потоковое свойство.
RandStream.getGlobalStreamПолучите глобальный поток случайных чисел.
RandStream.setGlobalStreamУстановите глобальный поток случайных чисел.
сбросСбросьте поток к его начальному внутреннему состоянию
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

Сбросьте глобальный поток случайных чисел, который лежит в основе rand, randi, и 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

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

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

Пример 7

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

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

Пример 8

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

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

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

| | |

Была ли эта тема полезной?