版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验5A随机数的产生方法一、实验目的1、掌握java中产生随机数的四种方式2、掌握如何实现满足一定分布条件的随机数二、实验准备1、有四种产生随机数的方式:(1)通过System.currentTimeMillis()来获取一个当前时间毫秒数的long型数字。假如要获取[0,100)之间的int整数,方法如下:finallongl=System.currentTimeMillis();finalinti=(int)(l%100);(2)通过Math.random()返回一个0到1之间的double值。假如要获取[0,100)之间的int整数。方法如下:finaldoubled=Math.random();finalinti=(int)(d*100);(3)通过java.util.Random类来产生随机数。该类有两个构造函数,分别是Random()和Random(longseed)。Random()使用当前时间即System.currentTimeMillis()作为发生器的种子,Random(longseed)使用指定的seed作为发生器的种子。随机数发生器(Random)对象产生以后,可以调用不同的方法:nextInt()、nextLong()、nextFloat()、nextDouble()等来获得不同类型随机数。若要控制随机数在某个范围内,可以使用模数运算符%。如果2个Random对象使用相同的种子,则它们返回值完全相同。下面代码中两个Random对象的输出完全相同importjava.util.*;classTestRandom{publicstaticvoidmain(String[]args){Randomrandom1=newRandom(100);System.out.println(random1.nextInt());System.out.println(random1.nextFloat());System.out.println(random1.nextBoolean());Randomrandom2=newRandom(100);System.out.println(random2.nextInt());System.out.println(random2.nextFloat());System.out.println(random2.nextBoolean());}}(4)对安全性有要求的随机数应用情景,可以用java.security.SecureRandom。代替伪随机的Random类。该类继承自Random类,并覆盖了next(n)函数,所以可以利用其提供的强随机的种子算法(SHA1PRNG)来生成随机数。当然这是以牺牲效率为前提的,大概相差1个数量级。2、有时需要生成服从规定分布的随机数(如在蒙特卡罗方法中),例如高斯分布或指数分布等。有些编程语言已经有比较完善的实现,例如Python的NumPy、Matlab均可以提供有相关函数可以实现:(1)按照均匀分布生成随机整数;(2)按照均匀分布生成随机自然数;按照标准正态分布生成随机数;(4)按照二项分布生成随机数;(5)按照泊松分布生成随机数;(6)生成指定的常用分布的随机数,;(7)按自定义概率生成随机数;(8)生成自然数伪随机序列。我们可以利用均匀分布的叠加生成满足正态分布条件的随机数。中心极限定理指出,n个相互独立同分布的随机变量之和的分布近似于正态分布,n越大,近似程度越好。逆变换法、Box–Muller算法、Ziggurat算法等都可以用来生成满足正态分布条件的随机数。读者自己也可以思考一下如何实现满足其它分布的随机数。三、实验内容利用互联网,在线生成“随机数”。利用百度搜索,很容易找到“生成随机数”的电脑小程序和手机APK,输入想要的条件,即可自动生成用户所需的随机数。2、编程实现“体育彩票开奖”模拟实验,给出实验代码。“体育彩票开奖”问题:现场随机产生七位数(首位可以是0),每个数位上均为 0~9的随机整数,即开奖结果为0~9中的任意一个七位数。3、说明下列程序的功能。publicdoubleNorm_rand(doublemiu,doublesigma2){doubleN=12;doublex=0,temp=N;do{x=0;for(inti=0;i<N;i++)x=x+(Math.random());x=(x-temp/2)/(Math.sqrt(temp/12));x=miu+x*Math.sqrt(sigma2);}while(x<=0);//在此我把小于0的数排除掉了returnx;}4、分析下列代码的功能,画出算法流程图。packagesuijishu;publicclassSuijishu{privatelongxn=0;privatelongc=0;publicintrandom_num(inta,intb){return(int)(random()%(b-a+1)+a);}publiclongrandom()//生成第n+1个的随机数过程{intMultiplier=16807;longModulus=((1<<31)-1);xn=(Modulus*xn+c)%Multiplier;c=xn;returnxn;}publicvoidsetseed(longseed)//取种子{xn=seed;}//主函数publicstaticvoidmain(String[]args){//TODO自动生成的方法存根Suijishusjs=newSuijishu();intnum[]=newint[6];//模拟色子的六个面整型变量intaccount=0;sjs.setseed(System.currentTimeMillis());for(inti=0;i<6000;i++)//模拟循环6000次摇色子的过程{account=sjs.random_num(1,6);//摇色子++num[account-1];//对应的色子面的变量加一}for(intj=0;j<6;j++){System.out.println((j+1)+":"+num[j]);//看最终色子对应面被摇的次数}}}四、实验报告1.通过实验回答下列问题(1)请给出你的实验1的地址、实验2的代码,实验3和4的功能描述。实验1网址:/网页截图:实验2结果生成:代码展示:实验3功能介绍:生成符合正态分布的随机数实验4功能介绍:随机生成色子,投掷6000次,记录丢出数的数量。算法流程图:开始开始i=0i=0输出1-6的统计数i<6000输出1-6的统计数i<6000NO生成随机数1-6i=I+1生成随机数1-6i=I+1结束结束根据教材中伪随机数生成器的构造原理,自己设计一个生成器算法,给出算法的理论依据、算法流程和代码实现。程序演示:2.简答题(1)如何产生满足正态分布、均匀分布、二项分布或泊松分布的随机数?(2)Python中有哪些方式可以产生随机数?1、random.randrom(),括号中不填参数生成0到1直接之间的随机实数,区间[0,1)2、random.randint(0,100)生成0到100直接之间的随机整数,区间[0,100]3、random.randrange(0,100),第一个参数可以省略,默认0生成0到100直接之间的随机整数,区间[0,100)4、random.uniform(0,100)生成0到100直接之间的随机浮点数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 健康出行与斑马线安全专题活动
- 2025宾馆消防教育
- 电话手表产品设计
- 工程设计变更管理规范
- 藤椅创意画课件
- 26年肝损患者靶向随访细则
- 书法教育体系构建与实践路径
- 农药加工流程
- 租房免租金协议书
- 租灯光设备合同协议
- T-GEIA 11-2021 配用电系统节电装置节电量测量和验证技术导则
- 五年级下册道德与法治课件第三单元《百年追梦复兴中华》单元梳理部编版
- JG293-2010 压铸铝合金散热器
- 新能源汽车动力电池管理及维护技术教案:任务3-3 DCDC转换器的拆装与检测
- 2023年资产负债表模板
- 国开计算机组网技术实训1:组建小型局域网
- TCHSA 010-2023 恒牙拔牙术临床操作规范
- 2019人教版新教材高中化学选择性必修三全册重点知识点归纳总结(复习必背)
- dd5e人物卡可填充格式角色卡夜版
- 宝鸡某烟厂联合厂房施工组织设计
- 布袋除尘器安装使用说明书
评论
0/150
提交评论