R语言对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画
时间:2022-07-22
本文章向大家介绍R语言对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原文链接: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) #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 angle1 4.45796267 0.312440618 1.37184652 3.43869230 0.462824677 2.97383673 2.55561523 0.596722445 -2.96382854 3.68098572 0.670877506 -0.68605025 0.03690118 0.202724803 -0.33151416 4.64979938 0.180091416 -0.32930937 4.92459238 0.172328845 -0.52211338 3.50660347 0.752147374 2.91002219 2.03787919 0.167897415 -0.321383310 0.38647133 0.539615776 -0.118898211 3.28149935 0.102886770 -1.631825612 3.68811892 0.765077533 1.245903713 1.52004894 0.682455494 -0.421980214 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年)。布冯针问题:许多数学概念的激动人心的应用。
- 利用Theano理解深度学习——Multilayer Perceptron
- JavaWeb14-事务,连接池(Java正在的全栈开发)
- 利用Theano理解深度学习——Logistic Regression
- JavaWeb13-设计模式案例实现(Java真正的全栈开发)
- 运维平台的建设思考-元数据管理(三)(r8笔记第15天)
- JavaWeb12-JSP, EL表达式,JSTL标签
- JavaWeb11-jsp.cookie.session(1)
- 交互式使用 R题(shell)
- union(并),setdiff(差),intersect(交)R语言含义
- JavaWeb11-jsp.cookie.session(2)
- 一个慢查询报警的简单处理 (r8笔记第12天)
- 厚土Go学习笔记 | 38. goroutine轻量级线程
- 厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理
- Java开发Spring笔记第二天
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- YII框架行为behaviors用法示例
- 浅谈Python里面None True False之间的区别
- python如何导入依赖包
- 深入理解Python 多线程
- Yii2框架自定义验证规则操作示例
- 浅析PHP 中move_uploaded_file 上传中文文件名失败
- 结束运行python的方法
- 解析Tensorflow之MNIST的使用
- 面向新手解析python Beautiful Soup基本用法
- 基于keras中的回调函数用法说明
- PHP实现读取文件夹及批量重命名文件操作示例
- Python多线程threading创建及使用方法解析
- django rest framework 过滤时间操作
- 浅谈TensorFlow之稀疏张量表示
- 解决Keras 中加入lambda层无法正常载入模型问题