蒙特卡洛法求圓周率

2021-06-01 21:05:32 字數 1122 閱讀 4642

利用蒙特卡洛演算法求圓周率是乙個概率的方法,關於這方面的內容很多,而且也很容易理解,更多具體分析過程可以參考如下文章:

下面是我的理解和**:

蒙特卡洛演算法是通過概率來計算pi的值的。對於乙個單位為1的正方形,以其某乙個頂點為圓心,邊為半徑在正方形內畫扇形(乙個1/4的圓形的扇形),那麼扇形的面積就是pi/4。這樣,利用概率的方式,「隨機」往正方形裡面放入一些「點」,根據這些點在扇形內的概率(在扇形內的點數/投的總點數),就可以得到扇形的面積。

簡單理解,由於正方形為單位1的邊長,所以正方形面積s1=1. 假設隨機投如n個點,其中m個落入扇形內,那麼可以認為扇形的面積為m/n*1。當然,本身,這就是乙個概率的過程,不是精確的。當n足夠大的時候,得到的面積更精確。由於已經扇形的面積為pi/4,所以根據m/n*1=pi/4就可以計算出pi的值。

這裡的關鍵問題是:(1)如何隨機投入點?由於c語言提供了隨機函式,所以利用隨機函式就可以模擬隨機投點的過程。(2)如何判斷點在扇形內?這時候,我們先考慮建立的座標系,假設單位正方形的頂點在原點,正方形在第一象限,即正方形範圍為(0,0)到(1,1)的座標內,並且假設我們扇形的圓心也為原點,那麼根據圓的方程,假設投的點座標為(x,y),如果x*x+y*y<1,則點(x,y)在扇形內。

pi = 4*m/n

下面是具體的程式:

#include #include #include #include #define n       10000000000  

#define int_t __int64 // the type of n and m

// rand from 0.0 to 1.0

inline double rand01()

int main()

double pi = (double)4*m/n;

printf("%lf\n", pi);

}

寫這個例子的目的是這是乙個適合用多執行緒處理的很好的例子,在進行其它的多執行緒實現的時候,將不再分析這個過程。

說明:這種方法求pi的值,精度並不高,n必須很大很大才能有一定的精度,當n很大的時候,速度很慢,當n=10000000的時候,才能勉強得到3.14的精度,其耗時已經需要秒以上。所以,這是乙個很適合用於測試多執行緒效能的例子。

Day9 蒙特卡洛法(求圓周率)

在只有乙個隨機數生成器的情況下如何估計 的大小?蒙特卡洛法 蒙特卡洛方法又稱統計模擬法,隨機抽樣技術,是一種隨機模擬方法,以概率和統計理論方法為基礎的一種計算方法。是使用隨機數 或更常見的偽隨機數 來解決很多計算問題的方法。將所求解的問題同一定的概率模型相聯絡,用電子計算機實現統計模擬或抽樣,以獲得...

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

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

圓周率 的值 用蒙特卡洛法求 近似值

2 2 3 2 3 2 5 2 3 2 5 3 7 圓周率的值 3.14159 26535 89793 23846 26433 83279 50288 41971 69399 37510 58209 74944 59230 78164 06286 20899 86280 34825 34211 70...