我想在Matlab程序中模拟具有概率质量函数和参数的超几何分布:https://en.wikipedia.org/wiki/Hypergeometric_distribution 如何在从均匀分布中生成随机数的同时对其进行编码。
答案 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);
具有参数N
,K
,n
的超几何分布。
如果您确实需要使用统一随机数生成器(rand
函数):
[~, x] = sort(rand(1,N));
x = x(1:n); % this gives the same result as randperm(N,n)
k = sum(x<=K);