估计π的第一种方法:蒲丰(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

NC65增加自定义参照并且参照数据要根据选择的财务组织过滤

1、首先定义一个参照类 package nc.pub.jzcm.ref; import nc.ui.bd.ref.AbstractRefModel; import nc.ui.bd.ref.IRefDocEdit; import nc.ui.bd.ref.IRefMaintenanceHandler; public class PMPrPayDefaultRefModel extends AbstractRefModel { public PMPrPayDefaultRefModel(){ ...

xyl的博客 3494

Matlab实战:手把手教你用Zernike多项式模拟光学像差(附完整代码)

本文详细介绍了如何在Matlab中使用Zernike多项式模拟光学像差,包括基础理论、不同排序系统的实现、完整代码示例以及高级应用技巧。通过Zernike多项式,可以有效地描述和分析光学系统中的波前畸变,适用于望远镜校正、眼科光学等多个领域。

weixin_42523720的博客 159

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

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

qq_30866957的博客 1456

TNS-12516及ORA-12516错误解决

在客户端进行sqlplus连接报错如下: ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 在/home/oracle/product/10.2.0/db_1/network/log/listener.log中查看到错误如下: TNS-12516: TNS:listener could not find available handler with matchin

KEL 2万+

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

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

weixin_34357833的博客 1417

一文介绍Linux EAS

EAS只在系统负载不重时,即系统中每个CPU的利用率都低于其算力的80%时才被启用,而且选出的最节能CPU只有比线程当前运行的CPU节约能量大于6%时,线程才会迁移到该CPU运行。因此EAS为线程选择最节约能量的CPU来运行的前提条件是很苛刻的,针对重载场景(比如游戏),EAS的功能应该很少被使用起来,针对重载场景的功耗优化,这里可能是一个值得尝试的点。算力(capacity)是CPU调度中的一个基础概念,它反映的是一个CPU的计算能力,是个规格化的值,可以通过读取Android手机的文件节点。

youzhangjing_的博客 1234

硬件工程师提前批真题及答案解析2

我们需要考虑题目可能的简化假设,即输入电阻 Ri​ 可能是 rbe​ 和 βre​ 的组合,但题目可能简化为: Ri​≈rbe​+βre​。由于锗管的正向导通电压较小(0.2 V~0.3 V),而硅管的正向导通电压较大(0.6 V~0.7 V),因此-4.7 V的电压差不符合硅管的特性,而更接近锗管的特性。在三极管电路中,静态电位是指在无信号输入时,三极管各电极的直流电压。re​ 是动态发射极电阻,通常可以近似为 re​=IE​VT​​,但在题目中已经给出了 re​=300Ω,因此可以直接使用这个值。

XU157303764的博客 777

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

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

默默小艺的博客 7968

STM32入门教程:水位传感器应用

这是一个简单的STM32水位检测系统的入门教程。希望通过学习本教程,您能对STM32微控制器的基本应用有更深入的了解,并能成功构建一个水位检测系统。如果您需要更详细的代码实例和教程,请参考相关的STM32开发手册和应用笔记。STM32是一款功能丰富且广泛应用于嵌入式系统的微控制器系列。在本教程中,我们将介绍如何使用STM32微控制器和水位传感器构建一个水位检测系统。

wx_linying1029的博客 533

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

交换机四种光互联技术:OIO、OBO、NPO与CPO

在过去几十年里,数据中心交换机主要依赖电信号通过铜线进行数据传输。然而,随着数据传输速率从100Gbps向400Gbps、800Gbps甚至1.6Tbps迈进,传统电互联(Electrical Input & Output, EIO)面临三大瓶颈:信号衰减、功耗激增和空间限制。例如,高速信号在长距离铜线传输中会产生严重的信号失真,迫使设计者加入数字信号处理器(DSP)来补偿信号衰减,这进一步推高了功耗和成本。此外,传统可插拔光模块的体积较大,限制了端口密度,难以满足现代数据中心对高带宽密度的需求。

网络技术联盟站 3126

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

weixin_39719078的博客 298

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_35473090的博客 415

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

weixin_33708562的博客 794

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、付费专栏及课程。

余额充值