王洪彬蒙特卡洛MonteCarlo.ppt

上传人:sccc 文档编号:5414167 上传时间:2023-07-05 格式:PPT 页数:20 大小:1.05MB
返回 下载 相关 举报
王洪彬蒙特卡洛MonteCarlo.ppt_第1页
第1页 / 共20页
王洪彬蒙特卡洛MonteCarlo.ppt_第2页
第2页 / 共20页
王洪彬蒙特卡洛MonteCarlo.ppt_第3页
第3页 / 共20页
王洪彬蒙特卡洛MonteCarlo.ppt_第4页
第4页 / 共20页
王洪彬蒙特卡洛MonteCarlo.ppt_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《王洪彬蒙特卡洛MonteCarlo.ppt》由会员分享,可在线阅读,更多相关《王洪彬蒙特卡洛MonteCarlo.ppt(20页珍藏版)》请在三一办公上搜索。

1、蒙特卡罗(Monte Carlo)方法,简介及算法实现(C+版&Java版)物理学院 0510267王洪彬,蒙特卡洛法是什么?,蒙特卡洛(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于“随机数”的计算方法。这一方法源于美国在第二次世界大战中研制原子弹的“曼哈顿计划”。该计划的主持人之一、数学家冯诺伊曼用驰名世界的赌城摩纳哥的Monte Carlo来命名这种方法,为它蒙上了一层神秘色彩。,Monte Carlo方法的基本思想很早以前就被人们所发现和利用。早在17世纪,人们就知道用事件产生的“频率”来近似事件的“概 率”。19世纪人们用投针试验的方法来决定圆周率。本世纪40年代电

2、子计算机的出现,特别是近年来高速电子计算机的出现,使得用数学方法在计算机上大量、快速地模拟这样的试验成为可能。,考虑平面上的一个边长为1的正方形及其内部的一个形状不规则的“图形”,如何求出这个“图形”的面积呢?Monte Carlo方法是这样一种“随机化”的方法:向该正方形“随机地”投掷N个点,若有M个点落于“图形”内,则该“图形”的面积近似为M/N。,圆周率的值=3.14159 26535 89793 23846 26433 83279 50288 41971 69399 3751058209 74944 59230 78164 06286 20899 86280 34825 34211 7

3、067982148 08651 32823 06647 09384 46095 50582 23172 53594 0812848111 74502 84102 70193 85211 05559 64462 29489 54930 3819644288 10975 66593 34461 28475 64823 37867 83165 27120 1909145648 56692 34603 48610 45432 66482 13393 60726 02491 4127372458 70066 06315 58817 48815 20920 96282 92540 91715 364367

4、8925 90360 01133 05305 48820 46652 13841 46951 94151 1609433057 27036 57595 91953 09218 61173 81932 61179 31051 1854807446 23799 62749 56735 18857 52724 89122 79381 83011 9491298336 73362 44065 66430 86021 39494 63952 24737 19070 2179860943 70277 05392 17176 29317 67523 84674 81846 76694 0513200056

5、81271 45263 56082 77857 71342 75778 96091 73637 1787214684 40901 22495 34301 46549 58537 10507 92279 68925 8923542019 95611 21290 21960 86403 44181 59813 62977 47713.,用该方法计算的基本思路是:1根据圆面积的公式:s=R2,当R=1时,S=。由于圆的方程是:x2+y2=1(x2为x的平方的意思),因此1/4圆面积为x轴、y轴和上述方程所包围的部分。如果在1*1的正方形中均匀地落入随机点,则落入1/4圆中的点的概率就是1/4圆的面积

6、。其4倍,就是圆面积。由于半径为1,该面积的值为的值。,#include#include#includeconst long N=2000000000;/*定义随机点数*/void main()int n=0;double x,y;/*坐标*/srand(time(00);for(int i=1;i=N;i+)x=(double)rand()/RAND_MAX;y=(double)rand()/RAND_MAX;/*在01之间产生一个随机x,y坐标*/if(x*x+y*y=1.0)n+;/*统计落入单位圆中的点数*/coutThe PI is 4*(double)n/Nendl;/*计算出的值

7、*/,计算机模拟实验数据处理,实验简评,由实验结果知此结果与我们前面给的值相差太大。方法不是很好,但可以通过扩大随机测试值来获得更精确的结果。注:实验中我应用了“iomanip.h”中的setprecision(int);来设置输出精度。,一道积分题,我做过一道证明积分不等式的题:我想中间的积分值可以用蒙特卡洛法求得因为它是一个二重积分,其几何直观为一 个立体的体积,很巧的是它可以完全包含 于一个棱长为1的正方体中,我们在其中产 生随机点,其中落于所求体积的点数与正 方体中产生的点数之比即为所求的积分值。下面是它的C+代码:,#include#include#include#includeco

8、nst long N=2000000000;/*定义随机点数*/void main()long n=0;double x,y,z;/*坐标*/srand(time(00);for(long i=1;i=N;i+)double m;x=(double)rand()/RAND_MAX;y=(double)rand()/RAND_MAX;z=(double)rand()/RAND_MAX;/*在01之间产生一个随机x,y,z坐标*/m=0-(x*x+y*y);if(z=exp(m)n+;/*统计落入所求体积中的点数*/coutThe integral is(double)n/Nendl;/*计算出积

9、分值*/,两端的界值,下面是一次运行结果:,恰好界于0.496466325949717和0.766666666666667之间,The integral is 0.5577358,下面是我编写的Java程序,其实现方法与我编写的C+程序是相同的:,public class CalculatePI public static final int N=2000000000;public static void main(String args)double x,y;int n=0;for(int i=0;i N;i+)x=Math.random();y=Math.random();if(x*x+y

10、*y=1)n+;System.out.println(The PI is+4*(double)n/N);,public class CalculateIntegral public static final int N=2000000000;public static void main(String args)double x,y,z,m;int n=0;for(int i=0;i N;i+)x=Math.random();y=Math.random();z=Math.random();m=0-x*x-y*y;if(z=Math.exp(m)n+;System.out.println(The

11、 Integral is+(double)n/N);,蒙特卡洛方法是一种比较粗糙的计算方法,它与其说是一种数学的方法,不如看成一种实验方法;有的时候人们不得不依赖于此种方法。一来人们的才智不够,二来它的确在某些方面给我们知识;但不可否认对于可控参数比较少的情况,蒙特卡洛法不失为一个对研究对象获得认识的一个有效方法;从计算来说,用蒙特卡洛法计算值确实粗糙,我们一般用更好的方法来计算。比如说级数的方法,下面是我用级数的方法编的C+和Java程序:,/CalculatePI_Ad.cpp#include#includevoid main()double sum=0.0,f=1;for(int i=1

12、;i+=2)sum+=f/i;if(1.0/i=1e-14)break;f=-f;coutThe PI is setprecision(15)4*sumendl;,The PI is 3.14159265079415,public class CalculatePI_Ad public static void main(String args)double sum=0.0,f=1;for(int i=1;i+=2)sum+=f/i;if(1.0/i=1e-15)break;f=-f;sum*=4;System.out.println(The PI is+sum);System.out.println(The PI in Math class is+Math.PI);,The PI is 3.1415926507941494The PI in Math class is 3.141592653589793,Game Over!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号