在 Matlab 中从 Gumbel 分布中绘制随机数

Posted

技术标签:

【中文标题】在 Matlab 中从 Gumbel 分布中绘制随机数【英文标题】:Draw random numbers from the Gumbel distribution in Matlab 【发布时间】:2019-04-06 01:38:54 【问题描述】:

问题:我希望您能帮助我从 Gumbel 分布中抽取随机数,在 Matlab 中标度为 mu,位置为 beta

我想使用Wikipedia 提供的Gumbel 分发定义(参见页面右侧的PDF 和CDF 定义)。

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

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

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

现在,按照Wikipedia 和其他教科书(例如,here p.42),Gumbel PDF 是

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

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

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

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

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

【问题讨论】:

【参考方案1】:

根据Wikipedia,逆累积分布函数为

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

通过这个函数,可以应用inverse transformation method。因此

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 与 i.i.d. Gumbel 分布的数字。绘制这些示例值的直方图给出了

>> histogram(result, 51)


如果你想使用evrnd函数(统计工具箱),你只需要改变输出的符号。根据文档,

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

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

因此,使用

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

【讨论】:

以上是关于在 Matlab 中从 Gumbel 分布中绘制随机数的主要内容,如果未能解决你的问题,请参考以下文章

matlab中怎么让三维曲面的颜色随X,Y的值变化

如何在 MatLab 中绘制概率密度函数?

在 MATLAB 中绘制二维希尔伯特谱

MATLAB | 如何绘制高斯混合分布分类区域及边界

MATLAB | 如何绘制高斯混合分布分类区域及边界

MATLAB:如何绘制pdf