注册 登录
编程论坛 VC++/MFC

monte carlo方法求面积的算法

jinh 发布于 2011-11-26 10:06, 923 次点击
只有本站会员才能查看附件,请 登录
程序代码:
#include<iostream>
#include<ctime>
#include<stdlib.h>
#define RAND_MAX 0x7FFF
using namespace std;

void main()
{
    double a,b;
    double x,y,area;//用于构造y与x的函数y=8x-x*x+7
    double count=0.0;//计数
    a=7.0;//x轴上
    b=9.0;//y轴上
    area=a*b;
    srand((unsigned)time(0));
    for(int i=0;i<10000;i++)
    {   
        //srand((unsigned)time(0));
        x=rand()/(double)(RAND_MAX/a);//函数用于返回一个在0~a的随机值
        y=rand()/(double)(RAND_MAX/b);//函数用于返回一个在0~b的随机值
        if(x>1&&x<a)
            if(y>0&&y<(8*x-x*x+7))
                count++;
   
    }
    cout<<count<<endl;
    area=area*count/10000;
    cout<<area<<endl;

}
1 回复
#2
jinh2011-11-27 00:18
Monte Carlo(蒙特卡洛)一个城市(赌城)的名字.该算法就是运用赌博的原理,随机扔东西,扔进该区域就记上一次,不在该区域就不计,但没次就能能进一个矩形或长方形区域里,该区域的面积很容易算出,但曲线,不规则的图型就不一定了,用积分是可以解决,但在<<随机过程>>本书中提到Monte Carlo方法,于是我就用老师的方法去弄了下,误差不是很大,毕竟扔了10000次!计算机多快啊,几秒钟就可以扔完了!
1