randrandn, и 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 =
1randrandi, и 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 =
1rand и 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 =
1rand и 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.0344randi поддержки оба целочисленных типа и одинарная или двойная точность.
A=randi([1 10],1,5,'double'); class(A) ans = double B=randi([1 10],1,5,'uint8'); class(B) ans = uint8