概率論計算圓周率( )

2021-08-26 12:27:27 字數 2542 閱讀 5032

最近找工作看了許多面經,其中看到了重複出現多次的問題:

使用概率論計算π

因此,查詢並推導了如下可兩種方法,具體如下:

目錄

1.投針法:

1.1實驗資料

1.2python模擬程式

2.圓周法

2.1python模擬程式

18世紀,布豐提出以下問題:設我們有乙個以平行且等距木紋鋪成的地板(如圖),現在隨意拋一支長度比木紋之間距離小的針,求針和其中一條木紋相交的概率。並以此概率,布豐提出的一種計算圓周率的方法——隨機投針法。這就是蒲豐投針問題(又譯「布豐投針問題」)。

這一方法的步驟是:l

1) 取一張白紙,在上面畫上許多條間距為a的平行線。

2) 取一根長度為l(l≤a) 的針,隨機地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數,記為m。

3)計算針與直線相交的概率

令事件a=『針與某條平行線相交』,那麼針與平行線相交的情況也就上圖的幾種形式,設h為針重點到最近的一條平行線的距離,且線相交的角度為a,針與平行線的交點到中點的距離為k,那麼明顯的有:

試驗者時間

投擲次數

相交次數

圓周率估計值

wolf

2023年

3.1596

smith

2023年

1218.5

3.1554

c.de morgan

2023年

382.5

3.137

fox

2023年

3.1595

lazzerini

2023年

3.1415929

reina

2023年

3.1795

'''

****************************************===

@author: renjiaxin

@time: 2018/8/30 0030 16:33

****************************************===

'''import random

import math

def puf(n, l=0.6, a=1):

''':param l: 針的長度

:param a: 橫線之間的間距

:param n: 實驗的次數

:return: 圓周率π

'''# 相交次數

m = 0

for i in range(n):

# 針的中點與最近的線的距離

dis = random.uniform(0, a / 2)

# 針與線相交的度數

deg = random.uniform(0, math.pi)

if dis <= (l / 2) * math.sin(deg):

m += 1

return (2 * l * n) / (a * m)

pi = puf(1000000)

可以看到程式求得π=3.1413088739855306,利用更大的實驗次數可以得到更加精確的π值

該方法利用乙個正方形的內切圓,用隨機數生成隨機點,落在圓內的概率是圓面積與正方形面積的比。具體如下:

設圓的半徑為r,面積為s0;則正方形邊長d=2r,面積為s1;那麼事件a=『隨機點落在圓內』的概率p(a)=s0/s1,則有:

'''

****************************************===

@author: renjiaxin

@time: 2018/8/30 0030 14:16

****************************************===

'''import random

def pai(x):

''':param x: 實驗次數

:return: 圓周率π

'''cir = 0

for i in range(x):

a = random.uniform(0, 1)

b = random.uniform(0, 1)

if a**2 + b**2 <= 1:

cir += 1

return 4 * cir / x

pi = pai(1000000)

可以看到程式求得π=3.14187976,利用更大的實驗次數可以得到更加精確的π值

7 15 計算圓周率

7 15 計算圓周率 15 分 根據下面關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 1 3 2 3 5 3 3 5 7 n 3 5 7 2 n 1 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數點後6位。輸入樣例 0.01 輸出樣例...

7 15 計算圓周率

學到翁愷老師 c語言程式設計 第八周了,來pta做點習題練習 題目是 用圓周率的關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 3 1 3 5 2 3 5 7 3 3 5 7 2n 1 n 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數...

《計算圓周率》python

題目 歷史上有許多計算圓周率pai的公式,其中,格雷戈里和萊布尼茨發現了下面的公式 pai 4 1 1 3 1 5 1 7 這個公式簡單而優美,但美中不足,它收斂的太慢了。如果我們四捨五入保留它的兩位小數,那麼 累積1項是 4.00 累積2項是 2.67 累積3項是 3.47 請你寫出它累積100項...