估计π的第一种方法:蒲丰(buffon)投针

【数学】通俗解释布丰投针实验过程、蒙特卡洛方法及python仿真代码 很郁闷为什么网上的布丰投针都写的这么复杂,而且很多都是复读机直接copy别人,其实这是个很精巧、有趣的实验,所以打算自己写一个布丰投针的介绍 故事背景 你在教室里写数学题,突然有个人,抱着一大盒针走过来,然后把针撒到地上,然后很淡定地点点头说,“嗯,我知道π等于多少了”。 是不是觉得很神奇?!这跟π什么关系?!!! 没错,这个人就是布丰。 实验过程 这个实验也很简单,两段距离为D的平行线、一根长为L的针(L≤D) 投针实验就是把这根针扔到两段平行线之间,然后统计针碰到平行线的次数,例如图中的两根针,红色针 阅读详情
AI摘要

本文介绍 Buffon's Needle 投针问题的原理,演示如何使用Python循环和向量化方式估算π,并提供两种实现方式的代码示例。通过实验次数的增加,展示了估算π的精确度提升。

用蒲丰(buffon)投针来估计 π \pi π

1 问题描述
2 问题求解
3 Python实现
 3.1 循环形式
 3.2 向量形式

1 问题描述

 buffon投针问题是18世纪首先被Georges-Louis Leclerc, Comte de Buffon提出的。假设我们有一个由平行的木条组成的地板,每条木条的宽度都是 a a a,我们把一个长度为 l ( l < a ) l(l<a) l(l<a)的针随意扔到地板上,针与木条相交的概率是多少?

2 问题求解

 设 x x x是针的中心到最近木条的距离, θ \theta θ是针与该木条之间的角度,如下图 ( a ) (a) (a)。因此当 x ≤ l 2 s i n ( θ ) x≤\frac{l}{2}sin(\theta) x≤2l​sin(θ)时,针与木条相交。

 临界条件为 x ≤ l 2 s i n ( θ ) x≤\frac{l}{2}sin(\theta) x≤2l​sin(θ),而 x x x的范围为 0 ≤ x ≤ a 2 0≤x≤\frac{a}{2} 0≤x≤2a​, θ \theta θ的范围为 0 ≤ θ ≤ π 0≤\theta≤\pi 0≤θ≤π,因此我们可以得到图 ( b ) (b) (b)。根据几何概率,针与木条相交的概率就为图中阴影部分的面积与整个矩形的面积的比值。因此有 P = ∫ 0 π l 2 sin ⁡ ( θ ) d θ a 2 ∗ π = 2 l a π P=\frac{\int_{0}^{\pi} \frac{l}{2}\sin(\theta)d\theta}{\frac{a}{2}*\pi}=\frac{2l}{a\pi} P=2a​∗π∫0π​2l​sin(θ)dθ​=aπ2l​,据此,我们可以得到 π \pi π的估计为 π ^ = 2 l a P \hat{\pi}=\frac{2l}{aP} π^=aP2l​。
在这里插入图片描述

3 Python实现

 总体思路:生成 n n n个(即代表进行 n n n次实验)服从 U ( 0 , π ) U(0, \pi) U(0,π)的随机数 θ \theta θ和 n n n个服从 U ( 0 , a 2 ) U(0, \frac{a}{2}) U(0,2a​)的随机数 x x x,令 k k k为实验成功的次数,初始为 0 0 0,即对于每对随机数 ( θ , x ) (\theta, x) (θ,x),如果 x ≤ l ∗ sin ⁡ θ 2 x≤\frac{l*\sin\theta}{2} x≤2l∗sinθ​,那么就视为实验成功, k k k加 1 1 1。因此最后针与木条相交的概率 P = k n P=\frac{k}{n} P=nk​,从而可得 π \pi π的估计为 π ^ = 2 l n a k \hat{\pi}=\frac{2ln}{ak} π^=ak2ln​。(产生随机数的方法)

3.1 循环形式:

import numpy as np
#定义一个估计π的函数,其中n为实验次数
def buffon(n, l=0.8, a=1):
    k = 0
    
    #产生n个服从U(0,π)的随机数θ
    theta = np.random.uniform(0, np.pi, n)
    
    #产生n个服从U(0,a/2)的随机数x
    x = np.random.uniform(0, a / 2, n)
    
    #进行循环判断
    for i in range(n):
        if x[i] <= l * np.sin(theta[i]) / 2:
            k = k + 1
            
    pi = 2 * l * n / (a * k)
    return pi

结果:

#进行10**8次实验
print(buffon(10 ** 8))

输出:3.1411176760252406

3.2 向量形式:

#定义一个估计π的函数,其中n为实验次数
def buffon2(n, l=0.8, a=1):
    #产生n个服从U(0,π)的随机数θ
    theta = np.random.uniform(0, np.pi, n)
    
    #产生n个服从U(0,a/2)的随机数x
    x = np.random.uniform(0, a / 2, n)
    
    #不进行循环,直接利用numpy的性质,计算速度会更快
    k = np.sum(x <= l * np.sin(theta) / 2)
    
    pi = 2 * l * n / (a * k)
    return pi

结果:

#进行10**8次实验
print(buffon2(10 ** 8))

输出:3.1414584813950164

用C语言实现布丰投针计算圆周率问题 今天遇到一个布丰投针的问题,要用编程来实现,我就看着关于布丰投针的说明和简化公式,提炼出了需要的地方 1. 针长为二分之一平行线之间间距的时候结果最为接近 2. 圆周率等于二倍的针长比上平行线间距与概率的积 3. 针的中心点到最近的平行线的距离小于针与平行线之间夹角的正弦乘以针长的一半,则代表针与平行线相交 4. 针与平行线相交的个数比上总投针的个数就可 阅读详情

相关推荐

圆周率估算的一种方式——蒲丰投针

从很久很久以前,科学家们就热衷于计算圆周率ππ\pi ,计算的准确度越来越高,出发点也各不相同。那ππ\pi到底是怎么计算出来的呢? 中国的刘辉提出了割圆术算法。他论证将圆分割成多边形,分割来越细,多边形的边数越多,多边形的面积就和圆面积的差别就越小。于是得出圆周率的双边不等式,3.141024&lt;π&lt;3.1427043.141024&lt;π&lt;3.1427043.141024π...

learn process of Hanna 1万+

MATLAB模拟布丰投针实验

MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < a. 思路:从针据横线的距离与夹角得出。 解决: 假设针的中点到最近横线的距离为y,则\(y\in[0,\frac{a}{2}]\); 因为投针是随机的,所以y服从均匀分布: \[ f(y...

weixin_30432007的博客 3869

概率论布丰投针实验和C程序模拟

包含文档和理论介绍 用c语言实现普丰投针计算圆周率 包含代码和可执行程序

Buffon投针实验:究竟为什么是pi?

    重要通告:最近多次发现我的tom邮箱发出的邮件被识别成了垃圾邮件,是什么原因我还不是很清楚。最近向我的tom邮箱发过邮件但迟迟没有收到回复的朋友麻烦检查一下垃圾邮件箱,或者重新给我发一次邮件,我换一个邮箱回复您。    数学学习真正悲哀的就是,记住了某个神奇而伟大的定理,看懂了其最严密的推导过程,但却始终没能直观地去理解它。虽然严密的推导是必要的,直观理解往往是不准确的,但

matrix67的专栏 2352

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 475

解决VNC Viewer连接Ubuntu桌面异常:从灰屏到完整菜单栏的实战指南

本文详细解析了使用VNC Viewer连接Ubuntu桌面时出现灰屏或菜单栏缺失的常见原因及解决方案。从桌面环境冲突到配置文件错误,提供了彻底清理系统残留配置、重新安装纯净桌面环境、优化xstartup文件配置等实战步骤,帮助用户快速恢复完整的远程桌面体验。

weixin_30892037的博客 81

【Buffon蒲丰投针实验】R语言代码:实现投针实验模型可视化

大学概率论作业之Buffon蒲丰投针实验模型的可视化,有需要的可以借鉴~~

qq_30866957的博客 1456

STM32F030C8烧录实战:用J-Link Commander实现一键批量烧写(附完整脚本)

本文详细介绍了如何使用J-Link Commander工具链实现STM32F030C8的一键批量烧录,包括环境配置、批处理脚本设计、命令脚本解析以及生产环境实战技巧。通过自动化烧录流程,显著提升效率并降低人为错误,特别适合量产和频繁迭代的开发场景。

weixin_30505225的博客 459

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

原文链接:http://tecdat.cn/?p=13033​tecdat.cn介绍布丰投针是几何概率领域中最古老的问题之一。它最早是在1777年提出的。它涉及将针头放到衬有衬纸的纸上,并确定针头越过页面上一行的可能性。引人注目的结果是概率与pi的值直接相关。R程序将根据上段所述的情况估算pi的值并使用gganimate进行动态可视化。第1部分对于A部分,我们创建一个数据帧,该数据帧将在3个不同的...

weixin_34357833的博客 1417

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

Joern实战:从代码导入到Python分析的全流程避坑指南(附常见错误解决方案)

本文详细介绍了Joern静态分析工具从代码导入到Python分析的全流程实践指南,包括环境配置、代码导入技巧、数据库服务优化、Python交互分析及性能调优等关键步骤。特别针对常见错误提供了实用解决方案,帮助开发者高效进行代码安全分析和漏洞挖掘。

weixin_28309571的博客 138

R学习之统计实验(四)--蒲丰投针(R语言编程)-----数模

问题 法国数学家蒲丰于1777年完成的投针实验是历史上第一个统计模拟实验,可以利用实验结果估计圆周率二.该实验可以表述为:向一簇距离为2a的平行线构成的平面中投掷一根长度为2L的针,求针与直线相交的概率.这里假设L 直接R模拟(大数定律) 注意括号各种英文输入,R语言编写时候看不出明显区别...

默默小艺的博客 7968

数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点

数字IC后端培训教程之Hierarchical Flow子系统block partition和pin assignment详细教程

weixin_37584728的博客 1603

Buffon's Needle An Analysis and Simulation------蒙特卡洛法模拟蒲丰(Buffon)投针实验-使用Matlab

Buffon's NeedleAn Analysis and Simulation蒲丰投针实验是一个著名的概率实验,其原理请参见此页:http://www.mste.uiuc.edu/reese/buffon/buffon.html现在我们利用Matlab来做模拟,顺便说一下,这

swqqcs的专栏 7301

别再到处找离线包了!Visual Studio 2022 企业版/社区版离线安装保姆级教程(含工作负载选择指南)

本文提供Visual Studio 2022企业版/社区版离线安装的详细教程,包括工作负载选择指南和批量安装优化策略。针对网络隔离或带宽受限环境,介绍如何制作离线安装包、选择合适的工作负载组合,并分享高级技巧如增量更新和自动化部署,帮助团队高效统一开发环境配置。

weixin_28745821的博客 731

Agentic AI为教育行业赋能,提示工程架构师解析应用潜力

然而,即便是最先进的 LLMs,在面对复杂、动态、需要持续规划和调整的教育场景时,也常常显得力不从心,它们更像是强大的“问答机器”,而非真正意义上的“学习伙伴”或“教学助手”。在教育场景中,传统的 AI 工具可能只能回答学生提出的特定问题,或者根据预设的规则推送一些学习材料。无论您是教育技术领域的开发者、产品经理,还是一线的教育工作者、教育管理者,抑或是对 AI 教育应用充满好奇的研究者,本文都将为您提供宝贵的 insights,助您把握 Agentic AI 时代教育创新的脉搏。

架构师的AI之路,分享AI应用开发架构的学习与实践。 466

python多条直线拟合_Python实现蒙特卡洛之布丰投针

欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信01可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。Buffon实验介绍法国数学家Buffon提出一个问题:设我们有一个以平行且等距木纹铺成的地板(如图),随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。经Buffon证明此概率与圆周率pi相关,因此Buffon提出的一种计算圆周率的方法—...

weixin_39719078的博客 298

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java实现蒲丰投针求_在MATLAB中怎么实现图形演?

学过微积分的话可以用它来证明。布丰投针实验:利用概率求圆周率布丰(Comte de Buffon)设计出他的著名的投针问题(needle problem)。依靠它,可以用概率方法得到π的近似值。假定在水平面上画上许多距离为a的平行线,并且,假定把一根长为l<a的同质均匀的针随意地掷在此平面上。布丰证明:该针与此平面上的平行线之一相交的概率为:p=2l/(api) 把这一试验重复进行多次,并记下成功...

weixin_35473090的博客 415

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

圆周率python代码解析_Python实现蒙特卡洛之布丰投针

欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,私信01可以领取包括不限于Python实战演练、PDF电子文档、面试集锦、学习资料等。Buffon实验介绍法国数学家Buffon提出一个问题:设我们有一个以平行且等距木纹铺成的地板(如图),随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。经Buffon证明此概率与圆周率pi相关,因此Buffon提出的一种计算圆周率的方法—...

weixin_33708562的博客 794

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c语言布丰投针源码,布丰投针数学分析及实验设计(原创).pdf

Buffon 投针数学分析与实验设计(蒲丰投针/布丰投针)1777 年法国科学家D ·Buffon 提出的一种计算圆周率的方法——随机投针法,即著名的布丰投针实验。问题:向平面内间距为d 的一组平行直线,任意投掷一根长l( l 为d)  的针,求针与直线相交的概率。解法一:设针的中点为M ,M 与直线的距离为x 。针或针的延长线与直线的夹角为:(这里为什么要选取针的中点来计算距离呢?选...

weixin_36071371的博客 839

蒲峰投针实验

  今天突然遇到了这个问题,就总结一下:设我们有一个以平行且等距木纹铺成的地板(如图),现在随意抛一支长度比木纹之间距离小的针,求针和其中一条木纹相交的概率。这就是蒲丰投针问题(又译“布丰投针问题”)。   逻辑推导的优雅证明:找一根铁丝完成一根圆圈,使其直径恰恰等于平行线间的距离d,可以想象的到,对于这样的圆圈来说,无论怎么扔下,都将和平行线有两个交点。因此,如果投下的次数为n,那么相交的次数...

weixin_30883271的博客 528

Python实现蒙塔卡洛思想

Python实现蒙塔卡洛思想

pystuding 1707

matlab 蒙特卡罗计算pi值

蒙特卡罗法计算pi值是比较基础的入门应用之一,网上流传的大部分代码包括百度百科上的代码都是使用for循环完成迭代的,运算速度非常慢,这里我们提供一个向量化运算的方式,以加快运算速度。接触编程久了后,会发现运算速度是一个非常重要的问题,尤其是对于matlab这类高层语言,想提高matlab的运算速度,可以数学建模公会之前的一篇总结——优化matlab运行速度的方案的教程 方法一:蒲丰投针 l = 0...

chen10217的博客 6751

python 仿真浦丰针实验求π

【代码】python 仿真浦丰针实验求π。

moge19的专栏 499
上一篇: 可视化之正态分布图
下一篇: 杂记——贝叶斯可信区间与频率置信区间的区别
米法·
博客等级 码龄8年 179粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值