算法之美--1.蒙特卡洛方法计算pi
2016-11-26 23:28
441 查看
基本思想: 利用圆与其外接正方形面积之比为pi/4的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值。样本点越多,计算出的数据将会越接近真识的pi(前提时样本是“真正的”随机分布)。
蒙特卡罗(Monte Carlo)算法计算圆周率的主要思想:给定边长为R的正方形,画其内切圆,然后在正方形内随机打点,设点落在圆内的概为P,则根据概率学原理: P = 圆面积 / 正方形面积 = PI * R * R / 2R * 2R = PI / 4。即 PI=4P。这样,当随机打点足够多时,统计出来的概率就非常接近于PI的四分之一了。
实现了一下,感觉时间用的有点长。。。
参考:http://www.cnblogs.com/kodoyang/p/MonteCarloMethod_PI.html
蒙特卡罗(Monte Carlo)算法计算圆周率的主要思想:给定边长为R的正方形,画其内切圆,然后在正方形内随机打点,设点落在圆内的概为P,则根据概率学原理: P = 圆面积 / 正方形面积 = PI * R * R / 2R * 2R = PI / 4。即 PI=4P。这样,当随机打点足够多时,统计出来的概率就非常接近于PI的四分之一了。
#include <iostream> #include <ctime> using namespace std; int main() { const int MAX_TIMES = 20000000; srand(static_cast<unsigned int>(time(0))); int in=0; for (int i = 0; i < MAX_TIMES;i++) { double x = static_cast<double>(rand()) / RAND_MAX; double y = static_cast<double>(rand()) / RAND_MAX; if (x*x+y*y<=1.0) { in++; } if (i%(MAX_TIMES/100)==0) { cout << "."; } } double pi = 4.0*in / MAX_TIMES; cout << "\nPI=" << pi << endl; return 0; }
实现了一下,感觉时间用的有点长。。。
参考:http://www.cnblogs.com/kodoyang/p/MonteCarloMethod_PI.html
相关文章推荐
- 采用蒙特卡洛方法计算PI的值
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- ERP 开发过程中涉及到的算法 库存,工程,生产计划,固定资产计算方法
- java算法3_蒙特卡洛方法(Monte Carlo method)求PI和椭圆面积
- 算法习题23:用最简单, 最快速的方法计算出下面这个圆形是否和正方形相交
- C# 中使用 MD5 算法计算 hash (哈希)值的四种方法
- 从自幂数计算谈算法优化方法
- ERP 开发过程中涉及到的算法 库存,工程,生产计划,固定资产计算方法
- ERP 开发过程中涉及到的算法 库存,工程,生产计划,固定资产计算方法
- 十六进制数组转换为浮点计算方法两种算法
- 一种高效算法---振动测量中振幅的计算方法
- 算法系列之十八:用天文方法计算二十四节气(上) .
- 算法系列之十八:用天文方法计算二十四节气(上)
- 蒙特卡洛方法与定积分计算
- LDA(Linear Discriminant Analysis)算法推导和计算方法
- 数值计算方法与算法:C语言实现利用Gauss消元法解方程组
- PI 的计算方法
- 余弦方法计算相似度算法实现
- 算法系列之十八:用天文方法计算二十四节气(上)