В более ранних версиях MATLAB®, вы управляли генератором случайных чисел, используемым rand
и randn
функции с 'seed'
, 'state'
или 'twister'
входные параметры. Например:
rand('seed',sd) randn('seed',sd) rand('state',s) randn('state',s) rand('twister',5489)
Эти синтаксисы относятся к разным типам генераторов, и они больше не рекомендуются по следующим причинам:
Термины 'seed'
и 'state'
вводят в заблуждение имена генераторов.
Все генераторы кроме 'twister'
испорчены.
Они излишне используют различные генераторы для rand
и randn
.
Чтобы оценить влияние замены нежелательных синтаксисов в существующем коде, выполните следующие команды в начале сеанса MATLAB:
warning('on','MATLAB:RandStream:ActivatingLegacyGenerators') warning('on','MATLAB:RandStream:ReadingInactiveLegacyGeneratorState')
Используйте rng
функционируйте, чтобы управлять разделяемым генератором, используемым rand
, randn
, randi
и вся другая генерация случайных чисел функционирует как randperm
, sprand
, и так далее. Изучить, как использовать rng
функция, когда заменяющий препятствовавшие синтаксисы, займите некоторое время, чтобы изучить их функцию. Это должно помочь вам видеть который новый rng
синтаксис лучше всего удовлетворяет вашим потребностям.
Первый вход к rand(Generator,s)
или randn(Generator,s)
заданный тип генератора, аналогичного описанному здесь.
|
v4
и v5
генераторы больше не рекомендуются, если вы не пытаетесь точно воспроизвести случайные числа, сгенерированные в более ранних версиях MATLAB. Самый простой способ обновить ваш код состоит в том, чтобы использовать rng
. rng
функционируйте заменяет имена для rand
и randn
генераторы можно следующим образом.
Имя Генератора rand/randn | Имя Генератора rng |
---|---|
'seed' | 'v4' |
'state' |
|
'twister' | 'twister' (рекомендуемый) |
Наиболее популярные способы использования целочисленного seed sd
в rand(Generator,sd)
синтаксис был к:
Воспроизведите точно те же случайные числа каждый раз, когда (e.g., при помощи seed такой как 0, 1, или 3141879)
Попытайтесь гарантировать, что MATLAB всегда дает различные случайные числа в отдельных запусках (например, при помощи seed, таких как sum(100*clock)
)
Следующая таблица показывает замены для синтаксисов с целочисленным seed sd
.
Первый столбец показывает нежелательный синтаксис с rand
и randn
.
Второй столбец показывает, как точно воспроизвести нежелательное поведение с новым rng
функция. В большинстве случаев это сделано путем определения устаревшего типа генератора, такого как v4 или v5 генераторы, который больше не рекомендуется.
Третий столбец показывает рекомендуемую альтернативу, которая не задает дополнительный вход типа генератора к rng
. Поэтому, если вы всегда не используете Generator
входной параметр, rand
, randn
, и randi
только используйте Генератор случайных чисел Вихрь Мерсенна по умолчанию, который используется при запуске MATLAB. В будущих релизах, когда новые генераторы заменят Вихрь Мерсенна, этот код будет использовать новое значение по умолчанию.
Препятствовавший rand/randn Синтаксис | Не рекомендуемый: воспроизведите нежелательное поведение точно путем определения типа генератора | Рекомендуемая альтернатива: не заменяет тип генератора |
---|---|---|
rand('twister',5489) | rng(5489,'twister') | rng('default') |
rand('seed',sd) | rng(sd,'v4') | rng(sd) |
randn('seed',sd) | ||
rand('state',sd) | rng(sd,'v5uniform') | |
randn('state',sd) | rng(sd,'v5normal') | |
rand('seed',sum(100*clock)) | rng(sum(100*clock),'v4') | rng('shuffle') |
Наиболее популярный способ использования вектора состояния (показанный здесь как st
) в rand(Generator,st)
синтаксис должен был воспроизвести точно случайные числа, сгенерированные в отдельном моменте в алгоритме или итерации. Например, вы могли использовать этот вектор в качестве помощи в отладке.
rng
функционируйте изменяет шаблон сохранения и восстановления состояния генератора случайных чисел как показано в следующей таблице. Пример в левом столбце принимает, что вы используете v5
универсальный генератор. Пример в правом столбце использует новый синтаксис и работает на любой генератор, который вы используете.
Нежелательный Синтаксис Используя rand/randn | Новый Синтаксис Используя rng |
---|---|
% Save v5 generator state. st = rand('state'); % Call rand. x = rand; % Restore v5 generator state. rand('state',st); % Call rand again and hope % for the same results. y = rand |
% Get generator settings. s = rng; % Call rand. x = rand; % Restore previous generator % settings. rng(s); % Call rand again and % get the same results. y = rand |
Для демонстрации посмотрите это учебное видео.
Если существует код, который вы не можете или не разрешены изменить, и вы знаете, что он использует нежелательные синтаксисы управления генератором случайных чисел, важно помнить, что, когда вы используете тот код, MATLAB переключится в legacy mode. В устаревшем режиме, rand
и randn
управляются отдельными генераторами, каждым с их собственными настройками.
Вызовы rand
в устаревшем режиме используют одно из следующего:
'v4'
генератор, которым управляет rand('seed', ...)
'v5uniform'
генератор, которым управляет rand('state', ...)
'twister'
генератор, которым управляет rand('twister', ...)
Вызовы randn
в устаревшем режиме используют одно из следующего:
'v4'
генератор, которым управляет randn('seed', ...)
'v5normal'
генератор, которым управляет randn('state', ...)
Если код, который вы используете, помещает MATLAB в устаревший режим, используйте следующую команду, чтобы выйти из устаревшего режима и возвратиться к генератору запуска по умолчанию:
rng default
В качестве альтернативы, чтобы охранять вокруг кода, который помещает MATLAB в устаревший режим, используйте:
s = rng % Save current settings of the generator. ... % Call code using legacy random number generator syntaxes. rng(s) % Restore previous settings of the generator.