蒙特卡洛之布豐投針(python實現)

Buffon實驗介紹

法國數學家Buffon提出一個問題:設咱們有一個以平行且等距木紋鋪成的地板(如圖),隨意拋一支長度比木紋之間距離小的針,求針和其中一條木紋相交的機率。
經Buffon證實此機率與圓周率pi相關,所以Buffon提出的一種計算圓周率的方法——隨機投針法。這就是蒲豐投針問題(又譯「布豐投針問題」)。
圖片來源於百度百科在這裏插入圖片描述

javascript

實驗步驟

  1. 取一張白紙,在上面畫上許多條間距爲a的平行線。
  2. 取一根長度爲l(l≤a) 的針,隨機地向畫有平行直線的紙上擲n 次,觀察針與直線相交的次數,記爲m。
  3. 計算針與直線相交的機率。

實驗結果

法國數學家布豐提出的「投針問題」,記載於布豐1777年出版的著做中:「在平面上畫有一組間距爲a的平行線,將一根長度爲l(l≤a)的針任意擲在這個平面上,求此針與平行線中任一條相交的機率。」
布豐本人證實了,這個機率是:
P = 2 L π a P = \frac { 2 L } { \pi a } P=πa2L
(其中π爲圓周率)
因爲它與π有關,因而人們想到利用投針試驗來估計圓周率的值。



java

證實過程

圖片來源於知乎

當Buffon趕上python神器

知道能夠經過實驗來求出pi,咱們就能夠用計算機來代替人工手拋啦!
有了numpy生成隨機數字,咱們就能夠解放雙手,輕鬆模擬出上萬次實驗哇卡卡卡卡卡( ̄▽ ̄)
python

代碼

因爲是小白,因此還沒習慣寫註釋,因此可讀性有點差,但願各位看官見諒(。ì _ í。)dom

// # Created with Python AI
import numpy as np

def buffon(a,l,n):
  xl = np.pi*np.random.random(n)
  yl = 0.5*a*np.random.random(n)
  m = 0
  for x,y in zip(xl,yl):
    if y < 0.5*l*np.sin(x):
      m+=1
  result = 2*l/a*n/m
  print(f'pi的估計值是{result}')
  
buffon(2,1,100000)

感謝風哥的數模教學視頻,真正的學以至用~彎腰致敬⁄(⁄ ⁄ ⁄ω⁄ ⁄ ⁄)⁄

ps 第一篇博客,但願你們指正~spa

相關文章
相關標籤/搜索