用隨機投擲飛鏢法計算Pi值(Randomness Throwing dart Pi Python)
阿新 • • 發佈:2017-11-20
targe .html def 技術分享 公開課 9.png pan turn div
畫一個邊長為r的正方形和半徑為r的四分之一的圓(如下圖所示),向上面隨機投擲飛鏢,通過計算落在星星區域和整體區域的飛鏢比例,即可求出π值。
公式推導如下:
假設正方形的邊長r為1,那麽飛鏢落在星星區域內的任意點(x, y),其坐標的平方相加值(x2+y2)必然小於1。
代碼如下:
import random def find_pi(num_of_times): #num_of_times為投擲飛鏢的次數 num1,num2=0,0 #num1為飛鏢投擲在星星區域內的次數,num2為飛鏢投擲在圓點區域內的次數 for i in range(num_of_times): #每次投擲飛鏢後,飛鏢落下的點坐標(x,y),都為0~1之間的浮點數 x=random.random() y=random.random() if (x**2+y**2)<1: num1+=1 #如果其點坐標平方相加的值小於1,那麽說明該飛鏢落在圓弧區域內,num1增加一次,反之,num2增加一次 else: num2+=1 pi=(4*(num1/(num1+num2))) return pi
投擲1000000次飛鏢試一下:
print(find_pi(1000000))
幾次運行結果都已經和實際π值相差不大:
3.14326
3.140684
3.141544
參考:麻省理工學院公開課:計算機科學及編程導論(第20課)
用隨機投擲飛鏢法計算Pi值(Randomness Throwing dart Pi Python)