蒙特卡罗方法

蒙特卡罗方法:
解决实际问题时会使很多复杂的模型转化为简单易了的运算,很快的得出结果,
m/n=某区域面积/矩形面积

具体要求:
利用大量随机数群进行模拟;



如利用蒙特卡罗方法求pi的值:此处利用的是四分之一单位圆
#include<iostream>
#include<time.h>
#include<stdlib.h>
#include <math.h>
using namespace std;
float shape(float x)
{
return (sqrt(1-x*x));
}
int main()
{
const long max_count = 100000 ;
long undercount = 0;
long totalcount = 0 ;
float rnumx ,rnumy;
float x,val,xrnd,yrnd ,area,boxarea,ymax;
srand(time(NULL));
double pi;

ymax=shape(0);

boxarea=ymax;//矩形面积
while(totalcount<max_count)
{
rnumx=rand();
val = rnumx / RAND_MAX;//产生0-1随机数
xrnd=val;
rnumy=rand();
val=rnumy /RAND_MAX;
yrnd=val*ymax;
if(yrnd<=shape(xrnd))
undercount++;
totalcount++;
}
area= boxarea*(float)undercount/(float)totalcount;//四分之一圆面积
pi=(double)(4*area);
cout<<"pi is :"<<pi<<endl;
return 0;
}


我们直接求pi的值并不是很好求,可能有些常见敞常量的换算可以得到pi,但如果我们不知道那些关系就不是那么好求了,利用蒙特卡罗方法常常可以解决一些统计学问题,如人口,想象到这里可能会让你走上一条想不到的捷径。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值