1. 程式人生 > >用隨機投擲飛鏢法計算Pi值(Randomness Throwing dart Pi Python)

用隨機投擲飛鏢法計算Pi值(Randomness Throwing dart Pi Python)

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)