蒙特卡洛方法计算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

时间: 2024-10-10 21:20:22

蒙特卡洛方法计算pi的相关文章

算法之美--1.蒙特卡洛方法计算pi

#include <iostream> #include <iomanip> using namespace std; #define SIZE 8 int main(int argc, char **argv[]) { int matrix[SIZE][SIZE] = {0}; int a[SIZE][SIZE] = { 0 }; int *p = nullptr; p = &matrix[0][0]; //初始化矩阵 for (int k = 0; k < SIZ

用蒙特卡洛方法计算派-python和R语言

用蒙特卡洛方法算pi-基于python和R语言 最近follow了MOOC上一门python课,开始学Python.同时,买来了概率论与数理统计,准备自学一下统计.(因为被鄙视过不是统计专业却想搞数据分析) 有趣的是书里面有一块讲蒲丰投针计算Pi,这是一种随机模拟法,也就是蒙特卡洛法.蒲丰投针之于我太难,暂时没想到怎么用计算机模拟这一过程. python课中,老师也提到用随机模拟法,也就是蒙特卡洛法(MonteCarlo),用计算机模拟几千次实验,计算pi的近似值.好巧. 就拿python课中的

蒙特卡洛方法计算圆周率的三种实现-MPI openmp pthread

蒙特卡洛方法实现计算圆周率的方法比较简单,其思想是假设我们向一个正方形的标靶上随机投掷飞镖,靶心在正中央,标靶的长和宽都是2 英尺.同时假设有一个圆与标靶内切.圆的半径是1英尺,面积是π平方英尺.如果击中点在标靶上是均匀分布的(我们总会击中正方形),那么飞镖击中圆的数量近似满足等式 飞镖落在圆内的次数/飞镖落在标靶内的总次数=π/4 因为环包含的面积与正方形面积的比值是π/4. 因为环所包含的面积与正方形面积的比值是π/4. 我们可以用这个公式和随机数产生器来估计π的值. 伪代码如下: numb

(转)Monte Carlo method 蒙特卡洛方法

转载自:维基百科  蒙特卡洛方法 https://zh.wikipedia.org/wiki/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%95 蒙特卡洛方法[编辑] 维基百科,自由的百科全书 蒙特卡洛方法(英语:Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法.是指使用随机数(或更常见的伪随机数)来解决很多

二十世纪最有影响力的十大算法之一: 蒙特卡洛方法

第一部分:算法介绍 [1946: John von Neumann, Stan Ulam, and Nick Metropolis, all at the Los Alamos Scientific Laboratory, cook up the Metropolis algorithm, also known as the Monte Carlo method.]1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropol

用hadoop计算PI值

一.计算PI值的方式与原理 百度一下,计算PI的方法还真不少.但在hadoop examples代码中的注释写的是:是采用 Quasi-Monte Carlo 算法来估算PI的值. 维基百科中对Quasi-Monte Carlo的描述比较理论,好多难懂的公式. 好在google了一把,找到了斯坦福大学网站上的一篇文章:<通过扔飞镖也能得出PI的值?>,文章很短,图文并茂,而且很好理解. 我这里将那篇文章的重要部分截了个图: 对上面的图再稍微解释一下:       1.Figure2是Figur

蒙特卡洛方法求解圆周率

代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>蒙特卡洛方法求解圆周率</title> <style> body { -moz-user-select: none; /*火狐*/ -webkit-user-select: none; /*webkit浏览器*/ -ms-user-sel

一文读懂蒙特卡洛方法:谷歌围棋机器人科普

蒙特卡罗方法入门 本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method). 一.概述 蒙特卡罗方法是一种计算方法.原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值. 它非常强大和灵活,又相当简单易懂,很容易实现.对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法. 它诞生于上个世纪40年代美国的"曼哈顿计划",名字来源于赌城蒙特卡罗,象征概率. 二.π的计算 第一个例子是,如何用蒙特卡罗方法计算圆周率π. 正方形内部有一个相切的圆,它们

蒙特卡罗方法计算圆周率

蒙特卡罗方法计算圆周率 前几天读到了一篇网志:蒙特卡罗方法入门,http://www.ruanyifeng.com/blog/2015/07/monte-carlo-method.html 其中介绍了用概率计算圆周率的方法,所以就用程序做了以下尝试. 作为常量的PI值的近似在Math.PI中为3.141592653589793. Ⅰ.方形中的所有像素计算 package yumu.probability.montecarlo; public class CalculatePI { private