这行代码应该会产生指数的服务时间,但是我无法理解其背后的逻辑。
% Exponential service time with rate 1
mean = 1;
dt = -mean * log(1 - rand());
这是source link,但是打开示例需要MATLAB。
我还在考虑exprnd(1)
是否会给出同样的结果,即从平均值为1的指数分布中生成数字?
答案 0 :(得分:2)
您是对的!
首先,请注意,MATLAB通过平均值而不是比率来对指数分布进行参数化,因此exprnd(5)
的比率为lambda = 1/5
。
这行代码是执行相同操作的另一种方法:
-mean * log(1 - rand());
这是inverse transform的Exponential distribution。
并重写cumulative distribution function (CDF)并让 U 〜Uniform(0,1),我们可以得出逆变换。
请注意,最后一个相等是因为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);
编辑:OP询问是否有理由从CDF而不是从probability density function (PDF)生成。这是我试图回答的问题。
逆变换方法使用CDF来利用以下事实:CDF本身就是概率,因此必须在区间[0,1]上。然后,很容易生成一个很好的(伪)随机数,该数将在该间隔内。 CDF足以唯一地定义分布,并且反转CDF意味着其唯一的“形状”将适当地将[0,1]上的均匀分布数映射为遵循概率密度函数的域中的非均匀形状。 (PDF)。
您可以看到CDF执行此非线性映射in this figure。
PDF的一种用法是Acceptance-Rejection方法,该方法对于某些发行版(包括自定义PDF)很有用(感谢@ pjs,这有助于缓和我的记忆)。