蒲丰(Buffon)投针试验

合集下载

Buffon掷针实验的计算机模拟实验的设计与实现

Buffon掷针实验的计算机模拟实验的设计与实现

Buffon 掷针实验的计算机模拟实验的设计与实现收稿日期:2018-12-05基金项目:长沙理工大学大学生研究性学习与创新性实验项目(1203058);长沙理工大学教研教改项目(CNJG201808)作者简介:周浙泉,王志宇,张棣妍(女),隆超怡(女),长沙理工大学信息与计算科学专业2014级学生;万勇(1963-),硕士研究生,教授,研究方向:几何分析与偏微分方程。

一、研究背景18世纪,蒲丰(Buffon )提出Buffon 投针问题:(1)取一张白纸,在上面画上许多条间距为a 的平行线。

(2)取一根长度为l (l ≤a/2)的针,随机地向画有平行直线的纸上掷n 次,观察针与直线相交的次数,记为m 。

(3)计算针与直线相交的概率。

蒲丰证明了这个概率是:p=2l πa。

因为它与π有关,人们想到利用投针实验来估计圆周率的值。

历史上,有不少人做过蒲丰掷针实验:这个问题十分有趣,只是人工实验往往耗时、耗力,而用计算机模拟实验,却能迅速获得结果。

自从20世纪90年代美国率先开始数学实验以来,数学实验改变了人们传统的数学思维方式,人们发现数学是可以借助计算机去探索和发现的。

近十年来,国内外已有不少的数学实验教材和一些好的数学实验范例,但是这需要一定的计算机编程能力,如math-ematica 编程、matlab 编程等,才能实现人机对话,因此数学实验只能在具有一定数学知识和较高计算机编程能力的特定人群中使用,不能“飞入寻常百姓家”。

二、系统的设计本系统研发工具为Java 语言。

Java 是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java 看起来设计得很像C++,但是能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能将更多的时间和精力花在研发上。

Java 是一个面向对象的语言。

布丰的投针试验故事介绍及公式推导.doc

布丰的投针试验故事介绍及公式推导.doc

布丰的投针试验公元1777年的一天,法国科学家D ·布丰(D ·buffon1707~1788)的家里宾客满堂,原来他们是应主人的邀请前来观看一次奇特试验的。

试验开始,但见年已古稀的布丰先生兴致勃勃地拿出一张纸来,纸上预先画好了一条条等距离的平行线。

接着他又抓出一大把原先准备好的小针,这些小针的长度都是平行线间距离的一半。

然后布丰先生宣布:“请诸位把这些小针一根一根往纸上扔吧!不过,请大家务必把扔下的针是否与纸上的平行线相交告诉我。

”客人们不知布丰先生要干什么,只好客随主意,一个个加入了试验的行列。

一把小针扔完了,把它捡起来又扔。

而布丰先生本人则不停地在一旁数着、记着,如此这般地忙碌了将近一个钟头。

最后,布丰先生高声宣布:“先生们,我这里记录了诸位刚才的投针结果,共投针2212次,其中与平行线相交的有704次。

总数2212与相交数704的比值为3.142。

”说到这里,布丰先生故意停了停,并对大家报以神秘的一笑,接着有意提高声调说:“先生们,这就是圆周率π的近似值!”众宾哗然,一时议论纷纷,个个感到莫名其妙;“圆周率π?这可是与圆半点也不沾边的呀!”布丰先生似乎猜透了大家的心思,得意洋洋地解释道:“诸位,这里用的是概率的原理,如果大家有耐心的话,再增加投针的次数,还能得到π的更精确的近似值。

不过,要想弄清其间的道理,只好请大家去看敝人的新作了。

”随着布丰先生扬了扬自己手上的一本《或然算术试验》的书。

π在这种纷纭杂乱的场合出现,实在是出乎人们的意料,然而它却是千真万确的事实。

由于投针试验的问题,是布丰先生最先提出的,所以数学史上就称它为布丰问题。

布丰得出的一般结果是:如果纸上两平行线间相距为d ,小针长为l,投针的次数为n ,所投的针当中与平行线相交的次数是m ,那么当n 相当大时有:dmn l2≈π 在上面故事中,针长l等于平行线距离d 的一半,所以代入上面公式简化我想,喜欢思考的读者,一定想知道布丰先生投针试验的原理,下面就是一个简单而巧妙的证明。

“投针实验”求圆周率的方法

“投针实验”求圆周率的方法

教材提到了“投针实验”求圆周率的方‎法。

1777年,法国数学家蒲‎丰取一根针,量出它的长度‎,然后在纸上画‎上一组间距相‎等的平行线,这根针的长度‎是这些平行线‎的距离是的一‎半。

把这根针随机‎地往画满了平‎行线的纸面上‎投去。

小针有的与直‎线相交,有的落在两条‎平行直线之间‎,不与直线相交‎。

这次实验共投‎针2212次‎,与直线相交的‎有704次,2212÷704≈3.142。

得数竟然是π‎的近似值。

这就是著名的‎蒲丰投针问题‎。

后来他把这个‎试验写进了他‎的论文《或然性算术尝‎试》中。

蒲丰证明了针‎与任意平行线‎相交的概率为‎p= 2l/πd 。

这个公式中l‎为小针的长,d为平行线的‎间距。

由这个公式,可以用概率方‎法得到圆周率‎的近似值。

当实验中投的‎次数相当多时‎,就可以得到π的更精确的值‎。

蒲丰实验的重‎要性并非仅仅‎是为了求得比‎其它方法更精‎确的π值。

而在于它是第‎一个用几何形‎式表达概率问‎题的例子。

计算π的这一方法,不但因其新颖‎,奇妙而让人叫‎绝,而且它开创了‎使用随机数处‎理确定性数学‎问题的先河,是用偶然性方‎法去解决确定‎性计算的前导‎。

找一根粗细均‎匀,长度为 d 的细针,并在一张白纸‎上画上一组间‎距为l 的平行线(方便起见,常取l = d/2),然后一次又一‎次地将小针任‎意投掷在白纸‎上。

这样反复地投‎多次,数数针与任意‎平行线相交的‎次数,布丰(Comte de Buffon‎)设计出他的著‎名的投针问题‎(needle‎proble‎m)。

依靠它,可以用概率方‎法得到π的近‎似值。

假定在水平面‎上画上许多距‎离为a的平行‎线,并且,假定把一根长‎为l<a的同质均匀‎的针随意地掷‎在此平面上。

布丰证明:该针与此平面‎上的平行线之‎一相交的概率‎为:p=2l/(api) 把这一试验重‎复进行多次,并记下成功的‎次数,从而得到P的‎一个经验值,然后用上述公‎式计算出π的‎近似值,用这种方法得‎到的最好结果‎是意大利人拉‎泽里尼(Lazzer‎i ni)于1901年‎给出的。

蒲丰投针实验原理

蒲丰投针实验原理

蒲丰投针实验原理
蒲丰投针实验是一种检测泥沙粒径分布的实验方法,它是利用悬浮在水中的粒度分布模拟藉由空气流抛掷及落入平板上的控制情形来模拟河流中悬浮颗粒的粒径分布,从而进行检测的。

该实验流程是:将检测的粒料悬浮于水中,利用抛掷及落入平板上的控制条件来模拟河流中悬浮颗粒的粒径分布,然后借助投针实验来观测平面上粒料的分布情况。

最后,根据获得的结果计算出每种粒径的百分率,从而可以得出泥沙粒径分布情况。

蒲丰(Buffon)投针试验

蒲丰(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;}。

Buffon投针试验

Buffon投针试验

a
M x
m(G ) G的面积 P ( A) m( S ) S的面积
b 0 2 sin d a π 2 b 2b . a π aπ 2
π
蒲丰投针试验的应用及意义
根据频率的稳定性, 当投针试验次数n很大时, m 算出针与平行直线相交的次数m, 则频率值 即可 n 作为P( A)的近似值代入上式, 那么
定义 当随机试验的样本空间是某个区域,并且任 意一点落在度量 (长度, 面积, 体积) 相同的子区域 是等可能的,则事件 A 的概率可定义为
m( A) P( A) m( S )
(其中m( S ) 是样本空间的度量, m( A) 是构成事件 A 的子区域的度量 ) 这样借助于几何上的度量来合理 规定的概率称为几何概率.
投针试验的所有可能结果 与矩形区域 a S {( x, ) | 0 x , 0 } 2 中的所有点一一对应. 由投掷的任意性可知, 这是一个几何概型问题. 所关心的事件
A {针与任一平行直线相交} 发生的充分必要条件为S中的点满足
b 0 x sin , 0 π 2
蒲丰投针试验
例 1777年,法国科学家蒲丰(Buffon)提出了投针 试验问题.平面上画有等距离为a(>0)的一些平行直 线,现向此平面任意投掷一根长为b(<a)的针,试求 针与任一平行直线相交的概率.
解: 以x表示针投到平面上时, a 针的中点M 到最近的一条平行
M x
直线的距离, 表示针与该平行直线的夹角. 那么针落在平面上的位置可由( x, )完全确定.
几何概型
古典概型是关于试验的结果为有限且每个结果出现的 可能性相同的概率模型。一个直接的推广是:保留等 可能性,而允许试验的所有可能结果为直线上的一线 段,平面上的一区域或空间中的一立体等具有无限多 个结果的情形,称具有这种性质的试验模型为几何概 型.

蒲丰投针试验和π

蒲丰投针试验与π学科:《数学史》作者:***班级:07级数本班学号:********蒲丰投针试验和π作者:*** 班级:07级数本班 学号:******摘要:“圆周率”是指一个圆的周长与其直径的比值。

古今中外,许多人致力于圆周率的研究与计算。

为了计算出圆周率的越来越好的近似值,一代代的数学家为这个神秘的数贡献了无数的时间与心血。

公元1777年,法国数学家、自然科学家蒲丰利用很多次随机投针试验算出π的近似值,引起广泛关注,这也是最早的几何概率问题,并且蒲丰本人对这个实验给予了证明。

计算π的这一方法,不但因其新颖,奇妙而让人叫绝,而且它开创了使用随机数处理确定性数学问题的先河,是用偶然性方法去解决确定性计算的前导。

关键字:π 蒲丰 蒲丰投针试验 几何概率因为任何两个圆都相似,故所有圆的周长和它的直径的比都等于同一常数,我们把这一常数叫“圆周率”。

国际上,人们习惯地把圆周率用符号π表示。

1600年,英国的威廉·奥托兰特首先使用πδ表示圆周率,他的理由是,因为π是希腊文圆周的第一个字母,奥托兰特用它来表示圆周长,而δ是希腊文直径的第一个字母,奥托兰特用它来表示直径,根据圆周率的定义,理应用πδ表示圆周率,但在推算圆周率的过程中,人们常用直径为1的圆,即令1δ=,这样πδ就等于π了。

1706年英国的琼斯首先改用π表示圆周率,后来被数学家广泛接受,一直沿用至今。

古今中外,许多人致力于圆周率的研究与计算。

为了计算出圆周率的越来越好的近似值,一代代的数学家为这个神秘的数贡献了无数的时间与心血。

回顾历史,人类对π的认识过程,反映了数学和计算技术发展情形的一个侧面。

π的研究,在一定程度上反映这个地区或时代的数学水平。

德国数学家康托说:“历史上一个国家所算得的圆周率的准确程度,可以作为衡量这个国家当时数学发展水平的指标。

”1874年勒让德证明了π和π都是无理数,即不能用两个整数的比表示.1882年德国数学家林德曼证明了π是超越数,即不可能是一个整系数代数方程的根,尽管如此,自古至今,很多人都在用各种方法求π的近似值。

蒲丰投针 2

2013-3-24
• 1850年,瑞士数学家沃尔夫在苏黎世,用 一根长36mm的针,平行线间距为45mm,投 掷5000次,得π ≈3.1596. • 1864年,英国人福克投掷了1100次,求得 π ≈3.1419.1901年,意大利人拉泽里尼投 掷了3408次,得到了准确到6位小数的π 值 .
2013-3-24
• 其中投针问题可述为:设在平面上有一组
平行线,其距都等于D,把一根长l<D的针 随机投上去,则这根针和一条直线相交的 概率是2l/π D.由于通过他的投针试验法可 以利用很多次随机投针试验算出π 的近似 值,所以特别引人瞩目,这也是最早的几 何概率问题.并且蒲丰本人对这个实验给予 证明。
2013-3-24
在考虑一个以r(r <l/2)为半径的硬币与平 面上画有间距为l的平行线相交的概率时, 假设硬币的周长为c, c=2π r, 则其概率结 果可以改写成: P0 =2r/ l =2π r/ (π l) =c/ (π l).
• 从上面的结果发现, 它们的形式是一 样的, 都是周长除以π l的形式,本小 组从中得到启发: 在蒲丰问题中, 对 投掷一个一般的凸多边形来说, 它与 平行线相交的概率可能与这个凸多边 形的周长密切相关.
2013-3-24
蒲丰投针问题研究史
• 蒲丰是几何概率的开创者,并以蒲丰投针
问题闻名于世,发表在其1777年的论著《 或然性算术试验》中.其中首先提出并解决 下列问题:把一个小薄圆片投入被分为若 干个小正方形的矩形域中,求使小圆片完 全落入某一小正方形内部的概率是多少, 接着讨论了投掷正方形薄片和针形物时的 概率问题.这些问题都称为蒲丰问题.
2013-3-24
• 解 1) 和三角形与平行线相交的讨论相似, 四边形与平行 线相交也有5种情形: • ①四边形只有一个顶点在一条平行线上(1个交点) (如图(a)) • ②四边形有两条边分别与平行线相交(2个交点) (如图(b)); • ③平行线过四边形的对角线(2个交点) (如图(c)); • ④四边形的某一顶点恰好在平行线上, 其对应的某一边也 在同一条平行线上(2个交点) (如图(d)); • ⑤四边形的某一条边与平行线重合(无穷多个交点) (如图 (e)).

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进行模拟投针,模拟效果较好,随着投针次数模拟的增多,实验结果逼近于π的真实值,但是实验程序有待优化,在较多投针次数的模拟中,实验程序运行速度较慢,可以改进相关算法来做适当调节。

蒲丰投针问题_概率论论文

Buffon投针问题摘要本文讨论了Buffon投针问题的解法及其不同解法之间的内在联系,同时从投针到投平面图形对Buffon投针问题给出了一些推广,并得到一般的结论,指出了其概率在探矿、近似计算中的应用。

关键词蒲丰投针概率随机试验近似计算一、引言蒲丰投针问题是由法国科学家蒲丰(Buffon)在1777年提出的,它是概率中非常有代表性的问题,它是第一个用几何形式表达概率问题的例子,其结论具有很强的理论与实际意义。

蒲丰针问题的解决不仅较典型的反应了集合概率的特征及处理方法,而且还可以由此领略到从“概率土壤”上开出的一朵瑰丽的鲜花——蒙特卡洛(Monte-Carlo)方法。

二、Buffon投针问题及其解法Buffon投针问题:平面上画有等距离的平行线,每两条平行线之间的距离为2a,向平面任意投掷一枚长为2l(l<a)的针,试求针与平行线相交的概率。

解:以x表示针的中点M到最近一条平行线的距离,以φ表示该针与平行线的夹角。

针与平行线的关系见图1.则有:0≤x≤a,0≤φ≤π,由它们所围成的矩形区域记为G1。

针与平行线相交的充要条件是:0≤x≤lsinφ,记满足这个关系的区域为g1(图2中的阴影部分)。

则所求概率为P1=g1的面积G1的面积=∫lsinφdφπaπ=2laπ三、Buffon投针问题不同解法及其内在联系上述解法是常见解法之一(记为解法一),这里讨论一下蒲丰针问题的其他解法及其之间的联系。

1.其他解法解法二:以x表示针的重点M到最近一条平行线的距离,y表示该针在此平行线上投影和长度,如图3所示。

易知x和y的取值范围是0≤x≤a,0≤y≤2l,这两个不等式确定了xOy平面上的矩形区域G2,针与平行线相交的充要条件是(y2)2+x2≤l2,该不等式确定了矩形区域G2(如图4所示)中的区域g2,从而所求概率为P2=g2的面积G2的面积=14·l·2l·π2l·a=lπ4a解法三:作垂直于平行线的直线,在该直线上选定一方向为正向,用z1,z2分别表示针头与针尾关于某平行线的纵坐标(如图5所示),该平行线的选取应使|z1+z2|≤2a。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、利用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;
}。

相关文档
最新文档