布丰投针实验模拟
蒲丰投针试验讲解课件

该试验不仅在理论上具有重要意义,对 于理解随机性和几何规律的本质有重要 贡献,而且在实际应用中也有广泛的应
用价值。
蒲丰投针试验可以应用于统计学、物理 学、计算机科学等多个领域,为相关领
域的研究提供了重要的启示和工具。
蒲丰投针试验的局限性
01
02
03
04
蒲丰投针试验虽然是一个经典 的试验,但是它也存在一些局
针方向与平行线垂直。
重复投掷蒲丰投针N次,记录每 次投掷的结果。
测量与计算阶段
测量投掷后蒲丰投针 与平行线之间的距离 ,记录下来。
根据公式π=2*n/N ,计算π的近似值, 其中n为相交次数, N为投掷次数。
根据记录的数据,计 算蒲丰投针与平行线 相交的次数。
CHAPTER 03
试验结果分析
蒲丰投针试验的预期结果
蒲丰投针试验是一种估算π值的方法,其预期结果是通过投掷 一根针到一张白纸上,然后统计针与白纸边缘相交的次数, 来估算π的值。
蒲丰投针试验的预期结果是根据概率论和几何学原理推导出 来的,即当投掷次数足够多时,针与白纸边缘相交的频率接 近于π/4。
实际结果与预期结果的比较
在实际进行蒲丰投针试验时,需要记录针与白纸边缘相交的次数,并计 算出相应的π值。
限性。
首先,该试验的结果受到投针 方式、试验环境等因素的影响 ,可能导致结果存在误差。
其次,蒲丰投针试验的应用范 围相对有限,主要适用于一些 特定的几何形状和随机性问题
。
最后,蒲丰投针试验的结论仅 适用于理想化的模型,与实际
情况可能存在差异。
未来研究方向与展望
随着科学技术的发展和研究的深入, 蒲丰投针试验在未来仍有广阔的研究 前景。
蒲丰投针试验讲解课 件
实验报告3蒲丰投针

对于 =50,100,500,1000,3000各做5次试验,分别求出 的近似值.写出书面报告、总结出随机模拟的思路.
实验目的:
本实验旨在使学生掌握蒲丰投针问题,并由此发展起来的随机模拟法,从中体学会到新思想产生的过程.
数学实验报告
实验序号:3日期:2015年4月20日
班级
13A
姓名
徐文婕
学号
134080041
实验
名称
随机模拟计算 的值----蒲丰投针问题
问题的背景:
在历史上人们对 的计算非常感兴趣性,发明了许多求 的近似值的方法,其中用蒲丰投针问题来解决求 的近似值的思想方法在科学占有重要的位置,人们用这一思想发现了随机模拟的方法.
0.749830449
1
0.03418
0.57486
0.815575809
1
0.57009
0.83008
1.106974197
1
实验结果与实验总结(体会):最后得到π的近似值为3.111387
进一步讨论或展望:浦丰投针问题可做各种推广,比如把实验改为向画有间隔为d的一组等距平行线的平面内任意投一个边长为l的小正三角形,求三角形与平行线相交的概率。进一步,可把正三角形改为正四边形、正五边形、……、正n边形,或者改为一个小圆,结论又如何?
主要利用Excel中产生的100个随即点(x,φ)来模拟每一次投针实验中针的位置,统计满足这个不等式的随机(x,φ)的个数,从而得到事件发生的次数和频率,进而近似计算π的值。
再利用一个简便方法近似计算∏的值:向一个包含单位园的边长为2的正方形内任意投掷n个随机点,统计其中“随机点落入单位圆内”的随机点个数k以及k/n,由几何概率易见
蒲丰(Buffon)投针试验

一、利用Matlab计算机语言验证蒲丰(Buffon)投针试验问题给定a=10,b=5时,模拟100万次投针实验的Matlab程序如下:a=10;b=5;n=1000000;p=10; % a为平行线间距,b为针的长度,n为投掷次数,p为有效数字位数x=unifrnd(0,a/2,[n,1]);phi=unifrnd(0,pi,[n,1]); % 产生均匀分布的随机数,分别模拟针的中点与最近平行线的距离和针的倾斜角y=x<0.5*b*sin(phi); m=sum(y); % 计数针与平行线相交的次数PI=vpa(2*b*n/(a*m),p)运行结果PI =3.138919145二、利用C++计算机语言编程通过大量重复实验验证以下结论:三个阄,其中一个阄内写着“有”字,两个阄内不写字,三人依次抓取,各人抓到“有”字阄的概率均为1/3。
程序如下:#include<stdio.h>#include<stdlib.h>#include<time.h>void main(){int n=500000;int i,a[3]={0};srand(time(NULL));for(i=0;i<n;i++)a[rand()%3]++;printf("共测试%d次,其中有字事件有%d次, 占%.2f%%\n""抓到无字事件1有%d次,占%.2f%%\n""抓到无字事件2有%d次,占%.2f%%\n""抓到无字事件共%d次,占%.2f%%",n,a[0],a[0]*100.0/n,a[1],a[1]*100.0/n,a[2],a[2]*100.0/n,a[1]+a[2],(a[1]+a[2])*100.0/n);return 0;}。
蒲丰投针实验原理

蒲丰投针实验原理
蒲丰投针实验是一种检测泥沙粒径分布的实验方法,它是利用悬浮在水中的粒度分布模拟藉由空气流抛掷及落入平板上的控制情形来模拟河流中悬浮颗粒的粒径分布,从而进行检测的。
该实验流程是:将检测的粒料悬浮于水中,利用抛掷及落入平板上的控制条件来模拟河流中悬浮颗粒的粒径分布,然后借助投针实验来观测平面上粒料的分布情况。
最后,根据获得的结果计算出每种粒径的百分率,从而可以得出泥沙粒径分布情况。
蒲丰投针最简单的代码

蒲丰投针最简单的代码
蒲丰投针是一种概率统计实验,可以用来求圆周率。
这里介绍一下最简单的蒲丰投针代码。
首先,需要导入Python中的random模块来生成随机数。
然后,定义需要用到的变量和常数,如针长(L)和两根地板板缝之间的距离(d)。
接下来,生成两个随机数,分别表示针的中心点距离地板板缝的距离(x)和针与竖直方向的夹角(theta)。
利用这两个随机数可以计算出针与地板板缝相交的情况。
再用一个计数器变量count来记录针与地板板缝相交的次数,重复这个实验若干次后,圆周率的近似值就可以通过下面的公式计算出来:
pi = 2 * L / (d * p)
其中,p为相交次数与总次数之比。
代码如下:
import random
L = 1 # 针长
d = 2 # 地板板缝间距
n = 10000000 # 实验次数
count = 0 # 相交次数
for i in range(n):
x = random.uniform(0, d) # 针中心距地板板缝距离
theta = random.uniform(0, 180) # 针与竖直方向的夹角
if x <= L * 0.5 * math.sin(theta / 180 * math.pi): # 判断是否相交
count += 1
p = count / n # 相交次数与总次数之比
pi = 2 * L / (d * p) # 计算圆周率
print(pi)
需要注意的是,模拟次数越多,计算出的圆周率越接近真实值。
但是过多的模拟次数会导致程序运行时间增长,因此需要根据实际情况来选择合适的实验次数。
蒲丰投针实验模拟

一、蒲丰投针问题在平面上画有等距离的一些平行线,平行线间的距离为a(a>0) ,向平面上随机投一长为l(l<a)的针,针与平行线相交的概率p,结果发现π =2*l/(a*p).二、试验方法能够采纳MATLAB软件进行模拟实验,即用MATLAB编写程序来进行“蒲丰投针实验”。
1、基来源理因为针投到纸上的时候,有各样不一样方向和地点,但是,每一次投针时,其地点和方向都能够由两个量独一确立,那就是针的中点和偏离水平的角度。
以 x 表示针的中点到近来的一条平行线的距离,β表示针与平行线的交角。
明显有0<=x<=a/2 ,0<=β <=Pi 。
用边长为 a/2 及 Pi 的长方形表示样本空间。
为使针与平行线相交,一定x<=l*sinβ * ,知足这个关系的地区面积是从0 到Pi的l*sinβ对β的积分,可计算出这个概率值是(2l)/(Pi*a)。
只需随机生成n 对这样的x 和β,就能够模拟 n 次的投针实验,而后统计知足 x<=l*sin β * 的 x 的个数,就能够以为这是订交的次数。
而后利用公式求得π值。
2、MATLAB编程clear ('n')clear('a')clear('x')clear('f')clear ('y')clear ('m')disp(' 本程序用来进行投针实验的演示, a 代表两线间的宽度,针的长度 l=a/2 ,n 代表实验次数 '); a=input(' 请输入 a:');n=input(' 请输入 n:');x=unifrnd(0,a/2,[n,1]);f=unifrnd(0,pi,[n,1]);y=x<*a*sin(f);m=sum(y);PI=vpa(a*n/(a*m))三、实验数据 ( 部分程序截屏见后 )a n PI第一次310000第二次310000第三次3100000第四次3100000第五次31000000第六次31000000第七次3第八次3第九次3第十次3四、实验结论从上述数据剖析可知,跟着模拟次数的愈来愈多, PI 的值渐渐稳固在π值邻近,即愈来愈趋近于π,故蒲丰投针实验的确能够模拟出π的值。
拓展资料-蒲丰投针及蒙特卡罗模拟
概率模型的随机模拟与蒲丰投针实验第1章模拟** 模拟的概念每一个现实系统外部环境之间都存在着一定的数学的或者逻辑的关系,这些关系在系统内部的各个组成部分之间也存在。
对数学、逻辑关系并不复杂的模型,人们一般都可用解析论证和数值计算求解。
但是,许多现实系统的这种数学、逻辑模型十分复杂,例如大多数具有随机因素的复杂系统。
这些系统中的随机性因素很多,一些因素很难甚至不可以用准确的数学公式表述,从而无法对整个系统采用数学解析法求解。
这类实际问题往往可以用模拟的方法解决。
模拟主要针对随机系统进行。
当然,也可以用于确定性系统。
本文讨论的重点是其中的随机模拟。
采用模拟技术求解随机模型,往往需要处理大批量的数据。
因此,为了加速模拟过程,减少模拟误差,通常借助于计算机进行模拟,因此又称为计算机模拟。
计算机模拟就是在已经建立起的数学、逻辑模型的基础之上,通过计算机试验,对一个系统按照一定的决策原则或作业规则,由一个状态变换为另一个状态的行为进行描述和分析。
** 模拟的步骤整个模拟过程可以划分为一定的阶段,分步骤进行。
(1)明确问题,建立模型。
在进行模拟之前,首先必须正确地描述待研究的问题,明确规定模拟的目的和任务。
确定衡量系统性能或模拟输出结果的目标函数,然后根据系统的结构及作业规则,分析系统各状态变量之间的关系,以此为基础建立所研究的系统模型。
为了能够正确反映实际问题的本质,可先以影响系统状态发生变化的主要因素建立较为简单的模型,以后再逐步补充和完善。
(2)收集和整理数据资料。
模拟技术的正确运用,往往要大量的输入数据。
在随机模拟中,随机数据仅靠一些观察值是不够的。
应当对具体收集到的随机性数据资料进行认真分析。
确定系统中随机性因素的概率分布特性,以此为依据产生模拟过程所必需的抽样数据。
(3)编制程序,模拟运行。
选择适当的计算机语言。
按照系统的数学、逻辑模型编写计算机程序。
然后可以进行调试性模拟,分析模拟结果是否能够正确地反映现实系统的本质。
蒲丰投针问题
蒲丰投针问题
1.有一只小猫,抓到20只老鼠,他准备每次吃掉奇数位置的老鼠,直到最后一只老鼠就把它放生,有一只很聪明的老鼠听到这里,就站到了一个位置上,最后它果然是那只被放生的老鼠,请问它站的是第几个位置?
2.伟大的数学家蒲丰,他邀请了他的很多朋友到他家,他在纸上画了很多间距相同的平行线,他给了他朋友很多长度是平行线间距一半的针,经过几千次的数据收集,针与平行线相交的数量与总数量的比值是
3.14,与π接近,各位知道是什么原因吗?。
Buffon投针实验报告
Buffon投针实验一、实验目的:在计算机上用试验方法求圆周率的近似值。
二、实验原理:假设平面上有无数条距离为1的等距平行线,现向该平面随机投掷长度为L(L≤1)的针,则针与平行线相交的概率 P=。
设针的中心M与最近一条平行线的距离为x,则x~U(0,1);针与平行线的夹角为(不管相交与否),则~U(0,)如图:()在矩阵上均匀分布,且针与平行线相交的充要条件为x≤=;P=P{ x=}。
记录≤成立的次数,记为由-大数定理:≈,则=2。
在计算机上产生则=~U(0,),i=1,2,…,n;再产生,则, i=1,2,…,n三、实验方法及代码:在计算机上进行模拟实验,求出的实验值。
给定L,在计算机上利用MFC独立随机产生x和,然后判断≤是否成立.代码如下:#include "stdafx.h"#include "buffon.h"#include "ChildView.h"#include "ChoiceDlg.h"#include <ctime>#include <cmath>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif// CChildViewCChildView::CChildView(){Trynum=1000;}CChildView::~CChildView(){}BEGIN_MESSAGE_MAP(CChildView,CWnd )//{{AFX_MSG_MAP(CChildView)ON_WM_PAINT()ON_COMMAND(ID_TOOL_NUM, OnToolNum)ON_COMMAND(ID_TOOL_RETRY, OnToolRetry)//}}AFX_MSG_MAPEND_MESSAGE_MAP()// CChildView message handlersBOOL CChildView::PreCreateWindow(CREATESTRUCT& cs){if (!CWnd::PreCreateWindow(cs))return FALSE;cs.dwExStyle |= WS_EX_CLIENTEDGE;cs.style &= ~WS_BORDER;cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);return TRUE;}void CChildView::OnPaint(){CPaintDC dc(this),*pDC;pDC=&dc;CFont font, *pOldFont;font.CreatePointFont(200,"宋体");pOldFont=pDC->SelectObject(&font);pDC->SetTextColor(RGB(255,0,0));pDC->TextOut(100,5,"蒲丰投针试验");pDC->SelectObject(pOldFont);CPen myPen1,myPen2, *pOldPen1,*pOldPen2;CRect rect1(30,30,920,620);pDC->Rectangle(rect1);myPen1.CreatePen(PS_SOLID, 1, RGB(0,0,255));pOldPen1=pDC->SelectObject(&myPen1);for(int i=100;i<600;i+=50){pDC->MoveTo(50,i);pDC->LineTo(900, i);}pDC->SelectObject(pOldPen1);myPen2.CreatePen(PS_SOLID, 1, RGB(0,255,0));pOldPen2=pDC->SelectObject(&myPen2);srand(time(0));int a,b,q,a1,b1,su,flag;np=0;for(int j=0;j<Trynum;j++){a=rand()%850+50;b=rand()%450+100;q=rand()%180;a1=25*cos(q);b1=25*sin(q);su=pow(-1,rand()%2);pDC->MoveTo((a-su*a1),(b-su*b1));pDC->LineTo((a+su*a1),(b+su*b1));if( (b%50) >= 25 )flag =50-b%50;elseflag = b%50;if( 25*sin(q) >= flag )np++;}pDC->SelectObject(pOldPen2);CString str;int c=Trynum/(np*1.0);int d=(int)((Trynum/(np*1.0)*100000))%100000;str.Format("投针次数:%d;\n相交次数:%d;\nπ的估算值:%d.%d",Trynum,np,c,d);MessageBox(str,"实验数据信息");}void CChildView::OnToolNum(){CChoiceDlg mydlg;if(mydlg.DoModal()==IDOK){this->Trynum = mydlg.m_Trynum ;this->RedrawWindow();}}void CChildView::OnToolRetry(){// TODO: Add your command handler code herethis->RedrawWindow();}四、实验数据处理与分析:根据实验数据,得到近似值为3.2313,可得相对误差为δ=(3.2313-π)/π≈0.02856;运行截图:五、实验小结:本次实验,通过MFC进行模拟投针,模拟效果较好,随着投针次数模拟的增多,实验结果逼近于π的真实值,但是实验程序有待优化,在较多投针次数的模拟中,实验程序运行速度较慢,可以改进相关算法来做适当调节。
蒲丰投针试验
o
蒲丰投针试验的应用及意义
2b P( A) = aπ 根据频率的稳定性 根据频率的稳定性 , 当投针试验次数 n 很大时 , m 测出针与平行直线相交 的次数 m , 则频率值 即可 n 作为 P ( A) 的近似值代入上式 , 那么 2bn m 2b . ≈ ⇒π≈ n aπ am
利用上式可计算圆周率 π 的近似值 .
蒲丰资料
Georges Louis Leclerc Comte de Buffon Born: 7 Sept. 1707 in Montbard, Côte d'Or, France Died: 16 Apr. 1788 in Paris, France
返回
De Morgan 1860 Fox Lazzerini Reina 1884 1901 1925
利用蒙特卡罗(Monte Carlo)法进行计算机模拟. 利用蒙特卡罗(Monte Carlo)法进行计算机模拟. 蒙特卡罗 单击图形播放/ ESC键退出 单击图形播放/暂停 ESC键退出 取a = 1, b = 0.85.
历史上一些学者的计算结果(直线距离 历史上一些学者的计算结果 直线距离a=1) 直线距离
试验者 Wolf Smith 时间 1850 1855 针长 0.8 0.6 1.0 0.75 0.83 0.5419 投掷次数 相交次数 π的近似值 5000 3204 600 1030 3408 2520 2532 1218 382 489 1808 859 3.1596 3.1554 3.137 3.1595 3.1415929 3.1795
所关心的事件
o
M ϕ x
A = { 针与某一平行直线相交 } 发生的充分必要条件为 S 中的点满足 b 0 ≤ x ≤ sinϕ, 0 ≤ ϕ ≤ π. 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
系统建模与仿真
基于MATLAB的布丰实验模拟
*名:***
学号: ********
指导教师:**
2022年4月26日
目录
基于MATLAB的布丰实验模拟 .................................................................... - 1 -
一、实验原理......................................................................................... - 1 -
二、编程模拟......................................................................................... - 1 -
1、程序流程图............................................................................... - 1 -
2、程序代码................................................................................... - 2 -
三、实验结果......................................................................................... - 2 -
基于MATLAB 的布丰实验模拟
一、实验原理
找一根铁丝弯成一个圆圈,使其直径恰恰等于平行线间的距离a 。
可以想象得到,对于这样的圆圈来说,不管怎么扔下,都将和平行线有两个交点。
因此,如果圆圈扔下的次数为n 次,那么相交的交点总数必为n 2。
现在设想把圆圈拉直,变成一条长为a π的铁丝。
显然,这样的铁丝扔下时与平行线相交的情形要比圆圈复杂些,可能有4个交点,3个交点,2个交点,1个交点,甚至于都不相交。
由于圆圈和直线的长度同为a π,根据机会均等的原理(即等概率事件),当它们投掷次数较多,且相等时,两者与平行线组交点的总数期望也是一样的。
这就是说,当长为a π的铁丝扔下n 次时,与平行线相交的交点总数应大致为n 2。
现在转而讨论铁丝长为l 的情形。
当投掷次数n 增大的时候,这种铁丝跟平行线相交的交点总数k 应当与长度l 成正比,因而有:l k λ=,式中λ是比例系数。
为了求出λ来,只需注意到,对于a l π=的特殊情形,有n k 2=。
于是求得a n πλ2=。
代入前式就有:a m πln 2≈从而ak
nl 2≈π。
二、编程模拟
1、程序流程图
否
其中,判断是否相交是看条件θsin 2
l y <是否成立,如果成立则说明相交。
判断是否结束,是看计算精度(本次结果与上次结果差的绝对值)有没有达到要求。
2、程序代码
%%布丰实验模拟
clear all ;clc
format long
%初始化参数
tic
a=50; %平行线间隔
l=30; %针长
k=0; %相交次数
n=0; %投针次数
e=1e-8;%计算精度
pai=0;
r=abs(pi-pai);
while r>e
y=25*rand(1); %位置坐标
theta=pi*rand(1); %角度
if y < abs(0.5*l*sin(theta)) %判断是否相交
k=k+1;
n=n+1;
pai=(2*n*l)/(a*k);
r=abs(pi-pai);
else %不相交
n=n+1;
end
end
disp('实验情况:')
disp('投针次数:')
disp(n)
disp('相交次数:')
disp(k)
disp('实验结果π=:')
disp(pai)
toc
三、实验结果
用上述程序进行模拟,可以得到如下图所示的结果:
可以看出,计算精度达到8
10 时,计算速度还是比较快的。
但存在的问题是,个别情况下会出现计算迟迟达不到精度要求,耗时过长。
另外,用MATLAB GUI对本次模拟实验做了可视化窗口,如下图所示:
使用过程中发现,其计算速度有进一步提高。
但是有较大的偶然性,根据随机数产生的不同,计算速度会有明显的差异。