Создание массивов случайных чисел

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 MATLABmcg16807
'v5uniform'Устаревший универсальный генератор версии 5.0 MATLABswb2712
'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'

Смотрите также

| | | |

Похожие темы