文档库 最新最全的文档下载
当前位置:文档库 › 蒙特卡罗算法

蒙特卡罗算法

蒙特卡罗算法
蒙特卡罗算法

蒙特卡洛算法

算法简介:

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。蒙特·卡罗方法的名字来源于摩纳哥的一个城市蒙地卡罗,该城市以赌博业闻名,而蒙特·卡罗方法正是以概率为基础的方法。

与它对应的是确定性算法。

蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。

背景知识:

蒙特卡洛是摩纳哥公国第一大城市,与澳门、美国拉斯维加斯并称世界三大赌城。位于地中海沿岸,首都摩纳哥之北,建于阿尔卑斯山脉突出地中海的悬崖之上。景色优美,是地中海地区旅游胜地。市内建有豪华的旅馆、俱乐部、歌剧院、商店、游泳池、温泉浴室、运动场等娱乐设施。城内开设有蒙特卡洛大赌场。赌场建于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

#include

#include

#define COUNT 500000 //循环取样次数

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

...{

x=rand()*1.0/RAND_MAX;

y=rand()*1.0/RAND_MAX;

if(InCircle(x,y)) num++;

}

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

}

结果:测试5次的结果显示:3.13958,3.14041,3.13729,3.13859,3.14186[1]

相关文档