Числа Pseudorandom сгенерированы детерминированными алгоритмами. Они "случайны" в том смысле, что в среднем они проходят статистические тесты относительно своего распределения и корреляции. Они отличаются от истинных случайных чисел, в которых они сгенерированы алгоритмом, а не действительно вероятностным процессом.
Random number generators (RNG) как те в MATLAB® алгоритмы для генерации псевдослучайных чисел с заданным распределением.
Для получения дополнительной информации о графический интерфейсе пользователя для генерации случайных чисел от поддерживаемых распределений смотрите, Исследуют Генерацию случайных чисел пользовательский интерфейс.
Методы для генерации псевдослучайных чисел обычно запускаются с универсальных случайных чисел, как MATLAB rand функция производит. Методы, описанные в этом разделе, детализируют, как произвести случайные числа из других распределений.
Прямые методы непосредственно используют определение распределения.
Например, рассмотрите биномиальные случайные числа. Биномиальное случайное число является количеством голов в броски монеты с вероятностью из головы на любом одном броске. Если вы генерируете универсальные случайные числа на интервале (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 заданного экспоненциала.
numbins = 50; h = histogram(X,numbins,'Normalization','pdf'); hold on x = linspace(h.BinEdges(1),h.BinEdges(end)); y = exppdf(x,mu); plot(x,y,'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 function (pmf) values
X = discreteinvrnd(p,1e4,1);В качестве альтернативы можно использовать discretize функция, чтобы сгенерировать дискретные случайные числа.
X = discretize(rand(1e4,1),[0 cusmsum(p)]);
Постройте гистограмму сгенерированных случайных чисел и подтвердите затем, что распределение следует за заданными pmf значениями.
histogram(categorical(X),'Normalization','probability')

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

Непрерывный RNG приемного отклонения продолжает можно следующим образом:
Выбирает плотность .
Находит константу таким образом, что \forall .
Генерирует универсальное случайное число .
Генерирует случайное число от .
Если , принимает и возвращается . В противном случае, отклонения и переходит к шагу 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 продолжает можно следующим образом:
Выбирает плотность .
Находит константу таким образом, что \forall .
Генерирует универсальное случайное число .
Генерирует случайное число от .
Если , принимает и возвращается . В противном случае, отклонения и переходит к шагу 3.