蒲丰氏问题.pptVIP

  • 249
  • 0
  • 约5.47千字
  • 约 23页
  • 2018-07-04 发布于河南
  • 举报
蒲丰氏问题

蒙特卡罗方法编程作业 用蒲丰投针法在计算机上计算π值,取a=4、l=3。 分别用理论计算和计算机模拟计算,求连续掷两颗骰子,点数之和大于6且第一次掷出的点数大于第二次掷出点数的概率。 蒲丰氏问题的求解模型 设针投到地面上的位置可以用一组参数(x,θ)来描述,x为针中心的坐标,θ为针与平行线的夹角,如图所示。 任意投针,就是意味着x与θ都是任意取的,但x的范围限于[0,a],夹角θ的范围限于[0,π]。在此情况下,针与平行线相交的数学条件是 蒲丰氏问题的算法 如何产生任意的(x,θ)?x在[0,a]上任意取值,表示x在[0,a]上是均匀分布的,其分布密度函数为: 类似地,θ的分布密度函数为: 因此,产生任意的(x,θ)的过程就变成了由f1(x)抽样x及由f2(θ)抽样θ的过程了。由此得到: 其中ξ1,ξ2均为(0,1)上均匀分布的随机变量。 每次投针试验,实际上变成在计算机上从两个均匀分布的随机变量中抽样得到(x,θ),然后定义描述针与平行线相交状况的随机变量s(x,θ),为 如果投针N次,则 是针与平行线相交概率P的估计值。事实上, 于是有 Matlab 算例 clear all; clc; aa=5^15; MM=2^48; x1=5; fprintf(蒙特卡罗方法解蒲丰氏问题 \n); fprintf(作者:向东 2010年3月 \n); a=input(请输入平行线相间的半距离(默认值a=4.0) a=); l=input(请输入针的半长度(默认值l=3.0) l=); N=input(请输入模拟试验次数(默认值N=100000) N=); 参照: 在[a,b]上均匀分布的抽样 在[a,b]上均匀分布的分布函数为: 参考:散射方位角余弦分布的抽样 散射方位角φ在[0,2π]上均匀分布,则其正弦和余弦sinφ和cosφ服从如下分布: 直接抽样方法为: 令φ=2θ,则θ在[0,π]上均匀分布,作变换 其中0≤ρ≤1,0≤ρ≤π,则 (x,y) 表示上半个单位圆内的点。如果 (x,y) 在上半个单位圆内均匀分布,则θ在[0,π]上均匀分布,由于 因此抽样sinφ和cosφ的问题就变成在上半个单位圆内均匀抽样 (x,y) 的问题。 为获得上半个单位圆内 的均匀点,采用挑选法,在 上半个单位圆的外切矩形内 均匀投点(如图)。 舍弃圆外的点,余下的就是所要求的点。 抽样方法为: 抽样效率 E=π/4≈0.785 C/C++算例 #include stdio.h #include stdlib.h #include math.h #include iostream.h #define PI 3.1415926535897932384626433832795 _int64 rdm = 5; _int64 a = pow(5,15);//30517578125 _int64 M = pow(2,48);//281474976710656 _int64 rdm_n = 0; //产生随机数 double random01() { _int64 rand1; double rand2; rand1 = (a*rdm)%M; if (rand10) rand1=M+rand1; rdm = rand1; rand2 = rand1*1.0/M; rdm_n++; return rand2; } 作业2 (选做) 分别用理论计算和计算机模拟计算,求连续掷两颗骰子,点数之和大于6且第一次掷出的点数大于第二次掷出点数的概率。 参考: 掷骰子点数的抽样 掷骰子点数X=n的概率为: 选取随机数ξ,如 则 在等概率的情况下,可使用如下更简单的方法: 其中[]表示取整数。 Matlab 算例 clear all;clc; aa=5^15; MM=2^48; x1=5; fprintf(蒙特卡罗方法解蒲丰氏问题 \n); fprintf(作者:向东 2010年3月 \n); N=input(请输入模拟试验次数(默认值N=100000) N=); if isempty(N) N=100000; end s=0; for n=1:1:N; x

文档评论(0)

1亿VIP精品文档

相关文档