蒙特卡罗方法MonteCarlosimulation_第1页
蒙特卡罗方法MonteCarlosimulation_第2页
蒙特卡罗方法MonteCarlosimulation_第3页
蒙特卡罗方法MonteCarlosimulation_第4页
蒙特卡罗方法MonteCarlosimulation_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验数据处理方法第二部分:Monte Carlo模拟第七章均匀分布随机数的产生随机数的定义和特性随机数的产生线性乘同余方法1第七章均匀分布随机数的产生7.1 随机数的定义和特性27.1 随机数的定义和特性什么是随机数?单个的数字不是随机数是指一个数列,其中的每一个体称为随机数,其值与数列中的其它数无关;在一个均匀分布的随机数中,每一个体出现的概率是均等的;例如:在0,1区间上均匀分布的随机数序列中,0.00001与0.5出现的机会均等37.1 随机数的定义和特性随机数应具有的基本特性考虑一个对高能粒子反应过程的模拟:需用随机数确定:出射粒子的属性:能量、方向、粒子与介质的相互作用对这一过程的模

2、拟应满足以下要求(相空间产生过程):出射粒子的属性应是互不相关的,即每一粒子的属性的确定独立于其它的粒子的属性的确定;粒子的属性的分布应满足物理所要求的理论分布;所模拟的物理过程要求随机数应具有下列特性:随机数序列应是独立的、互不相关的(uncorrelated):即序列中的任一子序列应与其它的子序列无关;47.1 随机数的定义和特性长的周期(long period):实际应用中,随机数都是用数学方法计算出来的,这些算法具有周期性,即当序列达到一定长度后会重复;均匀分布的随机数应满足均匀性(Uniformity):随机数序列应是均匀的、无偏的,即:如果两个子区间的“面积”相等,则落于这两个子区

3、间内的随机数的个数应相等。例如:对0,1)区间均匀分布的随机数,如果产生了足够多的随机数,而有一半的随机数落于区间0,0.1不满足均匀性如果均匀性不满足,则会出现序列中的多组随机数相关的情况均匀性与互不相关的特性是有联系的57.1 随机数的定义和特性有效性(Efficiency):模拟结果可靠 模拟产生的样本容量大所需的随机数的数量大随机数的产生必须快速、有效,最好能够进行并行计算。6第七章均匀分布随机数的产生7.2 随机数的产生77.2 随机数的产生0,1区间上均匀分布的随机数是Monte Carlo模拟的基础:0,1均匀分布的随机数的产生方法:利用一些具有内在的随机性的过程:放射性衰变过程

4、(radioactive decay);热噪声(thermal noise);宇宙线的到达时间(cosmic ray arrival);缺点:模拟的结果不可再现,使得模拟程序的找错困难利用事先制订好的随机数表:缺点:表的容量有限,不适合需要大量随机数的应用服从任意分布的随机数序列可以用0,1区间均匀分布的随机数序列作适当的变换或舍选后求得87.2 随机数的产生利用数学递推公式在计算机中产生随机数其中:T为某个函数,给定初值r1,r2,rk,可按上式确定rn+1, n=1,2, 随机数序列.算法:产生0,M区间上的整数In,然后利用公式rn=In/M返回0,1区间上的实数优点:占用计算机的内存少

5、;产生速度快;可以重复前次的模拟结果,便于程序的找错;97.2 随机数的产生缺点:不满足随机数之间相互独立的要求:公式和初值确定后,序列就唯一地确定了;伪随机数(Pseudo-Random Number)不满足均匀性:计算机能表示的0,1区间内的数是有限的(由字长确定) 递推到一定次数后,出现周期性的重复现象10第七章均匀分布随机数的产生7.3 线性乘同余方法(Linear Congruential Method)117.3 线性乘同余方法(Linear Congruential Method)mod:取模运算:(aIn+c)除以m后的余数实型随机数序列:1948年由Lehmer提出的一种产生

6、伪随机数的方法,是最常用的方法。1、递推公式:其中:I0: 初始值(种子seed) a: 乘法器 (multiplier) c: 增值(additive constant) m: 模数(modulus) mod:取模运算:(aIn+c)除以m后的余数a, c和m皆为整数 产生整型的随机数序列,随机性来源于取模运算如果c=0 乘同余法:速度更快,也可产生长的随机数序列127.3 线性乘同余方法(Linear Congruential Method)2、实型随机数序列:3、特点:1)最大容量为m:2)独立性和均匀性取决于参数a和c的选择例:a=c=I0=7, m=10 7,6,9,0,7,6,9,

7、0,137.3 线性乘同余方法(Linear Congruential Method)4、模数m的选择:m 应尽可能地大,因为序列的周期不可能大于m;通常将m取为计算机所能表示的最大的整型量,在32位计算机上,m=231=2x1095、乘数因子a的选择:1961年,M. Greenberger证明:用线性乘同余方法产生的随机数序列具有周期m的条件是:c和m为互质数;a-1是质数p的倍数,其中p是a-1和m的共约数;如果m是4的倍数,a-1也是4的倍数。例:a=5,c=1,m=16,I0=1 周期=m=16 1,6,15,12,13,2,11,8,9,14,7,4,5,10,3,0,1,6,15

8、, 12,13,2,.147.3 线性乘同余方法(Linear Congruential Method)RANDU随机数产生器:1961年由IBM提出unsigned long seed = 9;float randu() const unsigned long a = 65539; const unsigned long m = pow(2,31); unsigned long i1; i1 = (a * seed) % m; seed = i1; return (float) i1/float(m);void SetSeed(unsigned long i) seed = i;157.3

9、线性乘同余方法(Linear Congruential Method)存在严重的问题: Marsaglia效用,存在于所有乘同余方法的产生器void test() c1 = new TCanvas(c1,“Test of random number generator,200,10,700,900); pad1 = new TPad(pad1,“one ,0.03,0.62,0.50,0.92,21); pad2 = new TPad(pad2,“one vs one,0.51,0.62,0.98,0.92,21); pad3 = new TPad(pad3,“one vs one vs on

10、e,0.03,0.02,0.97,0.57,21); pad1-Draw(); pad2-Draw(); pad3-Draw(); TH1F * h1 = new TH1F(h1,h1,100,0.0,1.0); TH2F * h2 = new TH2F(h2,h2,100,0.0,1.0,100,0.0,1.0); TH3F * h3 = new TH3F(h3,h3,100,0.0,1.0,100,0.0,1.0,100,0.0,1.0);167.3 线性乘同余方法(Linear Congruential Method) for(int i=0; i Fill(x); h2-Fill(x,

11、y); h3-Fill(x,y,z); pad1-cd(); h1-Draw(); pad2-cd(); h2-Draw(); pad3-cd(); h3-Draw(); 177.3 线性乘同余方法(Linear Congruential Method)187.3 线性乘同余方法(Linear Congruential Method)如果取a=69069,将极大地改善结果197.3 线性乘同余方法(Linear Congruential Method)1968年,Marsaglia对这一问题进行了研究,认为:任何的乘同余产生器都存在这一问题:在三维和三维以上的空间中,所产生的随机数总是集聚在一

12、些超平面上随机数序列是关联的对于32位的计算机,在d-维空间中超平面的最大数目为d=3 2953d=4 566d=6 120d=10 41改进措施:将递推公式修改为特点:1)需要两个初始值(种子); 2)周期可大于m;207.3 线性乘同余方法(Linear Congruential Method)#include unsigned long seed0 = 9;unsigned long seed1 = 11;float randac() const unsigned long a = 65539; const unsigned long b = 65539; unsigned long i

13、2; unsigned long m = pow(2,31); i2 = (a * seed1 + b * seed0 ) % m; seed0 = seed1; seed1 = i2; return (float) i1/float(m);void SetSeed(unsigned long i0, unsigned long i1) seed0 = i0; seed1 = i1;217.3 线性乘同余方法(Linear Congruential Method)a=b=65539, seed0=9, seed1=11227.3 线性乘同余方法(Linear Congruential Meth

14、od)如何获取0,1区间均匀分布的随机数产生器:每一个Monte Carlo模拟程序软件包都有自带的产生器:Jetset(LUND Monte Carlo模拟系列):利用Marsaglia等所提出的算法,周期可达1043函数用法:r=rlu(idummy)Geant3(探测器模拟程序,FORTRAN): 周期=1018Call grndm(vec*,len).利用CERN程序库:Y=rndm(x): 周期:5x108Y=rn32(dummy):乘同余法,a=69069,i0=65539Call ranmar(vec,len): 周期:1043Call ranecu(vec,len,isq)237.3 线性乘同余方法(Linear Congruential Method)CLHEP(Class Library for High Energy Physics)中的随机数产生器利用CLHEP中的随机数产生器软件包:247.3 线性乘同余方法(Linear Congruential Method)FORTRAN中使用随机数产生器应注意的问题:在FORTR

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论