本文主要是介绍蒙特卡罗算法:PI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原理: 如果均匀向正方形内撒点,那么落入阴影部分的点数与全部的点数之比是S阴影/S正 = pi / 4 只要撒入的点越多,值越相近
算法实现:
1、均匀撒点,使用随机函数来实现,产生【0,1】之间的随机数的坐标值【x,y】
2、区域判断:图中阴影部分特点是坐标原点的离坐标原点小于等于1 x *x + y * y <= 1
// MouteCalr.cpp : Defines the entry point for the console application.
//#include "stdafx.h"#include <IOSTREAM>
#include <STDIO.H>
#include <STDLIB.H>
#include <CTIME>using namespace std;double MotenPi(int n)
{int i, sum;double pi;double x, y;sum = 0;srand(time(NULL));// 均匀撒点for (i=1; i < n; i++){// 【0,1】区域撒点x = (double) rand() / RAND_MAX;y = (double) rand() / RAND_MAX;// 判断区域if ((x *x + y * y) <= 1){sum++;}}pi = 4.0 *sum / n;return pi;
}int main(int argc, char* argv[])
{int n;double pi;cout<<"输入撒点的个数: "<<endl;cin>>n;pi = MotenPi(n);std::cout<<"pi = "<<pi<<endl;return 0;
}/*输入撒点的个数:131312312pi = 3.14148Press any key to continue*/
这篇关于蒙特卡罗算法:PI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!