java语言产生泊松分布 (2)

上传人:宝路 文档编号:23264193 上传时间:2017-11-30 格式:DOCX 页数:6 大小:212.16KB
返回 下载 相关 举报
java语言产生泊松分布 (2)_第1页
第1页 / 共6页
java语言产生泊松分布 (2)_第2页
第2页 / 共6页
java语言产生泊松分布 (2)_第3页
第3页 / 共6页
java语言产生泊松分布 (2)_第4页
第4页 / 共6页
java语言产生泊松分布 (2)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《java语言产生泊松分布 (2)》由会员分享,可在线阅读,更多相关《java语言产生泊松分布 (2)(6页珍藏版)》请在金锄头文库上搜索。

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

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

3、。下面讨论下线性同余中参数的选取。模数的选取:从线性同余的生成公式中可以看到,生成序列 nx的最长周期不可能超过 m。为得到较长的周期,需要选择较大 m值。考虑 的另一个方面是实现时的生成速度。 在二进制计算机上,进行模运算,最好选择模数 2e的形式。这样模运算,只需要进行位与操作就可以实现了。但是这种简单的选择,在某些应用中,却不是令人满意的。这里,假设选取 em,则 42d是 m的一个因子。这里 d的指数选取为 4 是因为我们假设只考察生成序列元素 nx的最低四个比特位的规律。 (mo)nyx1(od)()d()odn nyxacayc可以看到,由序列 n的各元素低三比特位组成的序列是一个

4、周期更短的同余序列。它的最长周期为 16。类似的, nx低三位的最长周期为 8, nx低五位的最长周期为 32,等等。 的最低位不是常数,就是 O,1 交替。这在强调低位随机性的应用中,是不令人满意的。 为避免这种缺陷,可以选择模数 21em,或者是选取 m为小于 2e的最大素数。对于模数 21e的情况, (od)nx有快速实现方法:注意上述算法中,第 7 步其实是一个递归调用。整个算法中只有加减,位与,移位,比较和跳转操作。对于 21em的情况也是类似的.乘数的选取模数 m取得较大,序列的周期才可能较大。下面的定理 1指出了得到极大周期所应满足的条件:由 ,ac和 0x所定义的线性同余序列有

5、周期长度 m,当且仅当: (1) 与 m互素; (2)对于整除 的每个素数 p, 1ba是 p的倍数; (3)如果 0(od4),则 0(od4)。 在有些情况下,可能会利用 0c来获得较快的生成速度。根据定理 1,这时生成序列不可能达到极大周期聊。但仍然可以通过选择乘数 a来使得序列周期尽可能地长。 在生成公式中,取 0c, emp,则0(od)nexap 显然,周期是使得 0()Tex的最小正整数 T。如果 0x与ep的最大公因子是 fp,则由数论定理,得到:1(mod)Tefap 由数论欧拉定理可知:()efpef所以, T必是 ()efp的一个因子。欲使得 T为最大,应当取 T等于 (

6、)efp.且若 0x与 互素,则此时 等于 1()()efep 。并且当 a是模 m的一个本原元时, 1(mod)Ta中 取得极大值 m。综上所述,得出下面的结论: 当 0c时,生成序列可能达到的极大周期等于模数 m的欧拉函数 ()m,若满足: (1)初始值 0x与 m互素;(2)乘数 a是模 的一个本原元,则可以实现这一周期。三、算法描述流程:.P=1;n=0;.产生一个0,1区间均匀分布随机数 U.P=P*U;.若 P= c)n+; while (p = c);return u;/ 线性同余法生成 U【0,1)随机数public static double randomU() seed =

7、 (long) (32719 * seed) % (m - 1);/ System.out.println(seed:+seed);return seed / (m - 1);public static void main(String args) / TODO Auto-generated method stub/ 随机数种子生成与初始化seed = System.currentTimeMillis();m = Math.pow(2, 31);double uu = new double1000;int N=1000;/ 生成 10 个泊松分布分布随机数for (int i = 0; i N

8、; i+) System.out.println(第 + i + 个);uui = P_rand(0.2);/计算均值与方差double sum = 0, sum2 = 0, ave = 0, fangca = 0;for (int i = 0; i N; i+) sum = sum + uui;sum2 = sum2 + uui * uui;System.out.println(u: + i + : + uui);ave = (double) sum / N;System.out.println(均值: + ave);for (int i = 0; i N; i+) / sum = sum + uui;sum2 = sum2 + (uui - ave) * (uui - ave);fangca = sum2 / N;System.out.println(方差: + fangca);通过随机性检验,得到均值和方差在预想值附近,得到以下实验结果:四结果分析线性同余法不仅与种子有关,而且与参数 m,a,c 的选取有关。为了保证其统计性质,一般将 m 取得很大.这样,在计算过程中,为防止整数溢出还要进行一些算法处理。此次作业让我们了解学习了更多的东西,收益匪浅。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号