Вы правы!
Во-первых, обратите внимание, что MATLAB параметризует экспоненциальное распределение по среднему значению, а не по скорости, поэтому exprnd(5)
будет иметь скорость lambda = 1/5
.
Эта строка кода является другойспособ сделать то же самое: -mean * log(1 - rand());
Это обратное преобразование для Экспоненциальное распределение .
Если X следует за экспоненциальным распределением, то
и перезаписывает совокупную функцию распределения (CDF) и, допустив U ~ Uniform (0,1), мы можем получить обратное преобразование.
Обратите внимание, что последнее равенство состоит в том, что 1- U и U равны в распределении.Другими словами, 1- U ~ Uniform (0,1) и U ~ Uniform (0,1).
Вы можете проверить это самостоятельнов этом примере кода с несколько подходов .
% MATLAB R2018b
rate = 1; % mean = 1 % mean = 1/rate
NumSamples = 1000;
% Approach 1
X1 = (-1/rate)*log(1-rand(NumSamples,1)); % inverse transform
% Approach 2
X2 = exprnd(1/rate,NumSamples,1);
% Approach 3
pd = makedist('Exponential',1/rate) % create probability distribution object
X3 = random(pd,NumSamples,1);
РЕДАКТИРОВАТЬ: ОП спросил, что была причина для создания из CDF, а неиз функции плотности вероятности (PDF) .Это моя попытка ответить на это.
Метод обратного преобразования использует CDF, чтобы использовать тот факт, что CDF сам по себе является вероятностью и поэтому должен находиться на интервале [0, 1].Тогда очень легко генерировать очень хорошие (псевдо) случайные числа, которые будут на этом интервале.CDF достаточно для однозначного определения распределения, а инвертирование CDF означает, что его уникальная «форма» будет правильно отображать равномерно распределенные числа на [0, 1] в неоднородную форму в области, которая будет следовать функции плотности вероятности(PDF).
Вы можете видеть, как CDF выполняет это нелинейное отображение на этом рисунке .
Одним из вариантов использования PDF будет Принятие-отклонение методов, которые могут быть полезны для некоторых дистрибутивов, включая пользовательские PDF-файлы (благодаря @ pjs для пробежки по памяти).