首页 > 解决方案 > 在 Matlab 中从 Gumbel 分布中绘制随机数

问题描述

问题:我希望您能帮助我在 Matlab 中从 Gumbel 分布中提取具有比例mu和位置的随机数。beta

我想使用Wikipedia提供的 Gumbel 发行版的定义(请参阅页面右侧的 PDF 和 CDF 定义)。

注意:此处evrnd描述的 Matlab 中的包不能使用(或者可以通过一些修改来使用?),因为它考虑了翻转标志。

让我更好地解释最后一点。

让我们将比例固定为0,并将位置固定为1

现在,按照维基百科和其他教科书(例如,这里第 42 页),Gumbel PDF 是

exp(-x)*exp(-exp(-x))

尽管在Matlab中似乎evrnd考虑了以下 PDF 中的随机抽取:

exp(x)*exp(-exp(x))

您可以看到在 Matlab-x中被替换为x.

知道什么是最好的方法吗?

标签: matlabrandomstatistics

解决方案


根据维基百科,逆累积分布函数是

Q(p) = mu - beta*log(-log(p))

从这个函数,可以应用逆变换方法。因此

sz = [1 1e6]; % desired size for result array
mu = 1; % location parameter
beta = 2.5; % scale parameter
result = mu - beta*log(-log(rand(sz)))

给出result具有 iid Gumbel 分布的数字。绘制这些示例值的直方图给出

>> histogram(result, 51)

在此处输入图像描述


如果要使用evrnd函数(Statistics Toolbox),只需更改输出的符号即可。根据文件,

R = evrnd(mu,sigma,[m,n,...])

这里使用的版本适用于建模最小值;此分布的镜像可用于通过否定 来模拟最大值R

因此,使用

result = -evrnd(mu, beta, sz);

推荐阅读