Числа Pseudorandom сгенерированы детерминированными алгоритмами. Они "случайны" в том смысле, что в среднем они проходят статистические тесты относительно своего распределения и корреляции. Они отличаются от истинных случайных чисел, в которых они сгенерированы алгоритмом, а не действительно вероятностным процессом.
Random number generators (RNG) как те в MATLAB® является алгоритмами для генерации псевдослучайных чисел с заданным распределением.
Для получения дополнительной информации о графический интерфейсе пользователя для генерации случайных чисел от поддерживаемых дистрибутивов смотрите, Исследуют Генерацию случайных чисел пользовательский интерфейс.
Методы для генерации псевдослучайных чисел обычно запускаются с универсальных случайных чисел, как rand MATLAB, который производит функция. Методы, описанные в этом разделе, детализируют, как произвести случайные числа из других дистрибутивов.
Прямые методы непосредственно используют определение распределения.
Например, рассмотрите биномиальные случайные числа. Биномиальное случайное число является количеством голов в
бросках монеты с вероятностью
головы на любом одном броске. Если вы генерируете
универсальные случайные числа на интервале (0,1) и считаете номер меньше, чем
, то количество является биномиальным случайным числом с параметрами
и
.
Эта функция является простой реализацией биномиального RNG с помощью прямого подхода:
function X = directbinornd(N,p,m,n) X = zeros(m,n); % Preallocate memory for i = 1:m*n u = rand(N,1); X(i) = sum(u < p); end end
Например:
rng('default') % For reproducibility X = directbinornd(100,0.3,1e4,1); histogram(X,101)

Функция binornd использует измененный прямой метод, на основе определения биномиальной случайной переменной как сумма Бернуллиевых случайных переменных.
Можно легко преобразовать предыдущий метод в генератор случайных чисел для распределения Пуассона с параметром
. Распределение Пуассона является ограничивающим случаем биномиального распределения как
бесконечность подходов,
нуль подходов, и
считается зафиксированное в
. Чтобы сгенерировать случайные числа Пуассона, создайте версию предыдущего генератора, который вводит
, а не
и
, и внутренне устанавливает
на некоторое большое количество и
на
.
Функция poissrnd на самом деле использует два прямых метода:
Метод времени ожидания для маленьких значений 
Метод из-за Аренса и Дитера для больших значений 
Методы инверсии основаны на наблюдении, что непрерывные кумулятивные функции распределения (cdfs) располагаются однородно на интервале (0,1). Если
универсальное случайное число на (0,1), то использование
генерирует случайное число
от непрерывного распределения с заданным cdf
.
Например, следующий код генерирует случайные числа от определенного Экспоненциального распределения с помощью инверсии cdf и универсального генератора случайных чисел MATLAB® rand:
rng('default') % For reproducibility mu = 1; X = expinv(rand(1e4,1),mu);
Сравните распределение сгенерированных случайных чисел к PDF заданного экспоненциала путем масштабирования PDF к области гистограммы раньше отображало распределение:
numbins = 50; h = histogram(X,numbins); hold on histarea = h.BinWidth*sum(h.Values); x = h.BinEdges(1):0.001:h.BinEdges(end); y = exppdf(x,mu); plot(x,histarea*y,'r','LineWidth',2) hold off

Методы инверсии также работают на дискретные распределения. Чтобы сгенерировать случайное число
от дискретного распределения с вектором вероятностной меры
где
, сгенерируйте универсальное случайное число
на (0,1) и затем установите
если
.
Например, следующая функция реализует метод инверсии для дискретного распределения с вектором вероятностной меры
:
function X = discreteinvrnd(p,m,n) X = zeros(m,n); % Preallocate memory for i = 1:m*n u = rand; I = find(u < cumsum(p)); X(i) = min(I); end end
Используйте функцию, чтобы сгенерировать случайные числа от любого дискретного распределения:
p = [0.1 0.2 0.3 0.2 0.1 0.1]; % Probability mass vector
X = discreteinvrnd(p,1e4,1);
h = histogram(X,length(p));
bar(1:length(p),h.Values)

Функциональная форма некоторых дистрибутивов мешает или длительный, чтобы сгенерировать случайные числа, использующие прямой или методы инверсии. Методы приемного отклонения обеспечивают альтернативу в этих случаях.
Методы приемного отклонения начинаются с универсальных случайных чисел, но требуют дополнительного генератора случайных чисел. Если ваша цель состоит в том, чтобы сгенерировать случайное число от непрерывного распределения с PDF
, методы приемного отклонения сначала генерируют случайное число от непрерывного распределения с PDF
, удовлетворяющим
для некоторых
и так далее.

Непрерывный RNG приемного отклонения продолжает можно следующим образом:
Выбирает плотность
.
Находит константу
таким образом это
для всех
.
Генерирует универсальное случайное число
.
Генерирует случайное число
от
.
Если
, принимает и возвращается
. В противном случае отклонения
и переходят к шагу 3.
Для эффективности "дешевый" метод необходим для генерации случайных чисел от
, и скаляр
должен быть маленьким. Ожидаемое количество итераций, чтобы произвести одно случайное число
.
Следующая функция реализует метод приемного отклонения для генерации случайных чисел от
данного PDF
, RNG grnd для
, и константа
:
function X = accrejrnd(f,g,grnd,c,m,n) X = zeros(m,n); % Preallocate memory for i = 1:m*n accept = false; while accept == false u = rand(); v = grnd(); if c*u <= f(v)/g(v) X(i) = v; accept = true; end end end end
Например, функция
удовлетворяет условия для PDF на
(неотрицательный, и объединяется к 1). Экспоненциальный PDF со средним значением 1
, доминирует
для
большего, чем приблизительно 2,2. Таким образом можно использовать rand и exprnd, чтобы сгенерировать случайные числа от
:
f = @(x)x.*exp(-(x.^2)/2); g = @(x)exp(-x); grnd = @()exprnd(1); rng('default') % For reproducibility X = accrejrnd(f,g,grnd,2.2,1e4,1);
PDF
является на самом деле Распределение Релея с параметром формы 1. Этот пример сравнивает распределение случайных чисел, сгенерированных методом приемного отклонения со сгенерированными raylrnd:
Y = raylrnd(1,1e4,1); histogram(X) hold on histogram(Y) legend('A-R RNG','Rayleigh RNG')

Функция raylrnd использует метод преобразования, выражая случайную переменную Рейли с точки зрения случайной переменной хи-квадрата, которая вы вычисляете использование randn.
Методы приемного отклонения также работают на дискретные распределения. В этом случае цель состоит в том, чтобы сгенерировать случайные числа от распределения с вероятностной мерой
, приняв, что у вас есть метод для генерации случайных чисел от распределения с вероятностной мерой
. RNG продолжает можно следующим образом:
Выбирает плотность
.
Находит константу
таким образом это
для всех
.
Генерирует универсальное случайное число
.
Генерирует случайное число
от
.
Если
, принимает и возвращается
. В противном случае отклонения
и переходят к шагу 3.