[摘录自百度百科]蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。上章研究了Property
List详解需要了解的可以看看。
下面介绍使用蒙特·卡罗方法求解圆周率PI的方法。
算法模型:
假设有一个1单位边长的正方形,我们再以该正方形的一个顶点为圆点,以1单位为半径做一个1/4圆弧,如图。
根据圆形面积公式可是:s=πr^2=π。而1/4的圆弧则为s/4=π/4。而正方形面积为1。
我们假设这样一个情景:限定有一些随机的点落在该正方形内,点的个数为n,而落在圆弧内的点为m(如何判断一个点在圆内还是圆弧外呢?因为圆弧上的点距离圆心正好是半径1,所以距离圆心小于1的就在圆内,比如图中的蓝色点,而红色点在圆外),则如果点数足够多的话,会于正方形和圆弧的面积有关,即有:1/4圆弧面积除以正方形面积=π/4=m/n.
则有:π=4*m/n。
如果用计算机模拟大量的随机数,则会计算出比较精确的π。
下面是蒙特·卡罗方法求π的C语言实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include < iostream > #include < cmath > #include < ctime > #define COUNT 500000 // 循环取样次数 using // 判断点是否在1/4圆范围之内 bool InCircle( { if return return } void main() { double x,y; int num int i; srand((unsigned)time(NULL)); for { x y if num } cout } |
IOS研究之蒙特卡罗法求圆周率π(PI)(