【发布时间】:2016-01-31 20:27:21
【问题描述】:
我想用lambda = 1和T=6生成500000个泊松分布的随机数,使用组合方法可以描述如下:
- 生成统一的 r.v.
z1,z2, ... -
z1.z2..zm<=exp(-lamda*T)时停止 - 分配
k = m – 1
然后计算 10 个区间([0,1],[2,3],...,[16,17],[18,∞)] 中每个区间有多少个数。
我知道 MATLAB 有一个内置函数 poissrnd 用于上述任务。但是,我想用上面的算法自己做。我尝试这样做并将其与poissrnd 函数的结果进行比较,但我的代码给出了错误的结果。你能看看我的代码,给我一些cmets吗?
num_generated = 500000;
lambda=1;T=6;
k_vec=[]; %% Store k
for i=1:number_generated
multiple=1;
for j=1:number_generated
%% Step 1: Generate uniform in the interval [0,1]: z1,z2...
z=rand();
%% Step 2: Stop when z1z2...zm<=exp(-lambda*T)
multiple=multiple*z;
if(multiple<=exp(-lambda*T))
k=j-1;
k_vec=[k_vec k]; % Record k in vec
break;
end
end
end
range_1 = sum( k_vec(:)==0 )+sum(k_vec(:)==1) % # number with in range [0,1]
range_2 = sum( k_vec(:)==2 )+sum( k_vec(:)==3) % # number with in range [2,3]
range_3 = sum( k_vec(:)==4 )+sum( k_vec(:)==5) % # number with in range [4,5]
range_4 = sum( k_vec(:)==6 )+sum( k_vec(:)==7) % # number with in range [6,7]
range_5 = sum( k_vec(:)==8 )+sum( k_vec(:)==9) % # number with in range [8,9]
range_6 = sum( k_vec(:)==10 )+sum( k_vec(:)==11) % # number with in range [10,11]
range_7 = sum( k_vec(:)==12 )+sum( k_vec(:)==13) % # number with in range [12,13]
range_8 = sum( k_vec(:)==14 )+sum( k_vec(:)==15) % # number with in range [14,15]
range_9 = sum( k_vec(:)==16 )+sum( k_vec(:)==17) % # number with in range [16,17]
range_10 = sum(k_vec(:)>=18) % # number with in range [18,+infty)
【问题讨论】:
标签: algorithm matlab statistics probability