这行代码应该产生指数的服务时间,但我无法理解其背后的逻辑

时间:2019-06-19 23:09:40

标签: matlab random distribution exponential

这行代码应该会产生指数的服务时间,但是我无法理解其背后的逻辑。

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

这是source link,但是打开示例需要MATLAB。

我还在考虑exprnd(1)是否会给出同样的结果,即从平均值为1的指数分布中生成数字?

1 个答案:

答案 0 :(得分:2)

您是对的!

首先,请注意,MATLAB通过平均值而不是比率来对指数分布进行参数化,因此exprnd(5)的比率为lambda = 1/5


这行代码是执行相同操作的另一种方法: -mean * log(1 - rand());

这是inverse transformExponential distribution

如果 X 遵循指数分布,则
enter image description here

并重写cumulative distribution function (CDF)并让 U 〜Uniform(0,1),我们可以得出逆变换。

Derivation of the Exponential inverse transform

请注意,最后一个相等是因为1- U U 的分布相等。换句话说,是<< em> U 〜均匀(0,1)和 U 〜均匀(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


编辑:OP询问是否有理由从CDF而不是从probability density function (PDF)生成。这是我试图回答的问题。

逆变换方法使用CDF来利用以下事实:CDF本身就是概率,因此必须在区间[0,1]上。然后,很容易生成一个很好的(伪)随机数,该数将在该间隔内。 CDF足以唯一地定义分布,并且反转CDF意味着其唯一的“形状”将适当地将[0,1]上的均匀分布数映射为遵循概率密度函数的域中的非均匀形状。 (PDF)。

您可以看到CDF执行此非线性映射in this figure

PDF的一种用法是Acceptance-Rejection方法,该方法对于某些发行版(包括自定义PDF)很有用(感谢@ pjs,这有助于缓和我的记忆)。