使用蒙特卡罗方法求圆周率π的设计实现及结果分析 |
您所在的位置:网站首页 › 绝对的圆和圆周率 › 使用蒙特卡罗方法求圆周率π的设计实现及结果分析 |
文章目录
前言问题描述基本思路算法描述代码实现结果分析参考文献附录附1:源代码附2:实验数据
前言
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛[1]。 问题描述使用蒙特·卡罗方法求圆周率。 基本思路如下图所示,随机生成大量的点都在矩形区域内,然后会有部分点落在圆内,两者的比值基本等于面积比值。以此为关系,建立公式求出PI的值。 给定集合两个点的集合S1和S2如下所示。 S 1 = { ( x , y ) ∣ x ∈ [ − 1 , 1 ] , y ∈ [ − 1 , 1 ] } S 2 = { ( x , y ) ∣ x 2 + y 2 ≤ 1 } S1 = \{(x,y) | x∈[-1,1], y ∈ [-1, 1] \}\\ S2 = \{(x,y) | x^2 + y^2 ≤ 1\} S1={(x,y)∣x∈[−1,1],y∈[−1,1]}S2={(x,y)∣x2+y2≤1} 其中,S1表示下图中矩形内的所有点,S2表示下图所示圆内的所有点。 利用蒙特·卡罗方法,随机生成 M个落在S1内的点,设这些点中落在S2中的点有N个。由于随机生成的点是平均分布在区域内的,所以矩形面积与圆形面积的比值可以近似表示为 N/M(当M趋于无穷大时可以取等号)。所以可得 π r 2 / ( 2 r ) 2 = S 1 / S 2 ≈ N / M \pi r^2/(2r)^2 = S1/S2 \approx N/M πr2/(2r)2=S1/S2≈N/M 利用最左右两式化简后可得 π = 4 N / M \pi = 4N/M π=4N/M 代码实现整个代码编写使用Java实现,代码附在文章尾。 结果分析原始整理的数据参见附录2。对结果进行统计分析数据如下 测试1M10M100M1000M10000M平均值3.1417941818183.1415242545453.1415517781823.1415715432733.141580096378与PI绝对误差2.0153E-046.8399E-054.0875E-052.1110E-051.2557E-05方差1.2234E-033.9009E-041.5801E-044.8368E-053.5344E-05根据以上结果我们可以看到: 根据与PI的绝对误差,测试次数的增加会提高计算的精度。增加测试次数,结果的方差也越来越小,结果趋于稳定。 参考文献[1] 蒙特·卡罗方法, 百度百科, https://baike.baidu.com/item/蒙特·卡罗方法. 附录 附1:源代码 public class Test{ public static void main(String[] args) { int[] mts = { 1, 10, 100, 1000, 10000 }; for (int test = 0; test long t1 = System.currentTimeMillis(); double pi = calPI(mts[test]); long t2 = System.currentTimeMillis(); System.out.printf("%d\t%.12f\t%d\n", mts[test], pi, t2 - t1); } } } static double calPI(int mtimes) { long totalTimes = mtimes * 1000 * 1000; long count = 0; for (int i = 0; i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |