rand
randn
, и randi
чертите случайные числа от базового потока случайных чисел, названного глобальным потоком. rng
функция обеспечивает простой способ управлять глобальным потоком. Для более всестороннего управления, RandStream
класс позволяет вам получать указатель на глобальный поток и управлять генерацией случайных чисел.
Получите указатель на глобальный поток можно следующим образом:
globalStream = RandStream.getGlobalStream globalStream = mt19937ar random stream (current global stream) Seed: 0 NormalTransform: Ziggurat
Возвратите свойства потока с get
метод:
get(globalStream) Type: 'mt19937ar' NumStreams: 1 StreamIndex: 1 Substream: 1 Seed: 0 State: [625x1 uint32] NormalTransform: 'Ziggurat' Antithetic: 0 FullPrecision: 1
Теперь используйте rand
функция, чтобы сгенерировать универсальные случайные значения от глобального потока.
rand(1,5);
Используйте randn
и randi
функции, чтобы сгенерировать нормальные случайные значения и целочисленные случайные значения от глобального потока.
A = randi(100,1,5); A = randn(1,5);
State
свойство является внутренним состоянием генератора. Можно сохранить State
из globalStream
.
myState = globalStream.State;
Используя myState
, можно восстановить состояние globalStream
и воспроизведите предыдущие результаты.
myState = globalStream.State; A = rand(1,100); globalStream.State = myState; B=rand(1,100); isequal(A,B) ans = 1
rand
randi
, и randn
получите доступ к глобальному потоку. Поскольку все эти функции получают доступ к тому же базовому потоку, вызову, каждый влияет на значения, произведенные другими в последующих вызовах.
globalStream.State = myState; A = rand(1,100); globalStream.State = myState; randi(100); B = rand(1,100); isequal(A,B) ans = 0
Глобальный поток является объектом указателя RandStream
класс. RandStream.getGlobalStream
возвращает указатель. Свойства глобального потока могут быть просмотрены или изменены от любого указателя до потока.
stream1=RandStream.getGlobalStream; stream2=RandStream.getGlobalStream; stream1.NormalTransform='Polar'; stream2.NormalTransform ans = Polar
Следующая таблица показывает методы, доступные для RandStream
класс. Статические методы обозначаются с синтаксисом RandStream.methodName
.
Метод | Описание |
---|---|
RandStream | Создайте поток случайных чисел |
RandStream.create | Создайте несколько независимых потоков случайных чисел |
get | Получите свойства случайного потока |
RandStream.list | Перечислите доступные алгоритмы генератора случайных чисел |
RandStream.getGlobalStream | Получите глобальный поток случайных чисел |
RandStream.setGlobalStream | Установите глобальный поток случайных чисел |
set | Установите свойство случайного потока |
reset | Сбросьте поток к его начальному внутреннему состоянию |
rand | Сгенерируйте псевдослучайные числа от равномерного распределения |
randn | Сгенерируйте псевдослучайные числа от стандартного нормального распределения |
randi | Сгенерируйте псевдослучайные целые числа от универсального дискретного распределения |
randperm | Случайное сочетание множества значений |
Свойствам случайного потока дают следующую таблицу.
Свойство | Описание |
---|---|
Type | Алгоритм Генератора (Только для чтения) используется потоком. RandStream.list задает возможные генераторы. |
Seed | Значение Seed (Только для чтения) раньше создавало поток. |
NumStreams | Количество (Только для чтения) потоков в группе, в которой был создан текущий поток. |
StreamIndex | Индекс (Только для чтения) текущего потока из числа группы потоков, с которыми был создан текущий поток. |
State | Внутреннее состояние генератора. Не зависьте от формата этого свойства. Значение вы присваиваете S.State должно быть значение, ранее считанное из S.State . |
Substream | Индекс подпотока, в который в настоящее время установлен поток. Значение по умолчанию равняется 1. Несколько подпотоков не поддержаны всеми типами генератора; мультипликативный изолированный генератор Фибоначчи (mlfg6331_64 ) и объединенный несколько рекурсивный генератор (mrg32k3a ) поддержите подпотоки. |
NormalTransform | Алгоритм преобразования используется randn(s, ...) сгенерировать нормальные псевдослучайные значения. Возможными значениями является 'Ziggurat' полярный , или 'Inversion' . |
Antithetic | Логическое значение, указывающее, ли S генерирует прямо противоположные псевдослучайные значения. Для универсальных значений это обычные значения, вычтенные от 1. Значение по умолчанию является ложным. |
FullPrecision | Логическое значение, указывающее, ли s генерирует значения с помощью его полной точности. Некоторые генераторы могут создать псевдослучайную стоимость быстрее, но с меньшим количеством случайных битов, если FullPrecision является ложным. Значение по умолчанию верно. |
Предположим, что вы хотите повторить симуляцию. RandStream
класс дает вам несколько способов реплицировать выход. Как показано в предыдущем примере, можно сохранить состояние глобального потока.
myState=GlobalStream.State; A=rand(1,100); GlobalStream.State=myState; B=rand(1,100); isequal(A,B) ans = 1
Можно также сбросить поток к его начальным установкам с методом reset
.
reset(GlobalStream) A=rand(1,100); reset(GlobalStream) B=rand(1,100); isequal(A,B) ans = 1
rand
и randn
сгенерируйте значения в двойной точности по умолчанию.
GlobalStream=RandStream.getGlobalStream; myState=GlobalStream.State; A=rand(1,5); class(A) ans = double
Задавать класс как дважды явным образом:
GlobalStream.State=myState; B=rand(1,5,'double'); class(B) ans = double isequal(A,B) ans = 1
rand
и randn
также сгенерирует значения в одинарной точности.
GlobalStream.State=myState; A=rand(1,5,'single'); class(A) ans = single
Значения эквивалентны, если вы бросили значения двойной точности от предыдущего примера. Случайный поток, что функции чертят от усовершенствований тот же путь независимо от того, какой класс значений возвращен.
A,B A = 0.8235 0.6948 0.3171 0.9502 0.0344 B = 0.8235 0.6948 0.3171 0.9502 0.0344
randi
поддержки оба целочисленных типа и одинарная или двойная точность.
A=randi([1 10],1,5,'double'); class(A) ans = double B=randi([1 10],1,5,'uint8'); class(B) ans = uint8