java语言产生泊松分布.docx

java语言产生泊松分布.docx

ID:50369491

大小:179.04 KB

页数:6页

时间:2020-03-08

java语言产生泊松分布.docx_第1页
java语言产生泊松分布.docx_第2页
java语言产生泊松分布.docx_第3页
java语言产生泊松分布.docx_第4页
java语言产生泊松分布.docx_第5页
资源描述:

《java语言产生泊松分布.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、用java语言产生符合泊松分布的随机数一、实验目的利用随机数函数rand来产生的随机数具有一定局限性,rand函数运用线性同余法产生的是伪随机数,即每次都一样。必须加上时间作为种子,因此不直接利用rand函数二、线性同余法的选取同余法是Lehmer于1951年提出来的,此方法是利用数论中的同余运算原理来产生随机数,有线性同余法、非线性同余法等,其中线性同余法法又分为加同余法、乘同余法以及混合同余法。同余法是现在发展迅速且使用普遍的方法之一。首先介绍下线同余法。线性同余法的递推式为:式中参数和分别称为乘、增量和模,为种子。如果这

2、些参数和种子(初值)都指定序列也就确定下来了。通常取作为区间(O,1)上均匀分布的随机数。从上可以看出当,为乘同余法;当时,为加同余法,否则称为混合同余法。按惯例,当强调使用某方法产生随机数时,常使用某方法(随机数)发生器的称呼。线性同余法有如下特点:(1)。(2)适当选取可使循环,无论取何值,其循环顺序相同,其循环周期称为发生器周期,记为。若,则称之为满周期。(3)适当选取,可保证在[[0,1〕区间上一个周期内每个整数正好出现一次,从而保证了均匀性。(4)为提高的均匀性,要求加大。下面讨论下线性同余中参数的选取。模数的选取:

3、从线性同余的生成公式中可以看到,生成序列的最长周期不可能超过。为得到较长的周期,需要选择较大值。考虑的另一个方面是实现时的生成速度。在二进制计算机上,进行模运算,最好选择模数的形式。这样模运算,只需要进行位与操作就可以实现了。但是这种简单的选择,在某些应用中,却不是令人满意的。这里,假设选取,则是的一个因子。这里的指数选取为4是因为我们假设只考察生成序列元素的最低四个比特位的规律。可以看到,由序列的各元素低三比特位组成的序列是一个周期更短的同余序列。它的最长周期为16。类似的,低三位的最长周期为8,低五位的最长周期为32,等等

4、。的最低位不是常数,就是O,1交替。这在强调低位随机性的应用中,是不令人满意的。为避免这种缺陷,可以选择模数,或者是选取为小于的最大素数。对于模数的情况,有快速实现方法:注意上述算法中,第7步其实是一个递归调用。整个算法中只有加减,位与,移位,比较和跳转操作。对于的情况也是类似的.乘数的选取模数取得较大,序列的周期才可能较大。下面的定理1指出了得到极大周期所应满足的条件:由和所定义的线性同余序列有周期长度,当且仅当:(1)与互素;(2)对于整除的每个素数,是的倍数;(3)如果,则。在有些情况下,可能会利用来获得较快的生成速度。

5、根据定理1,这时生成序列不可能达到极大周期聊。但仍然可以通过选择乘数来使得序列周期尽可能地长。在生成公式中,取,,则显然,周期是使得的最小正整数。如果与的最大公因子是,则由数论定理,得到:由数论欧拉定理可知:所以,必是的一个因子。欲使得为最大,应当取等于.且若与互素,则此时等于。并且当是模的一个本原元时,中取得极大值。综上所述,得出下面的结论:当时,生成序列可能达到的极大周期等于模数的欧拉函数,若满足:(1)初始值与互素;(2)乘数是模的一个本原元,则可以实现这一周期。三、算法描述流程:①.P=1;n=0;②.产生一个[0,1

6、]区间均匀分布随机数U.③.P=P*U;④.若P<=Pxmax,则返回N.⑤.N=N+1;转步骤2.四、运行代码及实验结果packagepangna;publicclassPossion{/***@paramargs*/staticlongseed;staticdoublea=32719,m;publicstaticdoubleP_rand(doubleLamda){//泊松分布doublen=0,p=1,c=Math.exp(-Lamda),u;do{u=randomU();//u=Math.random();p*=u;Sy

7、stem.out.println("u="+u+"p="+p+"n="+n+"c="+c);if(p>=c)n++;}while(p>=c);returnu;}//线性同余法生成U【0,1)随机数publicstaticdoublerandomU(){seed=(long)((32719*seed)%(m-1));//System.out.println("seed:"+seed);returnseed/(m-1);}publicstaticvoidmain(String[]args){//TODOAuto-generated

8、methodstub//随机数种子生成与初始化seed=System.currentTimeMillis();m=Math.pow(2,31);doubleuu[]=newdouble[1000];intN=1000;//生成10个泊松分布分布随机数for(inti=0;i<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。