`
gaofen100
  • 浏览: 1218306 次
文章分类
社区版块
存档分类
最新评论

利用蒙特卡洛算法求圆周率

 
阅读更多

From : http://blog.csdn.net/zzhflyqh/archive/2008/04/13/2288722.aspx

背景知识:

蒙特卡洛是摩纳哥公国第一大城市,与澳门、美国拉斯维加斯并称世界三大赌城。位于地中海沿岸,首都摩纳哥之北,建于阿尔卑斯山脉突出地中海的悬崖之上。景色优美,是地中海地区旅游胜地。市内建有豪华的旅馆、俱乐部、歌剧院、商店、游泳池、温泉浴室、运动场等娱乐设施 。城内开设有蒙特卡洛大赌场。赌场建于 1865 年,为双层楼建筑,上有钟楼、塔厅和拱形亭阁,还饰以若干人物雕塑,庭前棕榈树成行,还辟有花园,旁边有大酒店和酒吧间。整个城市在旺季时,约有赌场 70 多个,约有赌室 3500 间左右。蒙特卡罗赌场由国家经营。当地的其他活动,许多也带有色彩。游客住的旅店房间,有抽奖的号码,中奖的免付部分房费。早餐的牛奶麦片粥里,如遇上金属牌子 ,亦可领奖。该城只有 1 万人口,但每天报纸销量可达 100 万份 ,因为报纸上都印有可能得奖的号码。游客最后离境,购买的车票上也印有彩票号码,于离境前开彩。经营赌业是摩纳哥的主要经济来源,每年都从赌业中收取高额外汇利润。

蒙特卡洛算法简单描述:

概率和统计理论方法为基础的一种计算方法。将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。比如,给定 x=a ,和 x=b ,你要求某一曲线 f 和这两竖线,及 x 轴围成的面积,你可以起定 y 轴一横线 y=c 其中 c>=f(a) and c>=f(b) ,很简单的,你可以求出 y=c,x=a,x=b, x 轴围成的矩形面积,然后利用随机参生生大量在这个矩形范围之类的点,统计出现在曲线上部点数和出现在曲线下部点的数目,记为: doteUpCount,nodeDownCount, 然后所要求的面积可以近似为 doteDownCounts 所占比例 * 矩形面积。

问题描述:

在数值积分法中,利用求单位圆的 1/4 的面积来求得 Pi/4 从而得到 Pi 。单位圆的 1/4 面积是一个扇形,它是边长为 1 单位正方形的一部分。只要能求出扇形面积 S1 在正方形面积 S 中占的比例 K=S1/S 就立即能得到 S1 ,从而得到 Pi 的值。怎样求出扇形面积在正方形面积中占的比例 K 呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数 m 与所投点的总数 n 的比 m/n 作为 k 的近似值。 P 落在扇形内的充要条件是 x^2+y^2<=1

程序描述:

/**/ /*
利用蒙特卡洛算法近似求圆周率PI
VC++6.0
ZZH
*/

#include
< iostream >
#include
< cmath >
#include
< ctime >
#define COUNT500000 // 循环取样次数

using namespace std;

bool InCircle( double x, double y) // 是否在1/4圆范围之内
... {
if ((x * x + y * y) <= 1 ) return true ;
return false ;
}

void main()
... {
double x,y;
int num = 0 ;
int i;

srand((unsigned)time(NULL));
for (i = 0 ;i < COUNT;i ++ )
... {
x
= rand() * 1.0 / RAND_MAX;
y
= rand() * 1.0 / RAND_MAX;
if (InCircle(x,y))num ++ ;
}

cout
<< " PI: " << (num * 4.0 ) / COUNT << endl;
}

结果:测试 5 次的结果显示: 3.13958 3.14041 3.13729 3.13859 3.14186

分享到:
评论

相关推荐

    蒙特卡洛多核并行算法求pi

    在本文中,我们将介绍蒙特卡洛算法在求 Pi 值中的应用。 蒙特卡洛算法的背景知识: 蒙特卡洛算法是基于概率和统计理论的计算方法,通过随机采样和统计模拟来近似解决问题。蒙特卡洛算法的名称来源于摩纳哥公国的...

    用蒙特卡洛方法求π派

    【标题】"用蒙特卡洛方法求π派"是一个基于C++编程的主题,通过蒙特卡洛模拟来估算圆周率π的数值。这种方法是概率统计中的一个经典应用,利用随机抽样来解决数学问题。 【描述】指出,这个程序不仅展示了蒙特卡洛...

    python实现蒙特卡洛算法

    ### Python 实现蒙特卡洛算法 #### 一、蒙特卡洛理论基础 蒙特卡罗方法(Monte Carlo method)是一种以概率统计理论为基础的重要数值计算手段,该方法通常涉及利用随机抽样或者伪随机抽样的方式来解决各种复杂的...

    aa.zip_2227484. com_蒙特卡洛_蒙特卡洛算法

    在本文中,我们将深入探讨蒙特卡洛算法的基本原理,以及如何利用该算法求解圆周率π。 蒙特卡洛算法的核心思想在于通过大量的随机试验来近似计算一个难以直接解析或数值求解的问题。在求解圆周率的例子中,我们可以...

    蒙特卡洛算法入门

    蒙特卡洛算法是一种基于随机抽样和概率统计的数值计算方法,其历史可以追溯到18世纪末,布丰投针试验,这是一种利用随机投掷针来计算圆周率π的方法。20世纪40年代,在美国原子弹计划中,该方法被用来模拟中子的行为...

    MATLAB源码集锦-蒙特卡洛算法模拟随机数代码.zip

    这个压缩包中的源码集锦,旨在帮助用户理解并掌握如何利用MATLAB进行蒙特卡洛算法的编程。 一、蒙特卡洛算法基础 蒙特卡洛算法的核心是通过大量的随机抽样来求解问题。其基本步骤包括: 1. 定义问题:将待解决的...

    蒙特卡洛算法,包括例子和代码

    **蒙特卡洛算法概述** 蒙特卡洛算法是一种基于随机抽样或统计试验的计算方法,用于解决那些理论上解析解复杂或者无法直接求解的问题。这种算法利用概率和统计原理,通过大量的随机试验来近似求解问题的答案。由于其...

    C#求圆周率(界面)

    这种方法通常称为蒙特卡洛方法,它利用概率统计的原理,通过大量随机试验来近似计算圆周率。 在C#中实现这样的界面和动态效果,开发者可能会使用Windows Forms或WPF(Windows Presentation Foundation)作为用户...

    蒙特卡洛算法和matlab程序

    在MATLAB中实现蒙特卡洛算法的一个例子是求解圆周率π。可以模拟在一个大的正方形内部随机投点,其中落在内切圆内的点的比例近似于圆面积与正方形面积的比例,进而推算出π的值。具体代码如下: ```matlab N = 1e6;...

    Python实现蒙特卡洛算法小实验过程详解

    通过上述的圆周率计算和函数积分的实例,我们可以清晰地理解蒙特卡洛算法的工作原理,并学会如何利用Python编写相应的代码。在实际应用中,根据具体问题的特点和需求,我们可以灵活选择蒙特卡洛算法或拉斯维加斯算法...

    74.MATLAB编程 蒙特卡洛算法模拟随机数代码.rar

    MATLAB是一种强大的数值计算和数据分析工具,而蒙特卡洛算法是解决复杂问题的一种有效方法,尤其在处理随机性或概率问题时。本压缩包文件包含的代码是关于使用MATLAB实现蒙特卡洛模拟随机数的实例。下面将详细阐述...

    M.rar_圆周率_蒙特卡洛 并行_蒙特卡洛并行

    例如,压缩包中的"M.txt"文件可能包含了使用并行蒙特卡洛算法计算圆周率的具体实现。可能的程序设计包括以下步骤: 1. **初始化**:设置投掷次数、计算核心数、分配任务。 2. **并行计算**:每个核心独立生成随机...

    PI.rar_Twister_vc 随机数_蒙特卡洛 VC_随机数_随机数 圆周率

    在提供的压缩包文件中,"利用蒙特卡洛算法近似求圆周率PI.doc"很可能是详细描述这个过程的文档,可能包含了算法的实现步骤、代码示例以及计算结果的分析。而"随即数+蒙特卡洛.rar"则可能包含了一个实际的VC++6.0项目...

    求圆周率问题的一段程序

    标题中的“求圆周率问题的一段程序”指的是利用编程语言编写一段代码来计算圆周率π的值。圆周率是数学中的一个重要常数,表示圆的周长与其直径之比,通常用希腊字母π表示,其数值约为3.14159。在实际计算中,由于...

    求圆周率精确到16位

    在计算机科学中,有多种方法可以计算圆周率,其中包括经典的几何和算术方法,以及更现代的算法,如马赫林级数、 Bailey-Borwein-Plouffe (BBP) 公式,甚至利用并行计算和蒙特卡洛方法。 标签“描写事实11111”可能...

    蒙特卡洛算法升级-易语言

    蒙特卡洛算法的核心思想是利用随机数(或更准确地说是伪随机数)进行大量模拟实验,通过统计结果来逼近问题的真实解。它不需要复杂的微积分运算,而是依赖于概率和统计原理,因此在处理复杂计算问题时具有显著优势。...

    蒙特卡洛,蒙特卡洛模拟,matlab

    这个文件可能实现了一个基本的蒙特卡洛问题,例如计算圆周率。经典的例子是扔飞镖到靶心,通过记录飞镖落在圆形区域内的比例,可以近似计算出π值。随着试验次数的增加,结果会越来越接近真实的π值。 #### `...

    蒙特卡罗算法举例.zip_蒙特·卡罗_蒙特卡洛例题_蒙特卡罗_蒙特卡罗例题_蒙特卡罗法

    下面,我们将通过一个文档《蒙特卡罗算法举例.doc》中的经典例题,深入理解蒙特卡洛算法的工作原理和应用。 1. **基本原理** 蒙特卡罗算法的核心在于利用大数定律和概率统计,通过对问题进行大量的随机试验,得到...

    计算圆周率

    标题中的“计算圆周率”指的是利用编程语言C来实现计算π(圆周率)的算法。圆周率是一个无理数,表示圆的周长与其直径之比,通常用希腊字母π表示,其数值约为3.14159。在计算机科学中,有多种方法可以用于近似计算...

Global site tag (gtag.js) - Google Analytics