当前位置:文档之家› 蒙特卡罗算法的简单应用

蒙特卡罗算法的简单应用

一、蒙特卡洛算法
1、含义的理解
以概率和统计理论方法为基础的一种计算方法。

也称统计模拟方法,是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,它是将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。

2、算法实例
在数值积分法中,利用求单位圆的1/4的面积来求得Pi/4从而得到Pi 。

单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分。

只要能求出扇形面积S1在正方形面积S 中占的比例K=S1/S 就立即能得到S1,从而得到Pi 的值。

怎样求出扇形面积在正方形面积中占的比例K 呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。

将落在扇形内的点数m 与所投点的总数n 的比m/n 作为k 的近似值。

P 落在扇形内的充要条件是 221x y +≤ 。

已知:K=
1s s ,K ≈m n ,s=1,s1=4P i ,求Pi 。

由1
s m
s n ≈,知s1≈*m s n =m n , 而s1=4P i
,则Pi=*4m n
程序:
/* 利用蒙特卡洛算法近似求圆周率Pi*/
/*程序使用:VC++6.0 */
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#define COUNT 800 /*循环取样次数,每次取样范围依次变大*/
void main()
{
double x,y;
int num=0;
int i;
for(i=0;i<COUNT;i++)
{
x=rand()*1.0/RAND_MAX;/*RAND_MAX=32767,包含在<stdio.h>中*/ y=rand()*1.0/RAND_MAX;
i f((x*x+y*y)<=1)
num++; /*统计落在四分之一圆之内的点数*/
}
printf("Pi值等于:%f\n",num*4.0/COUNT);
printf("RAND_MAX=%d\n",RAND_MAX);
3、应用的范围
蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运
计算、量子热力学计算、空气动力学计算)等领域应用广泛。

4、参考书籍
[1]蒙特卡罗方法及其在粒子输运问题中的应用[2]蒙特卡罗方法引论。

相关主题