用蒙特卡洛方法算pi-基於python和R語言
最近follow了MOOC上一門python課,開始學Python。同時,買來了概率論與數理統計,准備自學一下統計。(因為被鄙視過不是統計專業卻想搞數據分析)
有趣的是書里面有一塊講蒲豐投針計算Pi,這是一種隨機模擬法,也就是蒙特卡洛法。蒲豐投針之於我太難,暫時沒想到怎么用計算機模擬這一過程。
python課中,老師也提到用隨機模擬法,也就是蒙特卡洛法(MonteCarlo),用計算機模擬幾千次實驗,計算pi的近似值。好巧。
就拿python課中的方法,來近似計算pi,分別用python和R實現一下。
至於實驗是怎樣的,截圖老師的PPT。


我用的是python 3
python代碼:
from random import random
from math import sqrt
from time import clock
darts=2**22
hist=0
clock()
for i in range(1,darts):
x,y=random(),random()
dist=sqrt(x**2+y**2)
if dist<=1.0:
hist=hist+1
pi=4*(hist/darts)
print('pi is %s'%pi)
print('elaspe is %ss'%clock())
python運行結果:
pi is 3.143444061279297 elaspe is 85.991785
R 代碼:
#蒙特卡洛方法求pi
hist <- 0
darts <- 2^22
start <-proc.time()
for (i in 1:darts){
x <- runif(1);y <- runif(1)
if(sqrt(x^2+y^2)>1) next
hist=hist+1
}
pi <- 4*hist/darts
proc.time()-start
print(paste0('pi is ',pi))
R運行結果:
> proc.time()-start
用戶 系統 流逝
31.537 2.477 34.153
> print(paste0('pi is ',pi))
[1] "pi is 3.14076137542725"
總結:R和python都挺好用的,下一步准備試着用python寫點小爬蟲程序。
