【问题的提出】
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基础,但是对于具体的思路的实现仍较为困难,通过看建模视频中提出的各个问题,跟上思路,积极思考,多看代码多学习,我想一段时间后,编程解决问题的能力还是可以提高的,在此感谢清风大哥!

蒙特卡洛模型之神奇的布丰投针实验相关推荐

  1. 布丰投针java实现,MATLAB模拟布丰投针实验

    MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...

  2. MATLAB模拟布丰投针实验

    MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...

  3. 蒲丰投针实验原理_布丰投针实验 MATLAB仿真 以及报告

    布丰投针实验原理.仿真过程以及 MATLAB仿真代码.完整的布丰投针实验报告. 以下内容无关: -------------------------------------------分割线------ ...

  4. 强化学习 蒲丰投针实验 蒙特卡洛算法

    目录 一.蒲丰投针实验 1.1背景故事 1.2原理介绍 二.蒙特卡洛方法 2.1方法介绍 2.2经验轨迹 2.3在线学习与离线学习 2.4数学原理 一.蒲丰投针实验 1.1背景故事 1777年,蒲丰请 ...

  5. 布丰投针试验的仿真和误差估计

    布丰投针试验 一.试验原理 1.试验步骤 2.理论概率及π\piπ的计算与误差 二.Python代码的实现 一.试验原理 1.试验步骤 ​ 1.选一个长度为lll的针.再选取一张白纸,上面划分许多平行 ...

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

    最近我们被客户要求撰写关于动态可视化的研究报告,包括一些图形和统计输出. 介绍 布丰投针是几何概率领域中最古老的问题之一.它最早是在1777年提出的.它将针头掷到有平行线的纸上,并确定针和其中一条平行 ...

  7. 用一根线模拟浦丰投针实验——Java

    用一根线模拟浦丰投针实验--Java 浦丰投针实验(Buffon's needle problem)   本文先给出正确的推理过程,错误的推导过程放在文章末尾,方便大家探讨.   不多废话,直奔主题. ...

  8. 蒲丰投针计算机模拟ppt,蒲丰投针实验模课件.doc

    概率论与数理统计实验 蒲丰投针与蒙特卡罗法 班级 应数12级01班 学号 2012444086 姓名 张旭东 蒲丰投针与蒙特卡罗法 张旭东 2012444086 (重庆科技学院 数学与应用数学 ,重庆 ...

  9. Matlab模拟蒲丰投针实验计算Π值

    文章目录 1.前言 2.实验目的 3.实验原理 (1)问题描述 (2)问题求解 4.实验过程 5.实验结果 6.实验结论 7.Matlab代码 1.前言 学习了概率论,决定自己动手编程实现蒲丰投针实验 ...

  10. 一文读懂蒲丰投针实验

    这个博客源于概率论复习期间,蒙特卡罗方法的思想起源,这种求π\piπ的思路非常的巧妙 附:历史上用蒲丰投针实验估计圆周率的实验记录,来源 蒲丰投针 蒲丰投针实验是法国数学家.自然科学家"乔治 ...

最新文章

  1. 【摄像头】低照度和光圈
  2. docker-3-常用命令(上)
  3. 6、Gerrit插件
  4. c++ 中this 和 *this区别
  5. wpf 开源框架_.NET Core跨平台基础框架:10 篇热文汇总
  6. layui数据表格(一:基础篇,数据展示、分页组件、表格内嵌表单和图片)
  7. Python 程序 运行过程
  8. Qt笔记-添加Win10Pcap库获取网络适配器(MinGW编译器)
  9. PLSQL Developer中test window的使用
  10. markdown语法学习---半小时就能掌握--宋成光
  11. 避免大规模故障的微服务架构
  12. Node.js学习(第一章:Node.js安装方法及模块化理解)
  13. ipmi java sdk,IPMI Library for Java
  14. 日志平台查询异常,没有打印异常信息
  15. Atitit netcore 问题与解决 目录 1. 导入第三方dll库 1 1.1. 跨平台开发netcore程序 2 1.2. 不能生产dll问题,可能是360杀毒监控了。。 2 2. 运行dl
  16. 从魅力品质到伟大产品-卡诺模型
  17. 高德打车上线支付宝小程序,持续发力一站式出行!
  18. 人脸识别学生考勤系统【2】--登录
  19. PyGobject(十九)布局容器之Alignment
  20. 推荐一个非常不错得网站——精品视频网

热门文章

  1. Python植物大战僵尸源代码及素材
  2. 整理了81个Python实战项目列表,都有完整且详细的教程
  3. python编写财务软件_python 与财务
  4. 常考的java数据库笔试题
  5. 【转】 GitHub 优秀的 Android 开源项目
  6. JAVA 中文乱码转换
  7. Labview程序优化
  8. smart700iev3 程序下载设置_smart 700ie v3下载程序时提示OS更新-工业支持中心-西门子中国...
  9. 机器学习项目简历收集册-----机器学习(仅供参考)
  10. 怎么提高计算机的桌面性能,电脑卡顿怎么办?4个小技巧帮你解决问题