R語言對布豐投針(蒲豐投針)實驗進行模擬和動態可視化生成GIF動畫

原文連接:http://tecdat.cn/?p=13033

    • -

介紹

布豐投針是幾何機率領域中最古老的問題之一。它最先是在1777年提出的。它將針頭擲到有平行線的紙上,並肯定針和其中一條平行線相交的可能性。使人驚訝的結果是機率與pi的值直接相關。函數

R程序將根據上段所述的狀況估算pi的值並使用gganimate進行動態可視化。spa

第1部分

對於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部分

咱們繪製第一部分中的針。重要的是不要在這個問題上出現超過2條水平線。它使咱們能夠進行檢查以瞭解此處描繪的幾何特性的通常概念。話雖如此,讓咱們注意咱們決定在每一個方向上將圖形擴展1個單位。緣由是想象一個針尾從y = 1開始,其角度爲pi / 2。咱們須要假設該方向的範圍最大爲2。rem

plotneedle(values)

第3部分

在下面,將基於閱讀布馮針和基本幾何原理的知識,查看pi的估算值。get

buffon(values)

第4部分

運行代碼後,咱們收到如下答案。數學

buffon(X)

[1] 3.846154it

set.seed(10312013)
X <- rneedle(50)
plotneedle(X)
buffon(X)

> buffon(X)
[1] 3.846154

第5部分

如前幾節所述,當咱們投擲更多的針頭時,咱們指望以最小的不肯定性得到更準確的答案。從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年)。布馮針問題:許多數學概念的激動人心的應用。

相關文章
相關標籤/搜索