MATLAB® использует алгоритмы, чтобы сгенерировать числа pseudoindependent и pseudorandom. Эти числа не строго случайны и независимы в математическом смысле, но они проходят различные статистические тесты случайности и независимости, и их вычисление может быть повторено для тестирования или диагностических целей.
rand
, randi
, randn
, и randperm
функции являются первичными функциями для создания массивов случайных чисел. rng
функция позволяет вам управлять seed и алгоритмом, который генерирует случайные числа.
Существует четыре основных функции случайных чисел: rand
, randi
, randn
, и randperm
. rand
функция возвращает вещественные числа между 0 и 1, которые получены из равномерного распределения. Например:
rng('default')
r1 = rand(1000,1);
r1
1000 1 вектор-столбец, содержащий действительные полученные из равномерного распределения числа с плавающей запятой. Все значения в r1
находятся в открытом интервале (0, 1). Гистограмма этих значений является примерно плоской, который указывает на довольно универсальную выборку чисел. randi
функция возвращает double
целочисленные значения чертятся от дискретного равномерного распределения. Например,
r2 = randi(10,1000,1);
r2
1000 1 вектор-столбец, содержащий целочисленные значения, чертившие от дискретного равномерного распределения, область значений которого находится в близком интервале [1, 10]. Гистограмма этих значений является примерно плоской, который указывает на довольно универсальную выборку целых чисел между 1 и 10. randn
функция возвращает массивы действительных чисел с плавающей запятой, которые чертятся от стандартного нормального распределения. Например:
r3 = randn(1000,1);
r3
1000 1 вектор-столбец, содержащий числа, чертившие от стандартного нормального распределения. Гистограмма r3
похож на примерно нормальное распределение, среднее значение которого 0, и стандартное отклонение равняется 1.Можно использовать randperm
функция, чтобы создать double
массив случайных целочисленных значений, которые не имеют никаких повторных значений. Например,
r4 = randperm(15,5);
r4
массив 1 на 5, содержащий целые числа, случайным образом выбранные из области значений [1, 15]. В отличие от этого, randi
, который может возвратить массив, содержащий повторенные значения, массив, возвращенный randperm
не имеет никаких повторных значений.Последовательные вызовы любой из этих функций возвращают различные результаты. Это поведение полезно для создания нескольких различных массивов случайных значений.
MATLAB предлагает несколько опций алгоритма генератора, которые получены в итоге в таблице.
Значение | Имя генератора | Ключевое слово генератора |
---|---|---|
'twister' | Вихрь Мерсенна (используемый потоком по умолчанию при запуске MATLAB) | mt19937ar |
'simdTwister' | SIMD-ориентированный быстрый Вихрь Мерсенна | dsfmt19937 |
'combRecursive' | Объединенный несколько рекурсивные | mrg32k3a |
'multFibonacci' | Мультипликативный изолированный Фибоначчи | mlfg6331_64 |
'philox' | Philox 4x32 генератор с 10 раундами | philox4x32_10 |
'threefry' | Threefry 4x64 генератор с 20 раундами | threefry4x64_20 |
'v4' | Устаревший генератор версии 4.0 MATLAB | mcg16807 |
'v5uniform' | Устаревший универсальный генератор версии 5.0 MATLAB | swb2712 |
'v5normal' | Устаревшая версия 5.0 MATLAB нормальный генератор | shr3cong |
Используйте rng
функционируйте, чтобы установить seed и генератор, используемый rand
, randi
, randn
, и randperm
функции. Например, rng(0,'twister')
сбросьте генератор к его состоянию по умолчанию. Чтобы избежать повторения массивов случайных чисел, когда MATLAB перезапускает, смотрите, Почему Случайные числа Повторяются После Запуска?
Для получения дополнительной информации об управлении состоянием генератора случайных чисел, чтобы повторить вычисления с помощью тех же случайных чисел или гарантировать, что различные случайные числа используются в повторных вычислениях, смотрите Генерацию случайных чисел Управления.
rand
и randn
функции генерируют значения в двойной точности по умолчанию.
rng('default')
A = rand(1,5);
class(A)
ans = 'double'
Задавать класс как дважды явным образом:
rng('default') B = rand(1,5,'double'); class(B)
ans = 'double'
isequal(A,B)
ans = 1
rand
и randn
может также сгенерировать значения в одинарной точности.
rng('default') A = rand(1,5,'single'); class(A)
ans = 'single'
Значения эквивалентны, если вы бросили значения двойной точности от предыдущего примера. Случайный поток, что функции чертят от усовершенствований тот же путь независимо от того, какой класс значений возвращен.
A,B
A = 0.8147 0.9058 0.1270 0.9134 0.6324 B = 0.8147 0.9058 0.1270 0.9134 0.6324
randi
поддержки оба целочисленных типа и одинарная или двойная точность.
A = randi([1 10],1,5,'double');
class(A)
ans = 'double'
B = randi([1 10],1,5,'uint8');
class(B)
ans = 'uint8'
rand
| randi
| randn
| randperm
| rng