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

This line of code is supposed to generate exponential service times, but I am not able to get the logic behind it

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

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

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

我也在想 exprnd(1) 是否会给出从均值为 1 的指数分布生成数字的相同结果?

你说得对!

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


这行代码是做同样事情的另一种方法: -mean * log(1 - rand());

这是inverse transform for the Exponential distribution

如果X服从指数分布,则

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

注意最后一个相等是因为1-UU在分布上是相等的。换句话说,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);


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

逆变换方法利用了CDF,利用了CDF本身就是一个概率,所以必须在区间[0, 1]上。然后很容易生成非常好的(伪)随机数,这些随机数将位于该间隔内。 CDF 足以唯一地定义分布,反转 CDF 意味着其唯一的 "shape" 将正确地将 [0, 1] 上的均匀分布数字映射到域中的 non-uniform 形状概率密度函数 (PDF)。

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

PDF 的一个用途是 Acceptance-Rejection methods, which can be useful for some distributions including custom PDFs (thanks to @pjs 来唤起我的记忆)。