蒙特卡洛方法计算圆周率(C语言实现)

蒙特卡洛方法计算圆周率(C语言实现)

ID:42370237

大小:556.13 KB

页数:8页

时间:2019-09-13

蒙特卡洛方法计算圆周率(C语言实现)_第1页
蒙特卡洛方法计算圆周率(C语言实现)_第2页
蒙特卡洛方法计算圆周率(C语言实现)_第3页
蒙特卡洛方法计算圆周率(C语言实现)_第4页
蒙特卡洛方法计算圆周率(C语言实现)_第5页
资源描述:

《蒙特卡洛方法计算圆周率(C语言实现)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、蒙特卡洛方法计算圆周率(C语言实现)2018年3月19日目录1圆周率简介12蒙特卡洛法计算圆周率的原理13编程实现23.1生成随机点............................................33.2第一种方法............................................53.3第二种方法............................................64总结81圆周率简介圆周率是一个在数学及物理学中普遍存在的一个数学常数,一般用希腊字

2、母表示,是精确计算圆周长、圆面积、球体积等几何形状的关键值。是一个无理数,即无限不循环小数。在日常生活中,通常使用3:14代表圆周率去进行近似计算,而十位小数3:141592654足以应付一般的计算,但在某些需要进行精密计算的场合,则需要将取值到小数点后数百位。在计算机诞生之前,人们一般使用实验、几何计算以及数学分析的方法手工计算的值,而在计算机诞生之后,人们则应用计算机编程的方式计算它的值,使得无论在计算精度还是计算速度均达到了前所未有的高度。本文将主要应用C语言中的选择结构和循环结构知识,并采用蒙特卡

3、洛法编程计算圆周率的近似值。2蒙特卡洛法计算圆周率的原理蒙特卡洛法(MonteCarlomethod)是一种以概率统计理论为指导一类非常重要的数值计算方法,因此也称统计模拟方法。该方法的基本思想是通过“实验”,以某件事情出现的频率估计为这一随机事件的概率,并将其作为问题的解。用蒙特卡洛法求圆周率的基本原理如图1所示。1(a)n=100(b)n=800(c)n=2000图1:蒙特卡洛法求的原理图图中,红色的点表示落入半径为r的圆内的点,蓝色的点则表示落在圆外但落在该圆外接正方形内的点,每个点的坐标均为随机生成

4、。称图中的点为“实验点”。随着实验点的增加,圆的面积SC与外接正方形面积SR的比值接近于红色点数Nr与总的点数Nr+Nb之比,即:Sr2NCr=SR(2r)2Nr+Nb其中,Nr和Nb分别是红色点和蓝色点的数量,由此可得4Nr(1)Nr+Nb图2表明了的近似计算结果与随机生成点的个数n之间的关系。可以看出,随着n的取值不断4Nr增大,利用公式(1)得到的计算结果将逐渐向值趋近,可知当n!+1时,将有!。Nr+Nb543的近似结果21000:20:40:60:81n410图2:的近似结果与n的关

5、系3编程实现在清楚了蒙特卡洛法求圆周率近似值的原理之后,就可以动手编写程序了。不过,在真正编写的近似求值程序之前,需要首先弄清楚随机点如何生成。23.1生成随机点在二维平面内,每个点p都具有x和y两个坐标值,随机生成的点的位置是由x和y的随机性决定的。在C语言中,我们使用rand函数生成随机值,该函数已在stdlib.h头文件中声明,其函数原型为intrand();该函数返回0~RAND_MAX之间的一个随机数。首先,我们编写一个19行代码的小程序认识一下这个函数。1#include2#inc

6、lude3#include45intmain()6{7/*查看RAND_MAX的值*/8printf("valueofRAND_MAX:%d",RAND_MAX);910/*生成随机种子值*/11srand(time(0));1213/*生成10个随机数*/14for(inti=0;i<10;++i){15printf("随机数:%d",rand());16}1718return0;19}代码中用到了srand、rand和time三个函数,其中srand和rand函数声

7、明在了头文件stdlib中,而time函数声明在了头文件time.h中,所以代码中的第2行和第3行即是包含这两个头文件,以保证对这些函数的正确调用。另外,RAND_MAX宏也定义在了头文件stdlib.h中。第8行代码查看宏RAND_MAX的值是多少,这个值代表了rand函数返回的最大值。第11行语句中对srand函数进行了调用,作用是将当前时间作为随机数发生器的种子值。这样,程序每次执行时后调用rand函数生成的随机数序列都是不同的,保证了程序执行结果的随机性。第14行至第16行代码使用for循环语句对rand

8、函数进行了10次调用,对该函数生成的随机值进行查看。编译并运行上述程序,得到如下执行结果:valueofRAND_MAX:2147483647随机数:1809125554随机数:1374689606随机数:817374586随机数:673529929随机数:10581287613随机数:524710314随机数:2031481267随机数:634257328随机数:811

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。