加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

利用泊松分布近似二项分布

(2011-08-12 19:16:41)
标签:

matlab

杂谈

利用泊松分布近似二项分布

摘要:利用Matlab编制二项分布,泊松分布概率密度和积概率函数,用图像表现用泊松分布近似二项分布精度。

关键词:二项分布,泊松分布,泊松定理,近似,Matlab,制图。

1.     概述:

Matlab6.5附加stats工具箱中带有二项分布、泊松分布基本公式,但并非强制安装组件,故自行编制二项分布、泊松分布概率密度和积概率函数以方便使用。

2.     原理:

二项分布: ; ; ; ;

泊松分布: ;  

近似理论依据:根据泊松定理 ;

3. 实例计算:

3.1 函数说明:

stats_binopdf(X,n,p):用于计算二项分布的概率密度;

stats_binocdf(X,n,p):用于计算二项分布的积概率;

stats_poisspdf(X,λ):用于计算泊松分布的概率密度;

stats_poisscdf(X,λ):用于计算泊松分布的积概率;

注①:函数中X可以是数组。  

3.2 Matlab计算源程序:

%第一次对比%(p=0.005;n=10000;lambda=n*p=50)

X=0:100;

p=0.005;

n=10000;

lambda=n*p;

output_p=num2str(p);

output_n=num2str(n);

output_lambda=num2str(lambda);

p_cdf=stats_poisscdf(X,lambda);

b_cdf=stats_binocdf(X,n,p);

text(100,100,'sgsfgdfgdgdfgsdfsdf')

plot(X,b_cdf,'b.',X,p_cdf,'r+')

legend('二项分布积概率','泊松分布积概率',2)

title('积概率函数 图像比较(1)')

text(80,0.25,'参数:')

text(80,0.2,'p=')

text(83,0.2,output_p)

text(80,0.15,'n=')

text(83,0.15,output_n)

text(80,0.1,'lambda=')

text(92,0.1,output_lambda)

p_pdf=stats_poisspdf(X,lambda);

b_pdf=stats_binopdf(X,n,p);

figure,plot(X,b_pdf,'b.',X,p_pdf,'r+')

legend('二项分布概率密度','泊松分布概率密度',2)

title('概率密度函数 图像比较(1)')

text(80,0.015,'参数:')

text(80,0.012,'p=')

text(83,0.012,output_p)

text(80,0.009,'n=')

text(83,0.009,output_n)

text(80,0.006,'lambda=')

text(92,0.006,output_lambda)

%第二次对比%(p=0.5;n=100;lambda=n*p=50)

X=0:100;

p=0.5;

n=100;

lambda=n*p;

output_p=num2str(p);

output_n=num2str(n);

output_lambda=num2str(lambda);

p_cdf=stats_poisscdf(X,lambda);

b_cdf=stats_binocdf(X,n,p);

figure,plot(X,b_cdf,'b.',X,p_cdf,'r+')

legend('二项分布积概率','泊松分布积概率',2)

title('积概率函数 图像比较(2)')

text(80,0.25,'参数:')

text(80,0.2,'p=')

text(83,0.2,output_p)

text(80,0.15,'n=')

text(83,0.15,output_n)

text(80,0.1,'lambda=')

text(92,0.1,output_lambda)

p_pdf=stats_poisspdf(X,lambda);

b_pdf=stats_binopdf(X,n,p);

figure,plot(X,b_pdf,'b.',X,p_pdf,'r+')

legend('二项分布概率密度','泊松分布概率密度',2)

title('概率密度函数 图像比较(2)')

text(80,0.015,'参数:')

text(80,0.012,'p=')

text(83,0.012,output_p)

text(80,0.009,'n=')

text(83,0.009,output_n)

text(80,0.006,'lambda=')

text(92,0.006,output_lambda)

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数stats_binocdf(X,n,p)源程序:

 

function P=stats_binocdf(X,n,p) %二项分布积概率

warning off MATLAB:nchoosek:LargeCoefficient;

if p>1 | p<0;%判断参数是否合法

    disp('Error Occur ==> p is illegal!(0<=p<=1)');

    Px=Inf;

    break;

end;

q=1-p;

if length(X)==1; %判断X是否为数组

   P=0;

   for i=0:X

   P=P+NCHOOSEK(n,i)*p^i*q^(n-i);

   end

else temp_P=1:length(X);

    for i=1:length(X);

        temp_P(i)=0;

        for j=0:X(i)

        temp_P(i)=temp_P(i)+NCHOOSEK(n,j)*p^j*q^(n-j);

        end

    end

P=temp_P;  

end           

函数stats_binopdf(X,n,p)源程序

 

function Px=stats_binopdf(X,n,p) %二项分布概率密度

warning off MATLAB:nchoosek:LargeCoefficient;

if p>1 | p<0;%判断参数是否合法

        disp('Error Occur ==> p is illegal!(0<=p<=1)');

        Px=Inf;

        break;

end;

q=1-p;

if length(X)==1; %判断X是否为数组

   Px=NCHOOSEK(n,X)*p^X*q^(n-X);

else temp_Px=1:length(X);

    for i=1:length(X);

        temp_Px(i)=NCHOOSEK(n,X(i))*p^X(i)*q^(n-X(i));

    end

Px=temp_Px;  

end   

                     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数stats_poisscdf(X,λ)源程序:

 

function Px=stats_poisscdf(X,lambda) %泊松分布积概率

warning off MATLAB:nchoosek:LargeCoefficient;

if lambda<0;

    disp('Error Occur ==> lambda is illegal!(lambda>0)');

end

if length(X)==1; %判断X是否为数组

  Px=0;

  for i=0:X;

      temp=1:i;%建立temp一维数组,以用来阶乘

      Px=Px+lambda^i*exp(1)^(-lambda)/prod(temp);

  end

else  temp_Px=1:length(X);

      for i=1:length(X);

          temp_Px(i)=0;

          for j=0:X(i);

            temp=1:j;%建立temp一维数组,以用来阶乘              temp_Px(i)=temp_Px(i)+lambda^j*exp(1)^(-lambda)/prod(temp);

         end

      end

Px=temp_Px;   

end     

函数stats_poisspdf(X,λ)源程序:

 

function Px=stats_poisspdf(X,lambda) %泊松分布概率密度

warning off MATLAB:nchoosek:LargeCoefficient;

if lambda<0;

    disp('Error Occur ==> lambda is illegal!(lambda>0)');

end

if length(X)==1; %判断X是否为数组

   temp=1:X;%建立temp一维数组,以用来阶乘

   Px=lambda^X*exp(1)^(-lambda)/prod(temp);

else temp_Px=1:length(X);

     for i=1:length(X);

         temp=1:X(i);         temp_Px(i)=lambda^X(i)*exp(1)^(-lambda)/prod(temp);

     end

Px=temp_Px;    

end

 

 3.3计算结果:

http://img64.pp.sohu.com/images/blog/2006/12/22/10/11/1103d160069.jpg 

4. 结论:

1)当p很小,n很大时,有 ,即可用泊松分布近似二项分布。

如图像显示:第一次近似(参数p=0.005;n=10000;lambda=n*p=50) 的效果

明显优于第二次近似(参数p=0.5;n=100;lambda=n*p=50)。

2)Matlab绘图功能强大,使用简单。

3)Matlab函数编写方便。

     (参数p=0.005;n=10000;lambda=n*p=50)                                   (参数p=0.005;n=10000;lambda=n*p=50)

 

 

 

 

参考文献:
[1]盛  骤. 概率论与数理统计(浙江大学.第三版).北京:高等教育出版社,2001

[2]石博强. Matlab数学计算范例教程. 北京:中国铁道出版社,2004

[3]李英冰. Matlab课程课件. 武汉:武汉大学测绘学院,2006

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有