概率算法 蒙特卡羅算法

/***Date:2014.12.11***/
//概率算法思想:統計學思路。
//基本過程:1)將問題轉化爲應的容易計算面積的幾何圖形S,問題結果對應幾何圖形中的某一部分S1;
////////////2)向幾何圖形中隨機撒點;
////////////3)統計幾何圖形S、S1中的點數,根據二者面積關係以及二者中的點數來計算得到結果;
////////////4)判斷結果是否達到需要精度結果,若符合則輸出,否則繼續(2)步驟。
//蒙特卡羅(Monte Carlo)算法
//均勻撒點:利用隨機函數實現,產生(0,1)之間隨機座標值[x,y];
//區域判斷:通過計算 x^2 + y^2 <=1 實現。

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

double MontePI(int n)
{
double PI,x,y;
int i,sum;
sum = 0;
srand((unsigned)time(NULL));//64位要強轉一下,要不然雖可執行,但不安全,PS,我電腦VS都64位
for (i = 1;i < n;i ++)
{
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 n;
double PI;

printf("蒙特卡羅概率算法計算 π:\n");
printf("輸入點的數量(數量越多,結果越接近真實值):");
scanf_s("%d",&n);
PI = MontePI(n);
printf("π =  %f\n",PI);

system("pause");
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章