X^n=_matlab poisson随机数">
赞
踩
我们知道,利用naive monte carlo 来求poisson 随机变量的期望可以表示为如下公式
由大数定律可知,有
最经典,也是最常用的方法就是利用poisson分布函数的逆函数来产生服从poisson 分布的随机数,步骤如下:
但这种方法在β很大时,计算量会比较大。
该新方法基于的理论支持是:poisson分布P(β)分布一致逼近正态分布N(β,β) 。参考文献(1)
该方法步骤如下:
function x=poisson(lamda, size)
%输入:poisson分布的强度lamda, 要产生的随机变量数目size
%输出:poisson 随机变量序列x
x=zeros(1,2*size);
for i=1:size
u=unifrnd(0,1,1,2); %生成(0,1)上的均匀分布变量
%% 生成独立的服从参数为(0,1)的正态分布变量(参考另外一篇博客中的介绍)
X1=sqrt(-2*log(u(1)))*cos(2*pi*u(2));
X2=sqrt(-2*log(u(1)))*sin(2*pi*u(2));
%% 生成独立的服从参数为 lamda 的poisson分布变量
z=normcdf([X1, X2]);
x(2*i-1)=pois_rand(lamda, X1, z(1)); x(2*i)=pois_rand(lamda, X2, z(2));
end
end
function m=pois_rand(lamda, x, z)
%搜索m*
m0=max(floor(lamda+x*sqrt(lamda)), 0);
if F(lamda, m0)<z
m=m0+1;
while F(lamda, m)<z
m=m+1;
end
else
m=m0;
while F(lamda, m)>=z
m=m-1;
end
m=m+1;
end
end
function F=F(lamda, m)
%poisson分布的分布函数
if m<0
F=0;
else
F=exp(-lamda);
for i=1:m
F=F+lamda^(i)*exp(-lamda)./factorial(i);
end
end
end

运行结果:
>> x=poisson(2,1e5);[mean(x), var(x)]
ans =
1.9993 2.0010
>> hist(x,100)
注:
该方法更多细节参考文献(2)
————————————————————————————————————
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。