首页 > 编程语言 >拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画

时间:2022-11-27 21:06:06浏览次数:53  
标签:蒲丰 tecdat values 投针 runif pi 500 Approxpi

R语言对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画


介绍

布丰投针是几何概率领域中最古老的问题之一。它最早是在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) #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.

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_动态可视化

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
...

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_数据_02

 

第2部分

我们绘制第一部分中的针。重要的是不要在这个问题上出现超过2条水平线。它使我们可以进行较小的检查以了解此处描绘的几何特性的一般概念。话虽如此,让我们注意我们决定在每个方向上将图形扩展1个单位。原因是想象一个针的尾巴从y = 1开始,其角度为pi / 2。我们需要假设该方向的范围最大为2。

plotneedle(values)

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_动态可视化_03

第3部分

在下面,将基于阅读布冯针和基本几何原理的知识,查看pi的估算值。

buffon(values)

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_数据_04

 

第4部分

运行代码后,我们收到以下答案。> buffon(X)[1] 3.846154

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

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_布丰投针_05

> buffon(X)
[1] 3.846154

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_数据_06

 

第5部分

如前几节所述,当我们放下更多的针头时,我们期望以最小的可变性获得更准确的答案。从Approxpi函数运行代码后,我们收到了平均值= 3.172314和方差0.04751391的值。对于这样一个简单的实验,它对pi进行了很高的估计。

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

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_模拟_07

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

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_布丰投针_08

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

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_布丰投针_09

拓端tecdat|R语言编程指导对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画_R语言_10

 

参考资料

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

▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。


标签:蒲丰,tecdat,values,投针,runif,pi,500,Approxpi
From: https://blog.51cto.com/u_14293657/5890319

相关文章