蒙特卡洛方法计算pi

Posted 小河沟大河沟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蒙特卡洛方法计算pi相关的知识,希望对你有一定的参考价值。

     

         基本思想: 利用圆与其外接正方形面积之比为pi/4的关系,通过产生大量均匀分布的二维点,计算落在单位圆和单位正方形的数量之比再乘以4便得到pi的近似值。样本点越多,计算出的数据将会越接近真识的pi(前提时样本是“真正的”随机分布)。

         蒙特卡罗(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的主要内容,如果未能解决你的问题,请参考以下文章

php 算法2 TIEA211计算pi蒙特卡罗方法

Python蒙特卡罗计算圆周率PI——Numpy性能优化

蒙特卡洛方法

蒙特卡洛方法估算圆周率

使用 C 求 pi 的蒙特卡洛方法

使用蒙特卡罗模拟多线程计算 Pi