如何在Matlab中模拟超几何分布

时间:2017-03-23 12:12:01

标签: matlab simulation probability distribution distributed-computing

我想在Matlab程序中模拟具有概率质量函数和参数的超几何分布:https://en.wikipedia.org/wiki/Hypergeometric_distribution 如何在从均匀分布中生成随机数的同时对其进行编码。

2 个答案:

答案 0 :(得分:1)

最明智的做法是使用builtin hypergeometric generator

如果你必须为一个赋值或其他任意原因这样做,那么当反向CDF存在时的通用解决方案是进行反转 - 使用均匀生成器来创建p值(0到1之间的值),并将其插入逆CDF。自Matlab provides an inverse CDF function以来,这应该是直截了当的。

答案 1 :(得分:0)

使用randperm功能可轻松完成此操作,该功能可生成样本而无需替换

让分配参数定义如下:

N = 10; % population size
K = 3;  % number of success states in the population
n = 5;  % number of draws

然后变量k获得为

k = sum(randperm(N,n)<=K);

具有参数NKn的超几何分布。

如果您确实需要使用统一随机数生成器(rand函数):

[~, x] = sort(rand(1,N));
x = x(1:n); % this gives the same result as randperm(N,n)
k = sum(x<=K);