程序实现泊松随机分布
2015-01-26 09:58
344 查看
泊松分布适合于描述单位时间(或空间)内随机事件发生的次数。如某一服务设施在一定时间内到达的人数,电话交换机接到呼叫的次数,汽车站台的候客人数,机器出现的故障数,自然灾害发生的次数,一块产品上的缺陷数,显微镜下单位分区内的细菌分布数等等。
观察事物平均发生m次的条件下,实际发生x次的概率P(x)可用下式表示:
松分布是离散型随机变量,其实还有更直接的算法。
首先科普一下,如果一个随机变量的概率分布函数(CDF)为
,而
,即u是[0,1]上的均匀分布,那么
,即分布函数的逆函数在u处的值服从F所代表的分布。
因为泊松分布是离散的,所以特别好写,因为不涉及求复杂分布函数的逆函数的问题。
我用以上的思想自己写了一个C代码:
观察事物平均发生m次的条件下,实际发生x次的概率P(x)可用下式表示:
松分布是离散型随机变量,其实还有更直接的算法。
首先科普一下,如果一个随机变量的概率分布函数(CDF)为
,而
,即u是[0,1]上的均匀分布,那么
,即分布函数的逆函数在u处的值服从F所代表的分布。
因为泊松分布是离散的,所以特别好写,因为不涉及求复杂分布函数的逆函数的问题。
我用以上的思想自己写了一个C代码:
#include<stdio.h> #include<stdlib.h> #include<math.h> int rand_p(double lambda);//生成随机数的主程序 double PDF(int lambda, int x);//计算概率密度函数 void main(){ int N=1000,lambda=30;//设置样本容量为N,lambda int randnum; double sum,sum2; int i; for (i=0;i<N;++i){ randnum=rand_p(lambda);//生成随机数 printf("%d\n",randnum); sum+=randnum;//计算随机数的和 sum2+=pow(randnum,2);//计算随机数平方的和,为了计算方差 } printf("The mean: %f\n",(double)sum/N);//计算平均 printf("The variance: %f\n",(double)sum2/N-pow((double)sum/N,2));//计算方差 } int rand_p(double lambda){ double u=(double)rand()/RAND_MAX;//产生[0,1]的均匀分布 int x=0; double cdf=exp(-1.0*lambda);//x=0时的分布函数值 while (u>=cdf){ x++; cdf+=PDF(lambda,x);//更新概率分布函数 } return x; } double PDF(int lambda, int k){ double pdf=1; int i; for (i=1;i<=k;++i) pdf*=(double)lambda/i; return pdf*exp(-1.0*lambda); }
相关文章推荐
- 任意分布的随机数的产生方法—VC程序实现方法
- 使用Java程序实现随机验证码功能的实例
- 第三周作业-实现随机点名的签到程序 第四需求,非头像版
- python学习笔记:泊松分布和负指数分布随机数的python实现
- 第三周作业-实现随机点名的签到程序 非头像版
- asp中实现随机分组程序的代码
- 【实现】实现随机点名的签到程序
- 网络121第3周实验——实现随机点名的签到程序
- 第三周作业--实现随机点名的签到程序
- 用PHP程序实现随机广告图片显示
- 任意分布的随机数的产生方法—VC程序实现方法
- 使用Java程序实现随机验证码功能的实例
- 第三周作业-实现随机点名的签到程序
- 正态随机分布 C++实现
- 用PHP程序实现随机广告图片显示
- 第三周作业-实现随机点名的签到程序
- 【小程序】JAVA实现从10~50中随机生成50个数,统计出现的数字及次数,输出出现最多的次数及对应的数字,按数字升序排列。
- 第三周作业-实现随机点名的签到程序
- 第三周作业-实现随机点名的签到程序 第五需求,头像版
- C++实现正态随机分布的方法