布丰投针是几何几率领域中最古老的问题之一。它最先是在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年)。布冯针问题:许多数学概念的激动人心的应用。