关于算法:R语言对布丰投针蒲丰投针实验进行模拟和动态可视化生成GIF动画

56次阅读

共计 1569 个字符,预计需要花费 4 分钟才能阅读完成。

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

介绍

布丰投针是几何概率畛域中最古老的问题之一。它最早是在 1777 年提出的。它将针头掷到有平行线的纸上,并确定针和其中一条平行线相交的可能性。令人诧异的后果是概率与 pi 的值间接相干。

R 程序将依据上段所述的状况估算 pi 的值并应用 gganimate 进行动静可视化。

第 1 局部

对于 A 局部,咱们创立一个数据帧,该数据帧将在 3 个不同的区间上生成随机值,这些区间将代表 x,y 的范畴以及每个落针点的角度。这是一个易于实现的随机数状况,须要应用 runif 函数。此性能要求输出数量,后跟一个距离。生成数字后,咱们会将值保留到数据框中。

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。

 plotneedle(values)

第 3 局部

在上面,将基于浏览布冯针和根本几何原理的常识,查看 pi 的估算值。

 buffon(values)

第 4 局部

运行代码后,咱们收到以下答案。

buffon(X)

[1] 3.846154

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

> buffon(X)
[1] 3.846154

第 5 局部

如前几节所述,当咱们投掷更多的针头时,咱们冀望以最小的不确定性取得更精确的答案。从 Approxpi 函数运行代码后,咱们收到了平均值 = 3.172314 和方差 0.04751391 的值。对于这样一个简略的试验,它对 pi 进行了很高的预计。

 Approxpi(500)
mean(Approxpi(500)) 
var(Approxpi(500))

> mean(Approxpi(500)) 
[1] 3.172314
> var(Approxpi(500)) 
[1] 0.04751391

接下来对模仿次数从 500\~600 的预测进行动静可视化, 红色示意针投放到了直线上:

参考资料

Schroeder,L.(1974 年)。布冯针问题:许多数学概念的激动人心的利用。

正文完
 0