Эта строка кода должна генерировать экспоненциальное время обслуживания, но я не могу понять логику этого - PullRequest
0 голосов
/ 20 июня 2019

Эта строка кода должна генерировать экспоненциальное время обслуживания, но я не могу понять логику этого.

% Exponential service time with rate 1
mean = 1;
dt   = -mean * log(1 - rand());

Это ссылка на источник , но для открытия примера требуется MATLAB.

Я также думал, если exprnd(1) даст тот же результат генерации чисел из экспоненциального распределения, которое имеет среднее значение 1?

1 Ответ

2 голосов
/ 20 июня 2019

Вы правы!

Во-первых, обратите внимание, что MATLAB параметризует экспоненциальное распределение по среднему значению, а не по скорости, поэтому exprnd(5) будет иметь скорость lambda = 1/5.


Эта строка кода является другойспособ сделать то же самое: -mean * log(1 - rand());

Это обратное преобразование для Экспоненциальное распределение .

Если X следует за экспоненциальным распределением, то
enter image description here

и перезаписывает совокупную функцию распределения (CDF) и, допустив U ~ Uniform (0,1), мы можем получить обратное преобразование.

Derivation of the Exponential inverse transform

Обратите внимание, что последнее равенство состоит в том, что 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);

Histograms showing all three approaches


РЕДАКТИРОВАТЬ: ОП спросил, что была причина для создания из CDF, а неиз функции плотности вероятности (PDF) .Это моя попытка ответить на это.

Метод обратного преобразования использует CDF, чтобы использовать тот факт, что CDF сам по себе является вероятностью и поэтому должен находиться на интервале [0, 1].Тогда очень легко генерировать очень хорошие (псевдо) случайные числа, которые будут на этом интервале.CDF достаточно для однозначного определения распределения, а инвертирование CDF означает, что его уникальная «форма» будет правильно отображать равномерно распределенные числа на [0, 1] в неоднородную форму в области, которая будет следовать функции плотности вероятности(PDF).

Вы можете видеть, как CDF выполняет это нелинейное отображение на этом рисунке .

Одним из вариантов использования PDF будет Принятие-отклонение методов, которые могут быть полезны для некоторых дистрибутивов, включая пользовательские PDF-файлы (благодаря @ pjs для пробежки по памяти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...