蒙特卡洛模型之神奇的布丰投针实验
【问题的提出】
18世纪,法国数学家布丰(1707-1788)提出提出了一种计算圆周率的方法——随机投针法,即蒲丰投针问题(又译“布丰投针问题”)
(如图)
【实验步骤】
布丰的实验步骤如下:
1) 取一张白纸,在上面画上许多条间距为a的平行线。
2) 取一根长度为l(l≤a) 的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m。
3)计算针与直线相交的概率.
18世纪,法国数学家布丰提出的“投针问题”,记载于布丰1777年出版的著作中:“在平面上画有一组间距为a的平行线,将一根长度为l(l≤a)的针任意掷在这个平面上,求此针与平行线中任一条相交的概率。”
布丰本人证明了,这个概率是:
(其中π为圆周率)
由于它与π有关,于是人们想到利用投针试验来估计圆周率的值。
布丰惊奇地发现:有利的扔出与不利的扔出两者次数的比,是一个包含π的表示式.如果针的长度等于a/2,那么有利扔出的概率为1/π.扔的次数越多,由此能求出越为精确的π的值。
【蒙特卡洛法介绍】
蒙特卡罗法又称统计模拟法,是一种以抽样和随机数的产生为基础的随机性方法,因此也称为随机抽样法、计算机随机模拟法等。蒙特卡罗方法的基本原理是通过数字模拟试验,得到所要求解的出现某种事件的概率,作为问题的近似解。很久之前人们就已经开始使用蒙特卡罗方法来解决问题了,早在17世纪,发生事件的概率是用发生事件的频率来决定的。在20世纪计算机的使用,使得这样的实验可以大量快速的进行模拟。近年来,随着蒙特卡罗方法不仅被用于数学、物理、化学等领域,还应用于核科学与技术、机械工程、天文学和仪器科学与技术等。该法产生了不同的分支,有直接蒙特卡罗法,动力学蒙特卡罗法等
【本题思路】
由于蒙特卡罗法是基于概率论思想,因此可适用在布丰投针实验中。经过次数足够大的实验,针与平行线相交的概率即为实验中该现象发生的频率。
那么如何与π相联系呢?
(如图)
注:图片来自网络
图片中的解决思路即将为针与平行线的关系转化为面积之比的关系,问题也随之转化为了求解概率问题。
【matlab求解思路】
可将针与平行线相交转化为数学公式1即:
实验重复次数可为n=1:10000(按自己需求)
判断上式是否成立,若成立,则m=m+1(m为相交次数,初始可为0)
直至循环结束
则频率(概率)为:
再根据公式1,将p带入,得出π的近似值。
*****实际问题转化为数学语言表述
【代码部分(matlab)】
l = 0.502; % 针的长度(任意给的)
a = 1.4; % 平行线的宽度(大于针的长度l即可)
n = 1000000; % 做n次投针试验
m = 0; % 记录针与平行线相交的次数
x = rand(1, n) * a / 2 ; % 在[0, a/2]内服从均匀分布随机产生n个数, x中每一个元素表示针的中点和最近的一条平行线的距离
fai= rand(1, n) * pi; % 在[0, pi]内服从均匀分布随机产生n个数,phi中的每一个元素表示针和最近的一条平行线的夹角
% axis([0,pi, 0,a/2]); box on; % 画一个坐标轴的框架,x轴位于0-pi,y轴位于0-a/2, 并打开图形的边框
for i=1:n % 开始循环,依次看每根针是否和直线相交if x(i) <= l / 2 * sin(phi (i)) % 如果针和平行线相交m = m + 1; % 那么m就要加1plot(fai(i), x(i), 'r.') % 模仿书上的那个图,横坐标为phi,纵坐标为x , 用红色的小点进行标记hold on % 在原来的图形上继续绘制end
end
p = m / n; % 针和平行线相交出现的频率
mypi = (2 * l) / (a * p); % 我们根据公式计算得到的pi
disp(['蒙特卡罗方法得到pi为:', num2str(mypi)])%输出结果
也可多次求解,求其平均值,提高准确率
代码如下:
result = zeros(100,1); % 初始化保存100次结果的矩阵
l = 0.520; a = 1.314;
n = 1000000;
for num = 1:100m = 0; x = rand(1, n) * a / 2 ;phi = rand(1, n) * pi;for i=1:nif x(i) <= l / 2 * sin(phi (i))m = m + 1;endendp = m / n;mypi = (2 * l) / (a * p);result(num) = mypi; % 把求出来的myphi保存到结果矩阵中
end
mymeanpi = mean(result); % 计算result矩阵中保存的100次结果的均值
disp(['蒙特卡罗方法得到pi为:', num2str(mymeanpi)])
感悟:首先是知道了前辈们求解圆周率π的另一种方法,即基于多次试验的统计结果,这给今后解决问题提供了一个思路。其次,通过投针试验,大致了解了蒙特卡洛法的基本思路,其主要的思想便是在不知道问题的本质求解的方法时,可通过多次试验,从实验中的概率统计结果中找到问题的近似解。另外,在编程实现方面,虽然有一定的matlab基础,但是对于具体的思路的实现仍较为困难,通过看建模视频中提出的各个问题,跟上思路,积极思考,多看代码多学习,我想一段时间后,编程解决问题的能力还是可以提高的,在此感谢清风大哥!
蒙特卡洛模型之神奇的布丰投针实验相关推荐
- 布丰投针java实现,MATLAB模拟布丰投针实验
MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...
- MATLAB模拟布丰投针实验
MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...
- 蒲丰投针实验原理_布丰投针实验 MATLAB仿真 以及报告
布丰投针实验原理.仿真过程以及 MATLAB仿真代码.完整的布丰投针实验报告. 以下内容无关: -------------------------------------------分割线------ ...
- 强化学习 蒲丰投针实验 蒙特卡洛算法
目录 一.蒲丰投针实验 1.1背景故事 1.2原理介绍 二.蒙特卡洛方法 2.1方法介绍 2.2经验轨迹 2.3在线学习与离线学习 2.4数学原理 一.蒲丰投针实验 1.1背景故事 1777年,蒲丰请 ...
- 布丰投针试验的仿真和误差估计
布丰投针试验 一.试验原理 1.试验步骤 2.理论概率及π\piπ的计算与误差 二.Python代码的实现 一.试验原理 1.试验步骤 1.选一个长度为lll的针.再选取一张白纸,上面划分许多平行 ...
- R语言对布丰投针(蒲丰投针)实验进行模拟和动态可视化生成GIF动画
最近我们被客户要求撰写关于动态可视化的研究报告,包括一些图形和统计输出. 介绍 布丰投针是几何概率领域中最古老的问题之一.它最早是在1777年提出的.它将针头掷到有平行线的纸上,并确定针和其中一条平行 ...
- 用一根线模拟浦丰投针实验——Java
用一根线模拟浦丰投针实验--Java 浦丰投针实验(Buffon's needle problem) 本文先给出正确的推理过程,错误的推导过程放在文章末尾,方便大家探讨. 不多废话,直奔主题. ...
- 蒲丰投针计算机模拟ppt,蒲丰投针实验模课件.doc
概率论与数理统计实验 蒲丰投针与蒙特卡罗法 班级 应数12级01班 学号 2012444086 姓名 张旭东 蒲丰投针与蒙特卡罗法 张旭东 2012444086 (重庆科技学院 数学与应用数学 ,重庆 ...
- Matlab模拟蒲丰投针实验计算Π值
文章目录 1.前言 2.实验目的 3.实验原理 (1)问题描述 (2)问题求解 4.实验过程 5.实验结果 6.实验结论 7.Matlab代码 1.前言 学习了概率论,决定自己动手编程实现蒲丰投针实验 ...
- 一文读懂蒲丰投针实验
这个博客源于概率论复习期间,蒙特卡罗方法的思想起源,这种求π\piπ的思路非常的巧妙 附:历史上用蒲丰投针实验估计圆周率的实验记录,来源 蒲丰投针 蒲丰投针实验是法国数学家.自然科学家"乔治 ...
最新文章
- 【摄像头】低照度和光圈
- docker-3-常用命令(上)
- 6、Gerrit插件
- c++ 中this 和 *this区别
- wpf 开源框架_.NET Core跨平台基础框架:10 篇热文汇总
- layui数据表格(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)
- Python 程序 运行过程
- Qt笔记-添加Win10Pcap库获取网络适配器(MinGW编译器)
- PLSQL Developer中test window的使用
- markdown语法学习---半小时就能掌握--宋成光
- 避免大规模故障的微服务架构
- Node.js学习(第一章:Node.js安装方法及模块化理解)
- ipmi java sdk,IPMI Library for Java
- 日志平台查询异常,没有打印异常信息
- Atitit netcore 问题与解决 目录 1. 导入第三方dll库	1 1.1. 跨平台开发netcore程序	2 1.2. 不能生产dll问题,可能是360杀毒监控了。。	2 2. 运行dl
- 从魅力品质到伟大产品-卡诺模型
- 高德打车上线支付宝小程序,持续发力一站式出行!
- 人脸识别学生考勤系统【2】--登录
- PyGobject(十九)布局容器之Alignment
- 推荐一个非常不错得网站——精品视频网
热门文章
- Python植物大战僵尸源代码及素材
- 整理了81个Python实战项目列表,都有完整且详细的教程
- python编写财务软件_python 与财务
- 常考的java数据库笔试题
- 【转】 GitHub 优秀的 Android 开源项目
- JAVA 中文乱码转换
- Labview程序优化
- smart700iev3 程序下载设置_smart 700ie v3下载程序时提示OS更新-工业支持中心-西门子中国...
- 机器学习项目简历收集册-----机器学习(仅供参考)
- 怎么提高计算机的桌面性能,电脑卡顿怎么办?4个小技巧帮你解决问题