美文网首页π
蒙塔卡罗法计算π

蒙塔卡罗法计算π

作者: 比轩 | 来源:发表于2015-11-03 22:50 被阅读393次
    题目:

    蒙塔卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法。当所要求解的问题是某种事件出现的概率,或某随机变量的期望值时,可以通过某种“试验”的方法求解。

    蒙塔卡罗法.jpg

    应用蒙瑞特卡罗方法求解π的步骤:随即向单位正方形和圆结构抛洒大量点,判断每个点在圆内或者圆外,圆内点数除以圆外点数就是π值。随机点数量越大,得到的π值越精确。

    实际问题:

    对于随机数的处理要小心再小心,稍有不小心就会改变数字的频率,导致最终结果误差太大。
    刚开始使用模10乘0.1的方法:
    class="brush:cpp;toolbar:false">x/y=rand()%10*0.1;
    修正过的语句,比之前的算出的pi精确了不少
    x/y=rand()*1.0/RAND_MAX;

    源码:

    //PI计算
    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    #include <ctime>
    using namespace std;
    int main()
    {
    cout<<"***COUNT PI***\n Try 100,000,000 times\n"<<endl;
    cout<<"counting....."<<endl;
    doublex,y,z,num=0,a=1;//定义坐标参数
    const int max_num=100000000;//尝试次数
    srand(unsigned(time(0)));//用时间做随机数的种子
    for (int i = 0; i<max_num; i++)//生成随机数
    {
        x=rand()*1.0/RAND_MAX;
        y=rand()*1.0/RAND_MAX;
        z=x*x+y*y;
        //cout<<z<<"\t";
        if(z<=a)//判断是否落在圆内
            num++;
    }
    cout<<"PI="<<(num/max_num)*4<<endl;
    return0;
    }

    相关文章

      网友评论

        本文标题:蒙塔卡罗法计算π

        本文链接:https://www.haomeiwen.com/subject/fziqhttx.html