matlab - 在 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
.
知道什么是最好的方法吗?
解决方案
根据维基百科,逆累积分布函数是
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);
推荐阅读
- sql - 带有 OR AND 的 Where 子句需要很长时间才能运行
- vba - OTA-缺陷评论字段值返回 HTML 标记
- java - 将结构不佳的数据转换为 json 对象
- python - 如何查询 GeoDataFrame?
- elasticsearch - Stormcrawler,状态索引和重新爬取
- c# - WPF 数据绑定与子类
- javascript - ReferenceError:ReferenceError:找不到变量:调度
- html - 如何在 Odoo 的 qWeb 报告的最后一页中只写页脚?
- video - 如何创建文件格式容器?
- bazel - 使用 Windows 的 Bazel 内部外壳问题