布豐投針是幾何機率領域中最古老的問題之一。它最先是在1777年提出的。它將針頭擲到有平行線的紙上,並肯定針和其中一條平行線相交的可能性。使人驚訝的結果是機率與pi的值直接相關。函數
R程序將根據上段所述的狀況估算pi的值並使用gganimate進行動態可視化。spa
對於A部分,咱們建立一個數據幀,該數據幀將在3個不一樣的區間上生成隨機值,這些區間將表明x,y的範圍以及每一個落針點的角度。這是一個易於實現的隨機數狀況,須要使用runif函數。此功能要求輸入數量,後跟一個間隔。生成數字後,咱們會將值保存到數據框中。code
rneedle <- function(n) { x = runif(n, 0, 5) y = runif(n,0, 1) angle = runif(n,-pi, pi) #從-180到180的角度 values<-data.frame(cbind(x, y, angle)) return(values) } values<-rneedle(50) #檢查是否生成50×3矩陣 values #咱們的數據幀已經成功生成。
x y angle 1 4.45796267 0.312440618 1.3718465 2 3.43869230 0.462824677 2.9738367 3 2.55561523 0.596722445 -2.9638285 4 3.68098572 0.670877506 -0.6860502 5 0.03690118 0.202724803 -0.3315141 6 4.64979938 0.180091416 -0.3293093 7 4.92459238 0.172328845 -0.5221133 8 3.50660347 0.752147374 2.9100221 9 2.03787919 0.167897415 -0.3213833 10 0.38647133 0.539615776 -0.1188982 11 3.28149935 0.102886770 -1.6318256 12 3.68811892 0.765077533 1.2459037 13 1.52004894 0.682455494 -0.4219802 14 3.76151379 0.508555610 0.1082087 ...
咱們繪製第一部分中的針。重要的是不要在這個問題上出現超過2條水平線。它使咱們能夠進行檢查以瞭解此處描繪的幾何特性的通常概念。話雖如此,讓咱們注意咱們決定在每一個方向上將圖形擴展1個單位。緣由是想象一個針尾從y = 1開始,其角度爲pi / 2。咱們須要假設該方向的範圍最大爲2。rem
plotneedle(values)
在下面,將基於閱讀布馮針和基本幾何原理的知識,查看pi的估算值。get
buffon(values)
運行代碼後,咱們收到如下答案。數學
buffon(X)
[1] 3.846154it
set.seed(10312013) X <- rneedle(50) plotneedle(X) buffon(X)
> buffon(X) [1] 3.846154
如前幾節所述,當咱們投擲更多的針頭時,咱們指望以最小的不肯定性得到更準確的答案。從Approxpi函數運行代碼後,咱們收到了平均值= 3.172314和方差0.04751391的值。對於這樣一個簡單的實驗,它對pi進行了很高的估計。io
Approxpi(500) mean(Approxpi(500)) var(Approxpi(500))
> mean(Approxpi(500)) [1] 3.172314 > var(Approxpi(500)) [1] 0.04751391
接下來對模擬次數從500\~600的預測進行動態可視化,紅色表示針投放到了直線上:function
參考資料class
Schroeder,L.(1974年)。布馮針問題:許多數學概念的激動人心的應用。