题目:

蒙塔卡罗(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;

	return 0;
}