程序实现蒙特卡洛算法计算PI值

蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数或伪随机数来解决很多计算问题的方法。与它对应的是确定性算法, 蒙特卡洛是摩纳哥的一座城市,注意是摩纳哥不是有卡萨布兰卡的摩洛哥,蒙特卡洛以赌博闻名,这大概也是其名称被用来作为一种概率统计算法的名称的缘由把,毕竟都与概率现象有关。

由于很多情况下计算实际值会消耗大量时间,因此蒙特卡洛方法的思想是通过随即采样来对实际值进行估算,并且可以得到良好的估算结果。它的一个简单示例是用蒙特卡洛方法估算PI值,如下图:

下图中,是一个内切于正方形的单位圆,如果按照概率计算,随机生成的坐标点落在圆形的概率与落在整个正房形区域内的面积比为:

Prob=\frac{\pi r^2}{(2r)^2}=\frac{\pi}{4} \Rightarrow \pi= 4\cdot Prob

我们编程实现:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int tries = 0;
    int success = 0;

    for(tries = 0; tries < 80000000; tries ++)	
    {
        float x=rand()/(RAND_MAX+1.0);
        float y=rand()/(RAND_MAX+1.0);
        
        if((x*x + y*y) <= 1)
        {
            success ++;
        }
    }

    double pi = 4 * (double)success / (double)tries;
    printf("pi = %f\n", pi);

    return 0;
}

总结:

蒙特卡洛方法是通过随机才阳来将一个复杂问题化简,这里用蒙特卡洛方法估算PI值,画了一个正方形和它的内切圆,然后在正方形中随机撒下了一些点,看在圆内的点有多少,在正方形内的点又有多少,由二者的比值即可求得PI的估计值。


结束

猜你喜欢

转载自blog.csdn.net/tugouxp/article/details/122277327