蒙特卡罗算法
- 格式:ppt
- 大小:1.22 MB
- 文档页数:60


蒙特卡罗方法(MC)
蒙特卡罗(Monte Carlo)方法:
蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法,属于计算数学的一个分
支,它是在本世纪四十年代中期为了适应当时原子能事业的发展而发展起来的。
传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法
由于能够真实地模拟实际物理过程,故解决问题与实际非常符合,可以得到很圆满的结
果。这也是我们采用该方法的原因。
蒙特卡罗方法的基本原理及思想如下:
当所要求解的问题是某种事件出现的概率,或者是某个随机变量的期望值时,它们可以
通过某种“试验”的方法,得到这种事件出现的频率,或者这个随机变数的平均值,并
用它们作为问题的解。这就是蒙特卡罗方法的基本思想。蒙特卡罗方法通过抓住事物运
动的几何数量和几何特征,利用数学方法来加以模拟,即进行一种数字模拟实验。它是
以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题
的近似解。可以把蒙特卡罗解题归结为三个主要步骤:构造或描述概率过程;实现从已
知概率分布抽样;建立各种估计量。
蒙特卡罗解题三个主要步骤:
构造或描述概率过程:
对于本身就具有随机性质的问题,如粒子输运问题,主要是正确描述和模拟这个概率过
程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为
的概率过程,它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化
为随机性质的问题。
实现从已知概率分布抽样:
构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,
因此产生已知概率分布的随机变量(或随机向量),就成为实现蒙特卡罗方法模拟实验
的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。最简单、最基本、最重要的
一个概率分布是(0,1)上的均匀分布(或称矩形分布)。随机数就是具有这种均匀分布的
随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种
1. 蒙特卡洛⽅法的基本思想
蒙特卡罗⽅法⼜叫统计模拟⽅法,它使⽤随机数(或伪随机数)来解决计算的问题,是⼀类重要的数值计算⽅法。该⽅法的名字来源于世界著名的赌城蒙特卡罗,⽽蒙特卡罗⽅法正是以概率为基础的⽅法。
⼀个简单的例⼦可以解释蒙特卡罗⽅法,假设我们需要计算⼀个不规则图形的⾯积,那么图形的不规则程度和分析性计算(⽐如积分)的复杂程度是成正⽐的。⽽采⽤蒙特卡罗⽅法是怎么计算的呢?⾸先你把图形放到⼀个已知⾯积的⽅框内,然后假想你有⼀些⾖⼦,把⾖⼦均匀地朝这个⽅框内撒,散好后数这个图形之中有多少颗⾖⼦,再根据图形内外⾖⼦的⽐例来计算⾯积。当你的⾖⼦越⼩,撒的越多的时候,结果就越精确。
2.例⼦
蒙特卡洛算法显然可⽤于近似计算圆周率:让计算机每次随机⽣成两个0到1之间的数,看这两个实数是否在单位圆内。⽣成⼀系列随机点,统计单位圆内的点数与圆外的点数,内接圆⾯积和正⽅形⾯积之⽐为PI:4,PI为圆周率。,当随机点取得越多时,其结果越接近于圆周率。
下⾯给出c++版本的实现:
#include
#include
#include
#include
using namespace std;
double in,out,ans;
double x,y,dis;
double getrand()
{
double ran=0;
int t=rand()%10000;
ran=(double)t/10000;
return ran;
}
int main()
{
int time=0;
scanf("%d",&time);
for(int i=1;i<=time;i++)
{
x=getrand()*2;y=getrand()*2;
dis=sqrt((1-x)*(1-x)+(1-y)*(1-y));
if(dis>1) out++;
else in++;
}
ans=4*in/(in+out);
printf("%lf",ans);
return 0;
蒙特卡罗算法举例
蒙特卡罗算法(Monte Carlo algorithm)是一种基于随机样本的计算方法,它通过模拟大量的随机数据来获得问题的概率性结果。这种算法可以用于估计数学问题、物理问题、金融问题以及其他实际应用中的复杂问题的解。下面将以几个实际例子来说明蒙特卡罗算法的应用。
例1:估计圆周率π的值
具体步骤:
1.在正方形内生成大量均匀分布的随机点。
2.统计落入圆形内的点的数量。
3.通过落入圆形的点的数量与总点数的比例来估计π的值。
例2:绘制希腊国旗
具体步骤:
1.建立一个正方形区域。
2.在正方形区域内随机生成大量的点。
3.统计每个小正方形内的点的数量。
4.将每个小正方形的点的数量转化为绘制像素点的比例。
例3:计算投资回报率的概率分布
具体步骤:
1.建立资产的收益率分布模型,可使用历史数据进行参数估计。 2.随机生成资产的未来收益率。
3.根据资产的权重计算投资组合的回报率。
4.迭代多次,统计投资组合回报率的概率分布。
例4:模拟森林火灾蔓延的概率
具体步骤:
1.建立一个森林地区的模型,包括地形、植被分布等信息。
2.随机生成火源的起始位置。
3.模拟火势的蔓延规律,考虑风向、植被密度等因素。
4.统计火灾烧毁的面积。
以上是几个蒙特卡罗算法的应用示例。蒙特卡罗算法的优点是可以解决复杂问题,并提供概率性结果。但需要注意的是,结果的准确性受到样本数量的影响,样本数量越大,结果越接近真值。此外,算法的运行效率也是一个需要考虑的因素。
Monte Carlo方法概述
一、Monte Carlo历史渊源
Monte Carlo方法的实质是通过大量随机试验,利用概率论解决问题的一种数值方法,基本思想是基于概率和体积间的相似性。它和Simulation有细微区别。单独的Simulation只是模拟一些随机的运动,其结果是不确定的;Monte Carlo在计算的中间过程中出现的数是随机的,但是它要解决的问题的结果却是确定的。
历史上有记载的Monte Carlo试验始于十八世纪末期(约1777年),当时布丰(Buffon)为了计算圆周率,设计了一个“投针试验”。(后文会给出一个更加简单的计算圆周率的例子)。虽然方法已经存在了200多年,此方法命名为Monte Carlo则是在二十世纪四十年,美国原子弹计划的一个子项目需要使用Monte Carlo方法模拟中子对某种特殊材料的穿透作用。出于保密缘故,每个项目都要一个代号,传闻命名代号时,项目负责人之一von Neumann灵犀一点选择摩洛哥著名赌城蒙特卡洛作为该项目名称,自此这种方法也就被命名为Monte
Carlo方法广为流传。
十一、Monte Carlo方法适用用途
(一)数值积分
计算一个定积分,如,如果我们能够得到f(x)的原函数F(x),那么直接由表达式: F(x1)-F(x0)可以得到该定积分的值。但是,很多情况下,由于f(x)太复杂,我们无法计算得到原函数F(x)的显示解,这时我们就只能用数值积分的办法。如下是一个简单的数值积分的例子。
数值积分简单示例
如图,数值积分的基本原理是在自变量x的区间上取多个离散的点,用单个点的值来代替该小段上函数f(x)值。
常规的数值积分方法是在分段之后,将所有的柱子(粉红色方块)的面积全部加起来,用这个面积来近似函数f(x)(蓝色曲线)与x轴围成的面积。这样做当然是不精确的,但是随着分段数量增加,误差将减小,近似面积将逐渐逼近真实的面积。