R語(yǔ)言對(duì)布豐投針(蒲豐投針)實(shí)驗(yàn)進(jìn)行模擬和動(dòng)態(tài)可視化生成GIF動(dòng)畫(huà)
原文鏈接:http://tecdat.cn/?p=13033
介紹
布豐投針是幾何概率領(lǐng)域中最古老的問(wèn)題之一。它最早是在1777年提出的。它涉及將針頭放到襯有襯紙的紙上,并確定針頭越過(guò)頁(yè)面上一行的可能性。引人注目的結(jié)果是概率與pi的值直接相關(guān)。R程序?qū)⒏鶕?jù)上段所述的情況估算pi的值并使用gganimate進(jìn)行動(dòng)態(tài)可視化。
第1部分
對(duì)于A部分,我們創(chuàng)建一個(gè)數(shù)據(jù)幀,該數(shù)據(jù)幀將在3個(gè)不同的間隔上生成隨機(jī)值,這些間隔將代表x,y的范圍以及每個(gè)落針點(diǎn)的角度。這是一個(gè)易于實(shí)現(xiàn)的隨機(jī)數(shù)情況,需要使用runif函數(shù)。此功能要求輸入數(shù)量,后跟一個(gè)間隔。生成數(shù)字后,我們會(huì)將值保存到數(shù)據(jù)框中。
rneedle <- function(n) {
x = runif(n, 0, 5)
y = runif(n,0, 1)
angle = runif(n,-pi, pi) #angle from -180 to 180
values<-data.frame(cbind(x, y, angle))
return(values)
}
values<-rneedle(50)
#check that a 50 by 3 matrix is generated
values
#Our dataframe has been successfully produced.
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部分
我們繪制第一部分中的針。重要的是不要在這個(gè)問(wèn)題上出現(xiàn)超過(guò)2條水平線。它使我們可以進(jìn)行較小的檢查以了解此處描繪的幾何特性的一般概念。話雖如此,讓我們注意我們決定在每個(gè)方向上將圖形擴(kuò)展1個(gè)單位。原因是想象一個(gè)針的尾巴從y = 1開(kāi)始,其角度為pi / 2。我們需要假設(shè)該方向的范圍最大為2。
plotneedle(values)

第3部分
在下面,將基于閱讀布馮針和基本幾何原理的知識(shí),查看pi的估算值。
buffon(values)
?
第4部分
運(yùn)行代碼后,我們收到以下答案。> buffon(X)[1] 3.846154
set.seed(10312013)
X <- rneedle(50)
plotneedle(X)
buffon(X)
> buffon(X)
[1] 3.846154
?
第5部分
如前幾節(jié)所述,當(dāng)我們放下更多的針頭時(shí),我們期望以最小的可變性獲得更準(zhǔn)確的答案。從Approxpi函數(shù)運(yùn)行代碼后,我們收到了平均值= 3.172314和方差0.04751391的值。對(duì)于這樣一個(gè)簡(jiǎn)單的實(shí)驗(yàn),它對(duì)pi進(jìn)行了很高的估計(jì)。
Approxpi(500)
mean(Approxpi(500))
var(Approxpi(500))
> mean(Approxpi(500))
[1] 3.172314
> var(Approxpi(500))
[1] 0.04751391
接下來(lái)對(duì)模擬次數(shù)從500~600的預(yù)測(cè)進(jìn)行動(dòng)態(tài)可視化,紅色表示針投放到了直線上:

?
參考資料
Schroeder,L.(1974年)。布馮針問(wèn)題:許多數(shù)學(xué)概念的激動(dòng)人心的應(yīng)用。