NO IMAGE

From : http://blog.csdn.net/zzhflyqh/archive/2008/04/13/2288722.aspx

 

背景知識:

蒙特卡洛是摩納哥公國第一大城市,與澳門、美國拉斯維加斯並稱世界三大賭城。位於地中海沿岸,首都摩納哥之北,建於阿爾卑斯山脈突出地中海的懸崖之上。景色優美,是地中海地區旅遊勝地。市內建有豪華的旅館、俱樂部、歌劇院、商店、游泳池、溫泉浴室、運動場等娛樂設施

。城內開設有蒙特卡洛大賭場。賭場建於
1865

年,為雙層樓建築,上有鐘樓、塔廳和拱形亭閣,還飾以若干人物雕塑,庭前棕櫚樹成行,還辟有花園,旁邊有大酒店和酒吧間。整個城市在旺季時,約有賭場
70

多個,約有賭室
3500

間左右。蒙特卡羅賭場由國家經營。當地的其他活動,許多也帶有賭博色彩。遊客住的旅店房間,有抽獎的號碼,中獎的免付部分房費。早餐的牛奶麥片粥裡,如遇上金屬牌子

,亦可領獎。該城只有
1

萬人口,但每天報紙銷量可達
100

萬份

,因為報紙上都印有可能得獎的號碼。遊客最後離境,購買的車票上也印有彩票號碼,於離境前開彩。經營賭業是摩納哥的主要經濟來源,每年都從賭業中收取高額外匯利潤。

 

蒙特卡洛演算法簡單描述:


概率和統計理論方法為基礎的一種計算方法。將所求解的問題同一定的概率模型相聯絡,用計算機實現統計模擬或抽樣,以獲得問題的近似解。比如,給定
x=a

,和
x=b

,你要求某一曲線
f

和這兩豎線,及
x

軸圍成的面積,你可以起定
y

軸一橫線
y=c

其中
c>=f(a) and c>=f(b)

,很簡單的,你可以求出
y=c,x=a,x=b,


x

軸圍成的矩形面積,然後利用隨機參生生大量在這個矩形範圍之類的點,統計出現在曲線上部點數和出現在曲線下部點的數目,記為:
doteUpCount,nodeDownCount,

然後所要求的面積可以近似為
doteDownCounts

所佔比例
*

矩形面積。

 

問題描述:

在數值積分法中,利用求單位圓的
1/4

的面積來求得
Pi/4

從而得到
Pi

。單位圓的
1/4

面積是一個扇形,它是邊長為
1

單位正方形的一部分。只要能求出扇形面積
S1

在正方形面積
S

中佔的比例
K=S1/S

就立即能得到
S1

,從而得到
Pi

的值。怎樣求出扇形面積在正方形面積中佔的比例
K

呢?一個辦法是在正方形中隨機投入很多點,使所投的點落在正方形中每一個位置的機會相等看其中有多少個點落在扇形內。將落在扇形內的點數
m

與所投點的總數
n

的比
m/n

作為
k

的近似值。
P

落在扇形內的充要條件是
x^2 y^2<=1

 

程式描述:

 

/**/
/*


 利用蒙特卡洛演算法近似求圓周率PI

 VC 6.0

 ZZH

*/


#include
<
iostream
>


#include
<
cmath
>


#include
<
ctime
>


#define
 COUNT 500000 
//
迴圈取樣次數



using
 
namespace
 std;


bool
 InCircle(
double
 x,
double
 y)
//
是否在1/4圓範圍之內



{

    
if
((x
*
x

y
*
y)
<=
1
)
return
 
true
;

    
return
 
false
;

}


void
 main()


{

    
double
 x,y;

    
int
 num
=
0
;

    
int
 i;


    srand((unsigned)time(NULL));

    
for
(i
=
0
;i
<
COUNT;i

)

    

{

        x
=
rand()
*
1.0
/
RAND_MAX;

        y
=
rand()
*
1.0
/
RAND_MAX;

        
if
(InCircle(x,y)) num

;

    }


    cout
<<

PI:

<<
(num
*
4.0
)
/
COUNT
<<
endl;

}

結果:測試
5

次的結果顯示:
3.13958


3.14041


3.13729


3.13859


3.14186