问题:我希望您能从Matlab中规模为mu
和位置beta
的Gumbel分布中提取随机数。
我想使用Wikipedia提供的Gumbel分布的定义(请参阅页面右侧的PDF和CDF定义)。
注意事项:Matlab中的软件包evrnd
(描述为here)无法使用(或可以进行一些修改?),因为它考虑了翻转的符号。
让我更好地解释这最后一点。
让我们将比例尺固定为0
,将位置固定为1
。
现在,紧随Wikipedia和其他教科书(例如here第42页)之后,Gumbel PDF是
exp(-x)*exp(-exp(-x))
在Matlab中,尽管evrnd
似乎考虑了以下PDF的随机抽取:
exp(x)*exp(-exp(x))
您可以看到在Matlab中-x
被x
所代替。
关于什么是最佳进行方式的任何想法?
答案 0 :(得分:5)
根据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)))
i.i.d给result
。 Gumbel分布的数字。绘制这些示例值的直方图即可得出
>> histogram(result, 51)
如果要使用evrnd
函数(统计工具箱),则只需更改输出的符号。根据文档,
R = evrnd(mu,sigma,[m,n,...])
此处使用的版本适用于建模最小值;否定
R
,可以使用此分布的镜像对最大值进行建模。
因此,使用
result = -evrnd(mu, beta, sz);