RandStream
rand
randn
randi
, и randperm
функции чертят случайные числа от базового потока случайных чисел, названного глобальным потоком. Глобальным потоком является RandStream
объект. Простой способ управлять глобальным потоком состоит в том, чтобы использовать rng
функция. Для более всестороннего управления, RandStream
класс позволяет вам создать отдельный поток из глобального потока, получить указатель на глобальный поток и управлять генерацией случайных чисел.
Используйте rng
установить генератор случайных чисел на seed по умолчанию (0
) и алгоритм (Вихрь Мерсенна). Сохраните настройки генератора.
rng('default')
s = rng
s = struct with fields:
Type: 'twister'
Seed: 0
State: [625x1 uint32]
Создайте 1 6 вектор-строку из равномерно распределенных случайных значений между 0 и 1.
x = rand(1,6)
x = 1×6
0.8147 0.9058 0.1270 0.9134 0.6324 0.0975
Используйте RandStream.getGlobalStream
возвратить указатель на глобальный поток, то есть, текущий глобальный поток что rand
генерирует случайные числа от. Если вы используете RandStream.getGlobalStream
чтобы получить указатель на глобальный поток, вы видите изменения, которые вы внесли в глобальный поток с помощью rng
.
globalStream = RandStream.getGlobalStream
globalStream = mt19937ar random stream (current global stream) Seed: 0 NormalTransform: Ziggurat
Измените seed генератора и алгоритм, и создайте новый случайный вектор-строку. Покажите текущий глобальный поток что rand
генерирует случайные числа от.
rng(1,'philox')
xnew = rand(1,6)
xnew = 1×6
0.5361 0.2319 0.7753 0.2390 0.0036 0.5262
globalStream = RandStream.getGlobalStream
globalStream = philox4x32_10 random stream (current global stream) Seed: 1 NormalTransform: Inversion
Затем восстановите исходные настройки генератора и создайте случайный вектор. Результат совпадает с исходным вектором-строкой x
созданный с генератором по умолчанию.
rng(s) xold = rand(1,6)
xold = 1×6
0.8147 0.9058 0.1270 0.9134 0.6324 0.0975
По умолчанию, функции генерации случайных чисел, такие как rand
, используйте глобальный поток случайных чисел. Чтобы задать различный поток, создайте другой RandStream
объект. Передайте его как первый входной параметр к rand
. Например, создайте 1 6 вектор из случайных чисел с помощью SIMD-ориентированного Быстрого Вихря Мерсенна.
myStream = RandStream('dsfmt19937')
myStream = dsfmt19937 random stream Seed: 0 NormalTransform: Ziggurat
r = rand(myStream,1,6)
r = 1×6
0.0306 0.2131 0.2990 0.3811 0.8635 0.1334
Когда вы вызываете rand
функция с myStream
как первый входной параметр, это чертит числа от myStream
и не влияет на результаты глобального потока.
Если вы хотите установить myStream
как глобальный поток, можно использовать RandStream.setGlobalStream
объектная функция.
RandStream.setGlobalStream(myStream) globalStream = RandStream.getGlobalStream
globalStream = dsfmt19937 random stream (current global stream) Seed: 0 NormalTransform: Ziggurat
Во многих случаях, rng
функция - все, что необходимо управлять глобальным потоком, но RandStream
класс позволяет управление некоторыми расширенными функциями, такими как выбор алгоритма, используемого для нормальных случайных значений.
Например, создайте RandStream
возразите и задайте алгоритм преобразования, чтобы сгенерировать нормально распределенные псевдослучайные значения при использовании randn
. Сгенерируйте нормально распределенные псевдослучайные значения с помощью Polar
алгоритм преобразования, вместо Ziggurat
по умолчанию алгоритм преобразования.
myStream = RandStream('mt19937ar','NormalTransform','Polar')
myStream = mt19937ar random stream Seed: 0 NormalTransform: Polar
Установите myStream
как глобальный поток. Создайте 6 случайных чисел с нормальным распределением от глобального потока.
RandStream.setGlobalStream(myStream) randn(1,6)
ans = 1×6
0.2543 -0.7733 -1.7416 0.3686 0.5965 -0.0191