从Matlab中的Gumbel分布中抽取随机数

use*_*148 2 random statistics matlab

问题:我希望您帮助从Gumbel分布中随机抽取数字mu和位置的随机数beta.

我想使用维基百科提供的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.

关于什么是最佳方式的任何想法?

Lui*_*ndo 5

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

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)))
Run Code Online (Sandbox Code Playgroud)

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

>> histogram(result, 51)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


如果要使用该evrnd功能(统计工具箱),只需更改输出的符号即可.根据文件,

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

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

因此,使用

result = -evrnd(mu, beta, sz);
Run Code Online (Sandbox Code Playgroud)