5.23打卡

发布时间 2023-05-23 22:48:27作者: 恋恋恋白

一、问题描述:

使用蒙特卡罗法求元的近似值。
蒙特卡罗方法,或称计算机模拟方法,是一种基于“随机数”的计算方法。这种方法源于美国在第二次世界大战时研制原子弹的“曼哈顿计划”。该计划的主持人之一数学家冯·诺依曼用驰名世界的赌城——摩纳哥的蒙特卡罗来命名这种方法,为它蒙上了一层神秘的色彩。
蒙特卡罗方法的思路是:在一个单位边长的正方形中,以边长为半径,以一个顶点为圆心,在这个正方形上做四分之一圆。在正方形中随机地投入很多点,使所投入的点落在正方形中每一个位置的机会相等。若点落入四分之一圆内则计数。重复地向正方形中投入足够多的点,用落入四分之一圆内的点数除以总的点数,得到的就是Π的四分之一的近似值。

二、设计思路:


使用随机函数rand)随机产生两个小数x、y可以构成一个坐标点(x,y),假设正方形的边长为100,则判断坐标点是否落在四分之一圆内的条件是x2+y2<10000,其中0<x<100,0<y<100。若总共向正方形中投放了N个点,而落在四分之一圆内部的点为d个,则元=4*d/N。
需要注意的是,蒙特卡罗法是使用随机模拟实验结果进行统计来求得x的近似值的方法。因此使用该方法所求出的元值只有当统计次数足够多时才会准确,在统计次数较少时会存在一定的误差。
三、程序流程图

 

 

四、代码实现

#include<time.h>

#include<stdlib.h>

#include<stdio.h>

#define N  30000

int main()

{

    float x,y;

    int c=0,d=0;

    srand((unsigned)time(NULL));

    while(c++<=N)

    {

        x=rand()%100;

        y=rand()%100;

        if(x*x+y*y<=10000)

            d++;

    }

    printf("pi=%f\n",4.0*d/N);

}