40 Years of Entropy and the Glass Transition - Google Books
books.google.com/.../40_Years_of_Entropy_and_the_Gla...
Google Books
Loading...
蒙特卡罗方法概述- bear86的专栏- 博客频道- CSDN.NET
blog.csdn.net/bear86/article/details/7044506
轉為繁體網頁
轉為繁體網頁
蒙特卡罗方法概述
N实际上不可能取无穷大,但只要取到与问题相应的足够大便可十分逼近于所求的真实解;
为对mc方法有个初步的认识先看个用mc方法求圆周率的例子。
设园的半径是r,圆心位于xoy平面的(r,r)处,且内切于边长为2r的正方形中,那么显然正方形的面积是S1=4r×r,用mc方法计算圆的面积的基本思想是随机的正方形范围内部画点,若共画了N个点,而落在圆内部的有M个点,当N足够大的时候,圆的面积可为s=M/N*S1,基本方法是首先产生两个随机数x和y其值域为[0,2r],然后进行判断(x,y)是否落在圆内
(x-r)2+(y-r)2<r2
记录下总的点数N和落在圆中的点数M,则圆的面积为S=4r2M/N,从而得pi=4×M/N
这里要注意两点:第一,两个随机数要是在矩形范围内均匀分布得。大部分计算机语言提供了随机数发生器,可产生0-1之间得均匀随机数,经过适当得变换不难变成任意值域得均匀随机数。第二,随机数得个头N必须要足够大。已确保一定得精度。负责由于统计涨落过大而使得误差很大,这是统计方法得自身得规律。
mc方法不仅能用于物理方程得数值计算,也可以用于物理过程得数字模拟。氢原子的电子云模拟就是一个简单的例证,由量子力学可以得知氢原子的s态波函数 ψ=ψ(r)只是半径的函数,于θ,φ无关,而氢原子中的电子沿半径r的分布密度即电子在半径r处单位厚度球壳内出现的几率
D=4×pi×r2×ψ2
习惯上把这种分布称作为电子云。
氢的基态1s态(n=1,l=0,m=0),有
D=1/(a1*a1*a1)4×r2×e-2r/a1
Dmax=1.1
r0=0.25nm
其中a1=5。29×10-2 nm,是D的最大值Dmax处的r值,其值是与波尔半径相同,r0是Dmax处的r值,其值与波尔半径相同。r0是D收敛处的r值,即D的收敛点。
氢的2s态(n=2,l=0,m=0)有
D=1/(8×a1*a1*a1)×(2-r/a1)2×e-r/a1
Dmax=0.14
r0=1.0nm
氢原子的3s态(n=3,l=0,m=0)有
D=1/(81×81×3×a1*a1*a1)[27-18*r/a1+2*(r/a)2]×e-2r/3a1
Dmax=0.2
r0=2.0nm
氢的电子云的模拟是依据上述的分布函数用绘图点的密度来描绘电子的概率分布函数,在氢原子例子中设随机数发生器可产生0-1的随机数,记做rand(k)(k=1,2,3……),首先利用一个随机数rand(1)来产生一个随机的电子半径轨道
r=r0*rand(1)
显然0<r<r0,由r计算出D(r)。再产生一个随机的概率判据D0=Dmax* rand(2)进行判断,如果D(r)<D0,则从新开始,否则再产生一个随机的角度值
θ=2*pi*rand(3)。最后计算要描绘的点的坐标x=srcosθ y=srsinθ。其中s是控制图形的尺寸因子,与每纳米点数相对应。绘出点(x,y)后再从新上述的过程,经过足够多的次数电子云的图貌就由点的疏密反应出来了
设园的半径是r,圆心位于xoy平面的(r,r)处,且内切于边长为2r的正方形中,那么显然正方形的面积是S1=4r×r,用mc方法计算圆的面积的基本思想是随机的正方形范围内部画点,若共画了N个点,而落在圆内部的有M个点,当N足够大的时候,圆的面积可为s=M/N*S1,基本方法是首先产生两个随机数x和y其值域为[0,2r],然后进行判断(x,y)是否落在圆内
(x-r)2+(y-r)2<r2
记录下总的点数N和落在圆中的点数M,则圆的面积为S=4r2M/N,从而得pi=4×M/N
这里要注意两点:第一,两个随机数要是在矩形范围内均匀分布得。大部分计算机语言提供了随机数发生器,可产生0-1之间得均匀随机数,经过适当得变换不难变成任意值域得均匀随机数。第二,随机数得个头N必须要足够大。已确保一定得精度。负责由于统计涨落过大而使得误差很大,这是统计方法得自身得规律。
mc方法不仅能用于物理方程得数值计算,也可以用于物理过程得数字模拟。氢原子的电子云模拟就是一个简单的例证,由量子力学可以得知氢原子的s态波函数 ψ=ψ(r)只是半径的函数,于θ,φ无关,而氢原子中的电子沿半径r的分布密度即电子在半径r处单位厚度球壳内出现的几率
D=4×pi×r2×ψ2
习惯上把这种分布称作为电子云。
氢的基态1s态(n=1,l=0,m=0),有
D=1/(a1*a1*a1)4×r2×e-2r/a1
Dmax=1.1
r0=0.25nm
其中a1=5。29×10-2 nm,是D的最大值Dmax处的r值,其值是与波尔半径相同,r0是Dmax处的r值,其值与波尔半径相同。r0是D收敛处的r值,即D的收敛点。
氢的2s态(n=2,l=0,m=0)有
D=1/(8×a1*a1*a1)×(2-r/a1)2×e-r/a1
Dmax=0.14
r0=1.0nm
氢原子的3s态(n=3,l=0,m=0)有
D=1/(81×81×3×a1*a1*a1)[27-18*r/a1+2*(r/a)2]×e-2r/3a1
Dmax=0.2
r0=2.0nm
氢的电子云的模拟是依据上述的分布函数用绘图点的密度来描绘电子的概率分布函数,在氢原子例子中设随机数发生器可产生0-1的随机数,记做rand(k)(k=1,2,3……),首先利用一个随机数rand(1)来产生一个随机的电子半径轨道
r=r0*rand(1)
显然0<r<r0,由r计算出D(r)。再产生一个随机的概率判据D0=Dmax* rand(2)进行判断,如果D(r)<D0,则从新开始,否则再产生一个随机的角度值
θ=2*pi*rand(3)。最后计算要描绘的点的坐标x=srcosθ y=srsinθ。其中s是控制图形的尺寸因子,与每纳米点数相对应。绘出点(x,y)后再从新上述的过程,经过足够多的次数电子云的图貌就由点的疏密反应出来了
计算方法的名称大多是与数学术语相关的,唯有蒙特卡罗方法名称特殊。大家知道,蒙特卡罗是地中海北岸的一个风景优美的城市,它是一座世界上有名的赌城。饶有兴趣的是科学家们竞用它命名了一种数学计算方法。那么,赌博与随机模拟(亦称统计试验)有什么关系呢?其实,赌博本身就可以看作是一种最简单的统计试验。例如掷骰子,一个均匀正方形的六面体,它在每一面刻有1到6的六个数码,如果要想知道掷骰子时某一面向上机会的多少,既可以用数学理论来证明,也可以用多次投掷方法来验证。只要投掷的数目足够多,就一定能证明每一面朝上的机会是1/6。类似扔硬币正反面朝上机会显然各都是1/2。有人做了30000次投掷试验,统计的结果正面向上的次数是14994次。也就是说,十分接近1/2了。这二个例子告诉我们,少量的试验结果可随是无规律的.数学上称随机性,而大量的试验就能检验或发现某些规律,也就是说有必然性,数学上叫统计性。对赌博来说,既有随机性也有统计性。
当然,实际问题要比掷骰子和硬币复杂得多。但是,统计数学的现象和规律是类似的,由于这种方法受到赌博的启示,所以人们就形象地用赌博城蒙特卡罗来命名这种计算方法。独具风格的计算方法。
MC(Monte Carlo)是上世纪四十年代,Los Alamos实验室(LANL)曼哈顿计划中由Stanislaw Ulam和Von Neumann两位数学家倡导和创建的一种独具特色的数值模拟方法。为体现方法的内涵,他们用世界著名赌城的名字将其命名为Monte Carlo方法。
MC方法也被称为统计实验方法,Monte Carlo借助计算机,发展功能强大和计算高效的程序是应用的前提。MCNP即是蒙特卡罗大型科学计算程序,用于处理连续能量、时间相关、三维几何、中子-光子-电子辐射输运问题。
蒙特卡罗方法不仅名称独特,它的计算模拟过程也独具风格,因而它常给人们带上一层神秘的色彩。但是,分析这种方法的基本特点就会发现,它的规律并不难掌握。用蒙特卡罗求解问题首先要建立一个概率模型或随机过程,使它的参数等于问题的解,然后通过对模型或过程的观察或抽样试验来计算所求参数的统计特征,最后再输出所求解的近似值。解的精度可以用估计值的标准误差来表示。根据概率论的定理,只要重复抽样随次数N趋向无穷大时,则其随机变量的算术平均将精确等于它的数学期望,即所求问题的解。当然,N实际上不可能取无穷大,但只要取到与问题相应的足够大便可十分逼近于所求的真实解。反之,N小了就得不到正确的结果。这就决定了只有在高速电子计算机上才能有效地应用这种方法。蒙特卡罗方法既可求解随机性问题,又可以求解确定性问题。所谓随机问题,是指问题的过程或参量受到随机性的影响,当然最后结果遵从统计规律,是确定的。例如,在核反应或核武器爆炸中,中子或伽玛射线在介质中的输运问题是随机性问题。因为粒子和介质元素发生什么相互作用,碰撞后如何运动都有随机性。我们可以用蒙待卡罗方法直接模拟这种输运过程,只要足够多的抽样,便可获得精确解。1946年,美国科学家首先在电子计算机上对中子连锁反应进行了模拟,并且把第一个实验程序命名为蒙特卡罗程序。
因此,蒙特卡罗方法首先在核科学研究中得到应用。其他如运筹学中的库存问题,随机服务系统中的排队问题等都属随机性问题;另一类是确定性问题,如计算定积分、解偏微分方程、线性代数方程等,它们可以用差分法、数值积分法等方法求解,但同样也可以用蒙特卡罗方法求解。在某些情况下,蒙特卡罗方法还更有优越性,如统计物理中常遇到的计算某物理系统的平均量,象内能、自由能、熵等均是高维积分,用通常数值积分法十分困难,而用Metroplis提出的特殊蒙特卡罗方法则能精确高效地求解出结果,从而使其在统计物理、凝聚态物理研究中成为一种标准算法。
MC方法主要应用于粒子输运问题上,它的适用范围分为实验核物理、反应堆核物理以及粒子辐射效应、抗辐射加固等方面。
MC方法求解粒子输运问题时,应该遵循四个主要的步骤:弄清楚粒子输运的全部物理过程;确定适用的MC技巧;确定描述粒子运动的状态参数和状态序列;确定粒子输运过程中有关分布的抽样方法。
MC模拟粒子输运过程包括以下几个物理过程,它对于我们理解MCNP程序的运算是很有用的。模拟粒子输运过程大致分为:源分布抽样,确定输运粒子的初始状态;空间、能量和运动的随机游动过程,确定粒子输运过程中的状态;记录贡献与分析结果。
MC统计模拟方法可以采用一些基本技巧,包括直接模拟方法、简单加权方法、统计估计方法、指数变换方法等,通过程序设计者对模拟程序的优化,可以极大地提高MCNP的能力。
蒙特卡罗方法有其独特的优点,第一,与所求解问题的几何维数及问题条件关系不大,几何越复杂,它相对优点越明显。例如,在粒子输运问题中,用差分法解二维问题比一线问题几乎要多4倍以上的时间,而采用蒙特卡罗方法则几乎不受影响。第二,适应性强。例如,积分域形状特殊时,用一般积分法求解困难大,而蒙特卡罗法则不受影响,对问题也不一定要进行离散化,可连续处理,如粒子能量可以连续跟踪模拟等。第三,程序结构简单,所需计算机存贮单元比其他数值方法少,容易建立通用性很强的应用软件。应当指出,蒙特卡罗计算结果的收敛性与抽样数N的平方根成反比,这就决定了要得到高精度解就必须用高速电子计算机实现大N抽样。但是它的误差只依赖于标准方差σ及。因此,要节省时间就既要研究各种模拟方法以减少方差、提高效率,所以降低方差的各种抽样技巧便成为研究该方法的重要内容。
蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理、核物理、真空技术、系统科学、信息科学、公用事业、地质、医学,可靠性及计算机科学等广泛的领域都得到成功的应用。
为对mc方法有个初步的认识先看个用mc方法求圆周率的例子。
设园的半径是r,圆心位于xoy平面的(r,r)处,且内切于边长为2r的正方形中,那么显然正方形的面积是S1=4r×r,用mc方法计算圆的面积的基本思想是随机的正方形范围内部画点,若共画了N个点,而落在圆内部的有M个点,当N足够大的时候,圆的面积可为s=M/N*S1,基本方法是首先产生两个随机数x和y其值域为[0,2r],然后进行判断(x,y)是否落在圆内
(x-r)2+(y-r)2<r2
记录下总的点数N和落在圆中的点数M,则圆的面积为S=4r2M/N,从而得pi=4×M/N
这里要注意两点:第一,两个随机数要是在矩形范围内均匀分布得。大部分计算机语言提供了随机数发生器,可产生0-1之间得均匀随机数,经过适当得变换不难变成任意值域得均匀随机数。第二,随机数得个头N必须要足够大。已确保一定得精度。负责由于统计涨落过大而使得误差很大,这是统计方法得自身得规律。
mc方法不仅能用于物理方程得数值计算,也可以用于物理过程得数字模拟。氢原子的电子云模拟就是一个简单的例证,由量子力学可以得知氢原子的s态波函数 ψ=ψ(r)只是半径的函数,于θ,φ无关,而氢原子中的电子沿半径r的分布密度即电子在半径r处单位厚度球壳内出现的几率
D=4×pi×r2×ψ2
习惯上把这种分布称作为电子云。
氢的基态1s态(n=1,l=0,m=0),有
D=1/(a1*a1*a1)4×r2×e-2r/a1
Dmax=1.1
r0=0.25nm
其中a1=5。29×10-2 nm,是D的最大值Dmax处的r值,其值是与波尔半径相同,r0是Dmax处的r值,其值与波尔半径相同。r0是D收敛处的r值,即D的收敛点。
氢的2s态(n=2,l=0,m=0)有
D=1/(8×a1*a1*a1)×(2-r/a1)2×e-r/a1
Dmax=0.14
r0=1.0nm
氢原子的3s态(n=3,l=0,m=0)有
D=1/(81×81×3×a1*a1*a1)[27-18*r/a1+2*(r/a)2]×e-2r/3a1
Dmax=0.2
r0=2.0nm
氢的电子云的模拟是依据上述的分布函数用绘图点的密度来描绘电子的概率分布函数,在氢原子例子中设随机数发生器可产生0-1的随机数,记做rand(k)(k=1,2,3……),首先利用一个随机数rand(1)来产生一个随机的电子半径轨道
r=r0*rand(1)
显然0<r<r0,由r计算出D(r)。再产生一个随机的概率判据D0=Dmax* rand(2)进行判断,如果D(r)<D0,则从新开始,否则再产生一个随机的角度值
θ=2*pi*rand(3)。最后计算要描绘的点的坐标x=srcosθ y=srsinθ。其中s是控制图形的尺寸因子,与每纳米点数相对应。绘出点(x,y)后再从新上述的过程,经过足够多的次数电子云的图貌就由点的疏密反应出来了。
随机数的真与伪
蒙特卡罗方法模拟问题都离不开随机抽样,于是就需要产生各种概率分布的随机变量,其中最简单也最重要的随机变量是在[0,1]上均匀分布的随机变量。我们把[0,1]上均匀分布随机变量的抽样值称之为随机数。因此在电子计算机上如何产生这种“真正”的随机变量,就变得特别重要。
随机抽样的一种方法是物理方法,它应用某种物理现象的随机性,在计算机上设有专门的附件实现,称为“随机数发生器”。它所产大的随机数倒是“真”的随机数,但其缺点是过程一去不复返,不能进行重复检查,而且设备费用昂贵,不实用。另一种是目前广泛使用的数学方法,它用迭代过程实现,每个相邻数由其前一个数,或前一组的数通过某些算术或逻辑运算求得。显然,这样的一系列数就不是真正的随机数,但它们只要能通过一系列局部随机性检验,就可当作随机数来使用。科学家们定义这种数为“伪随机数”,其优点是在计算机中只要贮存几个初值,其他数就可通过迭代算得,速度快,费用低,可以重复。这正适合蒙特卡罗模拟计算需要,“伪”的就比“真”的有用。
产生伪随机数的方法又是一门特殊学科,要涉及数论等理论,这里就不愿详述了。选择方法必须注意使产生的伪随机数序列有随机性好、在计算机上容易实现、省时、周期长等特点。现在,各种大、中、小型电子计算机的软件系统中一般都有产生伪随机数的专用于程序,连微机及计算器中也有简单的伪随机数产生子程序,可见用途之广。日益广泛的应用
2、假随机数的产生
真的随机数如同掷骰子一样,产生1-6范围内的随机整数,抽奖用的摇号码机产生的0-9范围内的随机整数,这些真的随机数除了统计规律外无其他规律可循。假随机数就是用某种算法给出的似乎随机的数,既然数的给出是按照某种算法的那么就有某种规律,那么这些数必然有一定的周期,设周期是n那么n+1就一定是第一个数了,此后均要一次重复出现。当然如果周期足够大,可使在整个使用过程中不至于呈现周期性,那么假随机数也是使用的。例如,让计算机的假随机数发生器其周期大于机器的记忆单元数。此外假随机数的统计性质也是表征随机数品质的又一个重要的指标。均匀分布的随机数,即要求数的出现是随机均匀的,也要求数的分布是均匀的。至于评价数的均匀,这里不作介绍。
2、1 均匀随机数的产生
产生均匀随机数常用幂剩余法,例如可按如下的公式产生随机数
xn=cx n-1(modN)
或者写成xn=cx n-1-Nint(cx n-1/N)
其中c、N为给定的常数,给出x0后,就可以用上式依次给出x1,x2……等等,如何确定常数c、N、X0是十分关键的问题,人们仍然在不断的研究中,现面给出c、N和X0的一般原则。N的取值一般取N=2 m-1,其中m为计算机的二进制数的字长,N-1一般取计算机能表现出来的最大整数,如字长16位的N=2^15=32768;字长32位的 N=2^31=2147483648,c的取值一般取c=8*M+-3,其中M位任一正整数,如有取 c=16897,c=65539,c=397204099等,建议取c~N1/2,这样统计性比较好,关于x0的取值,一般取x0为奇数,如x0=13。可以检验其他条件不变,x0是奇数时,周期是T,偶数时周期时T/2。如N=64,c=5,x0=2则得
x1=10
x2=50
x3=58
x4=34
x5=42
x6=18
x7=26
x8=2
如此可见x8=x0,可见这列数字得周期是8,若令x0=1,其余不变,则数列为
5,25,51,49,53,9,45,33,37,57,29,17,21,41,13,1
则周期为16
若按照上式产生得随机序列其值域为0~N-1,若要产生0~1之间的得随机数只要把每个随机数在除以N即可。
2、2随机性统计检验
一个好得随机数发生器或一个好得随机数生成程序要有两个条件
1、生成的随机数有足够长的周期。2、生成的随机数列应当有真正随机序列的统计性质。其周期的长短比较容易测试和判断,尔统计性质的优劣则不那么简单了。下面着重讨论统计性质的两种常用的检验方法,频数分布检验和行程频数检验。
先讨论频数分布检验。对于一个均匀分布的随机数发生器,设所产生的随机数序列的值域为[0,1],则所产生的随机数字应与从0~1之间均匀的频数分布一致,为检验频数分布情况,可按画统计直方图的方法,将整个至于分成M个宽度相等的子区间,设xi是第i子区间内出现的随机数的个数,即第i个子区间的频数,则所有子区间中随机数的个数的平均频数
郁闷,没有公式编辑器,这后面的公式就不介绍了,大概了解下算了
就是每一个子区间中出现x个数字的几率要服从高斯分布规律
行程频数检验中的行程是指数字序列中单调上升或单调下降的连续数字串中数字的个数。由统计规律可知,对一个真正随机数序列其中行程长度k出现次数的期望值为E(K)
k=1,E(K)=1/12*(5N+1)
k=2,E(K)=1/60*(11N-14)
……
k<N-1,E(K)=2/(k+3)!*[N(k2+3k+1)-(k3+3k2-k-4)]
行程长度k为任意值E(K)=1/3(2N-1)
检验的方法就是输出给定随机数序列中出现的各种行程长度的次数,并与上述的期望值想比较,符合程度好的随机性好。
上述的两种检验方法都获得满意结果的随机数,一般来说是可以信任的均匀分布的随机数序列。但仍然不是真正的随机数,因为并不能保证他们满足真正随机数的其他统计性质。
3、用mc方法计算积分
已知函数f(x)在区间[a,b]上连续,A点x=a,B点x=b,其函数曲线f(x)-x,如图。
图片点击可在新窗口打开查看此主题相关图片如下:
下面介绍用mc方法来计算对f(x)的在[a,b]上的定积分
如图在图上做一个矩形,其宽度是b-a,高度是f(x)在[a,b]上的最大值f(m),那么矩形的面积就是s1=(b-a)*f(m),给出两个随机数xi和yi,且满足
a<=xi<=b,0<=yi<=f(m),则所有的随机点都落在图中的矩形内。如果不等式yi<f(xi)成立,那么随即点(xi,yi)还落在矩形中的阴影区域内。
总共设产生了N个随机点,落在阴影中的点数为M,那么当N足够大的时候对f(x)求区间[a,b]上的积分就换算成了求阴影的面积s2=M/N*(b- a)*f(m)。其实这和前面计算圆的面积没有本质的差别。对于比较复杂的问题,其基本处理方法还是相同的。如用mc方法计算一个具有空洞的球体质量和质心坐标等。
随着电子计算机技术的发展,大容量、高速度新型计算机不断问世,蒙特卡罗方法越来越明显地发挥它的威力。上面已经说到,它首先是在研制核武器及核反应过程中发展起来的。如今,在各种新式武器的研制中,包括核武器、强激光武器、粒子束武器等都得到了广泛应用,而且在核电站设计、聚变堆研究中也发展了成套的蒙特卡罗程序软件。另外,在军事科学技术研究中也求助于蒙待卡罗方法:在实战前,对作战双方的军事实力、政治、经济、地理、气象等因素进行模拟,但这些因素可能随时发生变化,如果在计算机上进行“战斗”模拟,计算机就可以在很短时间内把一个很长的战斗过程模拟下来,告诉我们可能的结果。这样,军事指挥人员就可以进行成千上万次的战斗模拟,从中选择对自己一方量有利又最稳妥的作战方案,赢得战争的胜利。这相当于用计算机进行大规模的军事演习。现在世界上已有不少国家采用这种模拟方法,并在实际战斗中取得了成功。蒙特卡罗方法在国民经济、科学研究中亦已被广泛应用。在航天飞行器设计,稀薄气体分子动力学计算、高能物理、理论物理、凝聚态理论、材料科学、气象预报、可靠性工程及风险评价、地质探矿乃至医学科学中都大量使用了此种方法。我们可以毫不夸张地预言,随着计算机技术包括硬件、软件的新发展,蒙特卡罗方法应用的领域及深度还将有更大的发展。同时,人们也不会再感到它深奥莫测,而是得心应手的科学研究手段。
当然,实际问题要比掷骰子和硬币复杂得多。但是,统计数学的现象和规律是类似的,由于这种方法受到赌博的启示,所以人们就形象地用赌博城蒙特卡罗来命名这种计算方法。独具风格的计算方法。
MC(Monte Carlo)是上世纪四十年代,Los Alamos实验室(LANL)曼哈顿计划中由Stanislaw Ulam和Von Neumann两位数学家倡导和创建的一种独具特色的数值模拟方法。为体现方法的内涵,他们用世界著名赌城的名字将其命名为Monte Carlo方法。
MC方法也被称为统计实验方法,Monte Carlo借助计算机,发展功能强大和计算高效的程序是应用的前提。MCNP即是蒙特卡罗大型科学计算程序,用于处理连续能量、时间相关、三维几何、中子-光子-电子辐射输运问题。
蒙特卡罗方法不仅名称独特,它的计算模拟过程也独具风格,因而它常给人们带上一层神秘的色彩。但是,分析这种方法的基本特点就会发现,它的规律并不难掌握。用蒙特卡罗求解问题首先要建立一个概率模型或随机过程,使它的参数等于问题的解,然后通过对模型或过程的观察或抽样试验来计算所求参数的统计特征,最后再输出所求解的近似值。解的精度可以用估计值的标准误差来表示。根据概率论的定理,只要重复抽样随次数N趋向无穷大时,则其随机变量的算术平均将精确等于它的数学期望,即所求问题的解。当然,N实际上不可能取无穷大,但只要取到与问题相应的足够大便可十分逼近于所求的真实解。反之,N小了就得不到正确的结果。这就决定了只有在高速电子计算机上才能有效地应用这种方法。蒙特卡罗方法既可求解随机性问题,又可以求解确定性问题。所谓随机问题,是指问题的过程或参量受到随机性的影响,当然最后结果遵从统计规律,是确定的。例如,在核反应或核武器爆炸中,中子或伽玛射线在介质中的输运问题是随机性问题。因为粒子和介质元素发生什么相互作用,碰撞后如何运动都有随机性。我们可以用蒙待卡罗方法直接模拟这种输运过程,只要足够多的抽样,便可获得精确解。1946年,美国科学家首先在电子计算机上对中子连锁反应进行了模拟,并且把第一个实验程序命名为蒙特卡罗程序。
因此,蒙特卡罗方法首先在核科学研究中得到应用。其他如运筹学中的库存问题,随机服务系统中的排队问题等都属随机性问题;另一类是确定性问题,如计算定积分、解偏微分方程、线性代数方程等,它们可以用差分法、数值积分法等方法求解,但同样也可以用蒙特卡罗方法求解。在某些情况下,蒙特卡罗方法还更有优越性,如统计物理中常遇到的计算某物理系统的平均量,象内能、自由能、熵等均是高维积分,用通常数值积分法十分困难,而用Metroplis提出的特殊蒙特卡罗方法则能精确高效地求解出结果,从而使其在统计物理、凝聚态物理研究中成为一种标准算法。
MC方法主要应用于粒子输运问题上,它的适用范围分为实验核物理、反应堆核物理以及粒子辐射效应、抗辐射加固等方面。
MC方法求解粒子输运问题时,应该遵循四个主要的步骤:弄清楚粒子输运的全部物理过程;确定适用的MC技巧;确定描述粒子运动的状态参数和状态序列;确定粒子输运过程中有关分布的抽样方法。
MC模拟粒子输运过程包括以下几个物理过程,它对于我们理解MCNP程序的运算是很有用的。模拟粒子输运过程大致分为:源分布抽样,确定输运粒子的初始状态;空间、能量和运动的随机游动过程,确定粒子输运过程中的状态;记录贡献与分析结果。
MC统计模拟方法可以采用一些基本技巧,包括直接模拟方法、简单加权方法、统计估计方法、指数变换方法等,通过程序设计者对模拟程序的优化,可以极大地提高MCNP的能力。
蒙特卡罗方法有其独特的优点,第一,与所求解问题的几何维数及问题条件关系不大,几何越复杂,它相对优点越明显。例如,在粒子输运问题中,用差分法解二维问题比一线问题几乎要多4倍以上的时间,而采用蒙特卡罗方法则几乎不受影响。第二,适应性强。例如,积分域形状特殊时,用一般积分法求解困难大,而蒙特卡罗法则不受影响,对问题也不一定要进行离散化,可连续处理,如粒子能量可以连续跟踪模拟等。第三,程序结构简单,所需计算机存贮单元比其他数值方法少,容易建立通用性很强的应用软件。应当指出,蒙特卡罗计算结果的收敛性与抽样数N的平方根成反比,这就决定了要得到高精度解就必须用高速电子计算机实现大N抽样。但是它的误差只依赖于标准方差σ及。因此,要节省时间就既要研究各种模拟方法以减少方差、提高效率,所以降低方差的各种抽样技巧便成为研究该方法的重要内容。
蒙特卡罗方法有很强的适应性,问题的几何形状的复杂性对它的影响不大。该方法的收敛性是指概率意义下的收敛,因此问题维数的增加不会影响它的收敛速度,而且存贮单元也很省,这些是用该方法处理大型复杂问题时的优势。因此,随着电子计算机的发展和科学技术问题的日趋复杂,蒙特卡罗方法的应用也越来越广泛。它不仅较好地解决了多重积分计算、微分方程求解、积分方程求解、特征值计算和非线性方程组求解等高难度和复杂的数学计算问题,而且在统计物理、核物理、真空技术、系统科学、信息科学、公用事业、地质、医学,可靠性及计算机科学等广泛的领域都得到成功的应用。
为对mc方法有个初步的认识先看个用mc方法求圆周率的例子。
设园的半径是r,圆心位于xoy平面的(r,r)处,且内切于边长为2r的正方形中,那么显然正方形的面积是S1=4r×r,用mc方法计算圆的面积的基本思想是随机的正方形范围内部画点,若共画了N个点,而落在圆内部的有M个点,当N足够大的时候,圆的面积可为s=M/N*S1,基本方法是首先产生两个随机数x和y其值域为[0,2r],然后进行判断(x,y)是否落在圆内
(x-r)2+(y-r)2<r2
记录下总的点数N和落在圆中的点数M,则圆的面积为S=4r2M/N,从而得pi=4×M/N
这里要注意两点:第一,两个随机数要是在矩形范围内均匀分布得。大部分计算机语言提供了随机数发生器,可产生0-1之间得均匀随机数,经过适当得变换不难变成任意值域得均匀随机数。第二,随机数得个头N必须要足够大。已确保一定得精度。负责由于统计涨落过大而使得误差很大,这是统计方法得自身得规律。
mc方法不仅能用于物理方程得数值计算,也可以用于物理过程得数字模拟。氢原子的电子云模拟就是一个简单的例证,由量子力学可以得知氢原子的s态波函数 ψ=ψ(r)只是半径的函数,于θ,φ无关,而氢原子中的电子沿半径r的分布密度即电子在半径r处单位厚度球壳内出现的几率
D=4×pi×r2×ψ2
习惯上把这种分布称作为电子云。
氢的基态1s态(n=1,l=0,m=0),有
D=1/(a1*a1*a1)4×r2×e-2r/a1
Dmax=1.1
r0=0.25nm
其中a1=5。29×10-2 nm,是D的最大值Dmax处的r值,其值是与波尔半径相同,r0是Dmax处的r值,其值与波尔半径相同。r0是D收敛处的r值,即D的收敛点。
氢的2s态(n=2,l=0,m=0)有
D=1/(8×a1*a1*a1)×(2-r/a1)2×e-r/a1
Dmax=0.14
r0=1.0nm
氢原子的3s态(n=3,l=0,m=0)有
D=1/(81×81×3×a1*a1*a1)[27-18*r/a1+2*(r/a)2]×e-2r/3a1
Dmax=0.2
r0=2.0nm
氢的电子云的模拟是依据上述的分布函数用绘图点的密度来描绘电子的概率分布函数,在氢原子例子中设随机数发生器可产生0-1的随机数,记做rand(k)(k=1,2,3……),首先利用一个随机数rand(1)来产生一个随机的电子半径轨道
r=r0*rand(1)
显然0<r<r0,由r计算出D(r)。再产生一个随机的概率判据D0=Dmax* rand(2)进行判断,如果D(r)<D0,则从新开始,否则再产生一个随机的角度值
θ=2*pi*rand(3)。最后计算要描绘的点的坐标x=srcosθ y=srsinθ。其中s是控制图形的尺寸因子,与每纳米点数相对应。绘出点(x,y)后再从新上述的过程,经过足够多的次数电子云的图貌就由点的疏密反应出来了。
随机数的真与伪
蒙特卡罗方法模拟问题都离不开随机抽样,于是就需要产生各种概率分布的随机变量,其中最简单也最重要的随机变量是在[0,1]上均匀分布的随机变量。我们把[0,1]上均匀分布随机变量的抽样值称之为随机数。因此在电子计算机上如何产生这种“真正”的随机变量,就变得特别重要。
随机抽样的一种方法是物理方法,它应用某种物理现象的随机性,在计算机上设有专门的附件实现,称为“随机数发生器”。它所产大的随机数倒是“真”的随机数,但其缺点是过程一去不复返,不能进行重复检查,而且设备费用昂贵,不实用。另一种是目前广泛使用的数学方法,它用迭代过程实现,每个相邻数由其前一个数,或前一组的数通过某些算术或逻辑运算求得。显然,这样的一系列数就不是真正的随机数,但它们只要能通过一系列局部随机性检验,就可当作随机数来使用。科学家们定义这种数为“伪随机数”,其优点是在计算机中只要贮存几个初值,其他数就可通过迭代算得,速度快,费用低,可以重复。这正适合蒙特卡罗模拟计算需要,“伪”的就比“真”的有用。
产生伪随机数的方法又是一门特殊学科,要涉及数论等理论,这里就不愿详述了。选择方法必须注意使产生的伪随机数序列有随机性好、在计算机上容易实现、省时、周期长等特点。现在,各种大、中、小型电子计算机的软件系统中一般都有产生伪随机数的专用于程序,连微机及计算器中也有简单的伪随机数产生子程序,可见用途之广。日益广泛的应用
2、假随机数的产生
真的随机数如同掷骰子一样,产生1-6范围内的随机整数,抽奖用的摇号码机产生的0-9范围内的随机整数,这些真的随机数除了统计规律外无其他规律可循。假随机数就是用某种算法给出的似乎随机的数,既然数的给出是按照某种算法的那么就有某种规律,那么这些数必然有一定的周期,设周期是n那么n+1就一定是第一个数了,此后均要一次重复出现。当然如果周期足够大,可使在整个使用过程中不至于呈现周期性,那么假随机数也是使用的。例如,让计算机的假随机数发生器其周期大于机器的记忆单元数。此外假随机数的统计性质也是表征随机数品质的又一个重要的指标。均匀分布的随机数,即要求数的出现是随机均匀的,也要求数的分布是均匀的。至于评价数的均匀,这里不作介绍。
2、1 均匀随机数的产生
产生均匀随机数常用幂剩余法,例如可按如下的公式产生随机数
xn=cx n-1(modN)
或者写成xn=cx n-1-Nint(cx n-1/N)
其中c、N为给定的常数,给出x0后,就可以用上式依次给出x1,x2……等等,如何确定常数c、N、X0是十分关键的问题,人们仍然在不断的研究中,现面给出c、N和X0的一般原则。N的取值一般取N=2 m-1,其中m为计算机的二进制数的字长,N-1一般取计算机能表现出来的最大整数,如字长16位的N=2^15=32768;字长32位的 N=2^31=2147483648,c的取值一般取c=8*M+-3,其中M位任一正整数,如有取 c=16897,c=65539,c=397204099等,建议取c~N1/2,这样统计性比较好,关于x0的取值,一般取x0为奇数,如x0=13。可以检验其他条件不变,x0是奇数时,周期是T,偶数时周期时T/2。如N=64,c=5,x0=2则得
x1=10
x2=50
x3=58
x4=34
x5=42
x6=18
x7=26
x8=2
如此可见x8=x0,可见这列数字得周期是8,若令x0=1,其余不变,则数列为
5,25,51,49,53,9,45,33,37,57,29,17,21,41,13,1
则周期为16
若按照上式产生得随机序列其值域为0~N-1,若要产生0~1之间的得随机数只要把每个随机数在除以N即可。
2、2随机性统计检验
一个好得随机数发生器或一个好得随机数生成程序要有两个条件
1、生成的随机数有足够长的周期。2、生成的随机数列应当有真正随机序列的统计性质。其周期的长短比较容易测试和判断,尔统计性质的优劣则不那么简单了。下面着重讨论统计性质的两种常用的检验方法,频数分布检验和行程频数检验。
先讨论频数分布检验。对于一个均匀分布的随机数发生器,设所产生的随机数序列的值域为[0,1],则所产生的随机数字应与从0~1之间均匀的频数分布一致,为检验频数分布情况,可按画统计直方图的方法,将整个至于分成M个宽度相等的子区间,设xi是第i子区间内出现的随机数的个数,即第i个子区间的频数,则所有子区间中随机数的个数的平均频数
郁闷,没有公式编辑器,这后面的公式就不介绍了,大概了解下算了
就是每一个子区间中出现x个数字的几率要服从高斯分布规律
行程频数检验中的行程是指数字序列中单调上升或单调下降的连续数字串中数字的个数。由统计规律可知,对一个真正随机数序列其中行程长度k出现次数的期望值为E(K)
k=1,E(K)=1/12*(5N+1)
k=2,E(K)=1/60*(11N-14)
……
k<N-1,E(K)=2/(k+3)!*[N(k2+3k+1)-(k3+3k2-k-4)]
行程长度k为任意值E(K)=1/3(2N-1)
检验的方法就是输出给定随机数序列中出现的各种行程长度的次数,并与上述的期望值想比较,符合程度好的随机性好。
上述的两种检验方法都获得满意结果的随机数,一般来说是可以信任的均匀分布的随机数序列。但仍然不是真正的随机数,因为并不能保证他们满足真正随机数的其他统计性质。
3、用mc方法计算积分
已知函数f(x)在区间[a,b]上连续,A点x=a,B点x=b,其函数曲线f(x)-x,如图。
图片点击可在新窗口打开查看此主题相关图片如下:
下面介绍用mc方法来计算对f(x)的在[a,b]上的定积分
如图在图上做一个矩形,其宽度是b-a,高度是f(x)在[a,b]上的最大值f(m),那么矩形的面积就是s1=(b-a)*f(m),给出两个随机数xi和yi,且满足
a<=xi<=b,0<=yi<=f(m),则所有的随机点都落在图中的矩形内。如果不等式yi<f(xi)成立,那么随即点(xi,yi)还落在矩形中的阴影区域内。
总共设产生了N个随机点,落在阴影中的点数为M,那么当N足够大的时候对f(x)求区间[a,b]上的积分就换算成了求阴影的面积s2=M/N*(b- a)*f(m)。其实这和前面计算圆的面积没有本质的差别。对于比较复杂的问题,其基本处理方法还是相同的。如用mc方法计算一个具有空洞的球体质量和质心坐标等。
随着电子计算机技术的发展,大容量、高速度新型计算机不断问世,蒙特卡罗方法越来越明显地发挥它的威力。上面已经说到,它首先是在研制核武器及核反应过程中发展起来的。如今,在各种新式武器的研制中,包括核武器、强激光武器、粒子束武器等都得到了广泛应用,而且在核电站设计、聚变堆研究中也发展了成套的蒙特卡罗程序软件。另外,在军事科学技术研究中也求助于蒙待卡罗方法:在实战前,对作战双方的军事实力、政治、经济、地理、气象等因素进行模拟,但这些因素可能随时发生变化,如果在计算机上进行“战斗”模拟,计算机就可以在很短时间内把一个很长的战斗过程模拟下来,告诉我们可能的结果。这样,军事指挥人员就可以进行成千上万次的战斗模拟,从中选择对自己一方量有利又最稳妥的作战方案,赢得战争的胜利。这相当于用计算机进行大规模的军事演习。现在世界上已有不少国家采用这种模拟方法,并在实际战斗中取得了成功。蒙特卡罗方法在国民经济、科学研究中亦已被广泛应用。在航天飞行器设计,稀薄气体分子动力学计算、高能物理、理论物理、凝聚态理论、材料科学、气象预报、可靠性工程及风险评价、地质探矿乃至医学科学中都大量使用了此种方法。我们可以毫不夸张地预言,随着计算机技术包括硬件、软件的新发展,蒙特卡罗方法应用的领域及深度还将有更大的发展。同时,人们也不会再感到它深奥莫测,而是得心应手的科学研究手段。
No comments:
Post a Comment