蒲丰投针实验模拟
蒲丰投针试验讲解课件
该试验不仅在理论上具有重要意义,对 于理解随机性和几何规律的本质有重要 贡献,而且在实际应用中也有广泛的应
用价值。
蒲丰投针试验可以应用于统计学、物理 学、计算机科学等多个领域,为相关领
域的研究提供了重要的启示和工具。
蒲丰投针试验的局限性
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
蒲丰(Buffon)投针随机试验的讨论 (修改稿)
(2006-3-7修改, 9-18再修改)例 ( 蒲丰(Buffon )投针随机试验的讨论 ) 在平面上画有相互距离均为2a 的平行线束,向平面上随机投一枚长为2l 的针,为了避免针与两平行线同时相交的复杂情况,假定0>>l a , 设M 为针的中点,y 为M 与最近平行线的距离,φ为针与平行线的交角(如图1)a y ≤≤0, πϕ≤≤0. 于是,很明显,针与平行线相交的充要条件是ϕsin l y ≤(如图2),故相交的概率为ald l a dy d a p l πϕϕπϕπϕππ2 sin 1 1sin 000===⎰⎰⎰ (1) 我们用n 表示投针次数, n S 表示针与平行线相交次数,由大数定理知,当n 充分大时,频率接近于概率,即aln S n π2≈ 于是有naS nl2≈π (2)这就是上面所说的用随机试验求π值的基本公式。
根据公式(2),19—20世纪,曾有不少学者做了随机投针试验,并得到了π的估计值 . 其中最详细的有如下两个 :其中π的估计值就是利用π的近似公式(8)得到的,即1596.363320002532455000362≈=⨯⨯⨯≈π (Wolf )1415929.31133551808334085.22≈=⨯⨯⨯≈π (Lazzarini )一般情况下,随机抽样试验的精度是不高的,Wolf 的试验结果是π≈3.1596,只准确两位有效数字 .精度是由方差n p p n S D n )1(-=⎪⎭⎫⎝⎛决定的,为了确定概率p ,不妨取l =a 这一极限情况,这时π2≈p =0.6366,n n S D n 2313.0≈⎪⎭⎫⎝⎛,由积分极限定理, dx n p p p n S P x n n ⎰-∞→=⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧≤--λλπλ221-e21)1(lim即频率n S n /近似地服从正态分布律()n p p p N /)1(,- . 如果要求以大于95%的概率(96.1=λ),保证以频率n S n /作为p 的近似值精确到三位有效数字,001.0≤-=p nS nε 即≈⎪⎪⎭⎫⎝⎛≤-001,0p n S P n 95.021/)1(001.0)1(001.0212≥⎰----np p np p x dx eπ则必须有96.1/)1(001.0=≥-λnp p根据上式,要求试验次数7.88001.0/231.096.122≈⨯≥n 万次 .至于Lazzarini 的试验,为什么实验次数少反而精确度却很高呢?这是由于这一试验结果恰好和祖冲之密率355/113相合,而祖冲之密率为无理数π的连分式,属于π的最佳有理逼近 . 很明显,作为一种具有随机性质的试验,其结果恰好与最佳有理逼近的结果一致是非常偶然的;顾及到上述讨论,故Lazzarini 的试验结果是不大可能的 .注:以上的讨论是第6章“假设检验”方法的一个有实际意义的例子。
蒲丰氏投针问题的模拟过程
蒲丰氏投针问题的模拟过程,随机数发生器也是自编的,以供大家参考和提出建议。
谢谢。
(seed1和seed2最好选择3和5,为了使投针次数达到1000000,CVF进行如下设置Project->settings->link->output,将stack allocations reserve:设为1000000000)program getpiimplicit nonereal,parameter::a=5,L=4,pi=3.14159integer::n1,i,counter=0real,allocatable::R1(:),R2(:)real::theta,x,pi1write(*,*) 'input the size of the array:'read(*,*) n1allocate(R1(n1))allocate(R2(n1))call random(n1,R1,R2)do i=1,n1x=a*(2*R1(i)-1)theta=pi*R2(i)if(abs(x)<L*sin(theta)) counter=counter+1end dopi1=(1.0*n1)/(counter*1.0)*(2.0*L/a)write(*,*) 'this is PI:'write(*,*) piwrite(*,"('this is ratio of counter to total number',F10.6)")1.0&*counter/n1stopend programsubroutine random(n,R1,R2)implicit noneinteger n,seed1,seed2,i,little,mreal::R1(n),R2(n)integer::temp1(n),temp2(n)write(*,*) 'input seed1'read(*,*) seed1write(*,*) 'input seed2'read(*,*) seed2m=2**30m=m*2-1temp1(1)=397204094temp2(1)=temp1(1)R1(1)=(1.0*temp1(1))/(1.0*m)R2(1)=(1.0*temp2(1))/(1.0*m)little=0if(R1(1)<0.5) little=little+1do i=1,n-1temp1(i+1)=mod(seed1*temp1(i),m)R1(i+1)=(1.0*temp1(i+1))/(1.0*m)temp2(i+1)=mod(seed2*temp2(i),m)R2(i+1)=(1.0*temp2(i+1))/(1.0*m)if(R1(i+1)<0.5) little=little+1 .end do ;write(*,*) 'ratio of number which is little than 0.5'write(*,*) 1.0*little/nreturnend subroutine拟蒙特卡洛方法(Quasi-Monte Carlo)积分实例%使用Matlab提供的函数求积分,exp(-1/2*x^2)在(0,1)间积分 format long; syms xa = sym(1/2);f = exp(-a*x^2);ezplot(f)disp(int(f,-1,1));fprintf('integral result:%1.18f.\n',double(int(f,0,1)));%disp(double(int(f,0,1)));复制代码%使用拟蒙特卡洛方法积分%得到拟蒙特卡洛序列,即低偏差序列,halton法%如果有相关的工具箱的话,可以用Matlab里面的haltonset,faureset,sobolset 函数实现,x=halton(10000,2,5577);n=length(x);mju=0;for i=1:nmju=mju + exp(-0.5*x(i)^2);endmju=mju/n;fprintf('Quasi-Monte Carlo result:%1.18f.\n',mju);%disp(mju);%使用蒙特卡洛方法积分%得到Uniform序列,x=random('unif',0,1,10000,1);n=length(x);mju=0;for i=1:nmju=mju + exp(-0.5*x(i)^2);endmju=mju/n;fprintf('Monte Carlo result:%1.18f.\n',mju);%=============生成HALTON序列======================== function result = halton( m,base,seeder )%生成HALTON序列% Check inputsif nargin < 3seeder = 0;if nargin < 2error('MATLAB:Halton:NotEnoughInputs',...'Not enough input arguments. See Halton.'); endendres=0;n=length(base);for i=1:mfor j=1:nelement=0;temp=seeder+i;k=1;while temp>0element(k)=rem(temp,base(j));temp=fix(temp/base(j));k=k+1;endres(i,j)= 0;for k=1:length(element)res(i,j)=res(i,j)+element(k)/(base(j)^k); endendendresult=res;。
综合实验三 蒲丰投针问题实验
综合实验三 蒲丰投针问题实验一、实验目的1. 掌握几何概型、熟悉Monte Carlo 方法的基本思想;3.会用MATLAB 实现简单的计算机模拟二、实验内容在用传统方法难以解决的问题中,有很大一部分可以用概率模型进行描述.由于这类模型含有不确定的随机因素,分析起来通常比确定性的模型困难.有的模型难以作定量分析,得不到解析的结果,或者是虽有解析结果,但计算代价太大以至不能使用.在这种情况下,可以考虑采用Monte Carlo 方法。
下面通过例子简单介绍Monte Carlo 方法的基本思想.Monte Carlo 方法是计算机模拟的基础,它的名字来源于世界著名的赌城——摩纳哥的蒙特卡洛,其历史起源于1777年法国科学家蒲丰提出的一种计算圆周π的方法——随机投针法,即著名的蒲丰投针问题。
这一方法的步骤是:1) 取一张白纸,在上面画上许多条间距为d 的平行线,见图8.1(1)2) 取一根长度为()l l d <的针,随机地向画有平行直线的纸上掷n 次,观察针与直线相交的次数,记为m3)计算针与直线相交的概率.由分析知针与平行线相交的充要条件是 ϕs i n 21≤x 其中πϕ≤≤≤≤0,20d x 建立直角坐标系),(x ϕ,上述条件在坐标系下将是曲线所围成的曲边梯形区域,见图 8.l (2).由几何概率知(*)22s i n 210d l d d G g p ππϕϕπ===⎰的面积的面积 4)经统计实验估计出概率,n m P ≈由(*)式即?2=⇒=ππd l n m Monte Carlo 方法的基本思想是首先建立一个概率模型,使所求问题的解正好是该模型的参数或其他有关的特征量.然后通过模拟一统计试验,即多次随机抽样试验(确定m 和n ),统计出某事件发生的百分比.只要试验次数很大,该百分比便近似于事件发生的概率.这实际上就是概率的统计定义.利用建立的概率模型,求出要估计的参数.蒙特卡洛方法属于试验数学的一个分支.问题:(1) 经过n次试验后圆周率估计与的圆周 之间的差的绝对值的规律是?其中n分别取100,1000,2000,5000,10000,20000,50000(2) 参数l,d的不同选择,会对圆周率的估计有什么影响?可以选择d为l.5倍,2倍,3倍,4倍,5倍,8倍,10倍,20倍,50倍三、实验要求写出实验步骤、结果显示及分析四、实验分析以x 表示针的中点与最近一条平行线的距离,以j表示针与此线间的交角.显然0≤x≤a/20≤j≤p针与平行线相交的充要条件是x≤lsin(j)/2因(x,j)在图(4)中下面的矩形中等可能地取点,可见针与平行线相交的概率p 为图(4)正弦曲线线段与横轴围成的面积同图(4)中矩形面积的比.经计算得p= 另一方面得到如大量得投针实验,利用大数定理知:随着实验次数的增加,针与平行线相交的频率依概率收敛到概率p.那么在上式中以频率代替相应的概率p,则可以获得圆周率p的近似值.下面的程序是用matlab语言编写的计算机模拟投针以计算p 的近似值的程序.五、实验步骤1.编写MATLAB程序cleard=2l=0.5counter=0n=100x=unifrnd(0,d/2,1,n)fi=unifrnd(0,pi,1,n)for i=1:nif x(i)<1*sin(fi(i))/2counter=counter+1endendfren=counter/npihat=2*1/(d*fren)sqrt((pihat-pi)^2)结果显示:fren = 0.3300pihat =3.0303ans =0.1113以此类推:将n=1000,2000,5000,10000,20000,50000分别代入,可得:当n=1000时,fren =0.3240pihat =3.0864ans =0.0552当n=2000时,fren =0.3230pihat =3.0960ans =0.0456当n=5000时,fren =0.3204pihat =3.1211ans =0.0205当n=10000时,fren =0.3190pihat =3.1348ans =0.0068当n=20000时,fren =0.3172pihat =3.1521ans =0.0105当n=50000时,fren =0.3177pihat =3.1478ans =0.00622.改变d的取值,分别为1.5,2 ,3 ,4,5,8,10,20,50倍仍用1中的程序:cleard=3l=0.5counter=0n=100x=unifrnd(0,d/2,1,n)fi=unifrnd(0,pi,1,n)for i=1:nif x(i)<1*sin(fi(i))/2counter=counter+1endendfren=counter/npihat=2*1/(d*fren)sqrt((pihat-pi)^2)结果显示:d为1.5倍时fren =0.2300pihat =2.8986ans =0.2430d为2倍时fren =0.1700pihat =2.9412ans =0.2004d为3倍时fren =0.1100pihat =3.0303ans =0.1113d为4倍时fren =0.0800pihat =3.1250ans =0.0166d为5倍时fren =0.0600pihat =3.3333ans =0.1872d为8倍时fren =0.0400pihat =3.1250ans =0.0211d为10倍时fren =0.0300pihat =3.3333ans =0.1872d为20倍时fren =0.0100pihat =5ans =1.8539d为50倍时fren =0pihat =Infans =Inf六、结果分析1.经过n次试验后圆周率估计与的圆周π之间的差的绝对值的规律是:n的次数取值越多,圆周率估计与的圆周π之间的差的绝对值越小:圆周率越接近真值。
关于用蒲丰投针求∏值的实验报告
关于用蒲丰投针求∏值的实验报告实验目的理解蒲丰投针的模型,逐渐掌握用数学知识解决实际问题的能力掌握运用matlab 进行一般的数学运算培养团队合作精神实验原理在一张纸上画出间距为l 的多条直线,随机在上面投放长度为 a 的针,投放n 次,记与直线相交的次数为m ,当n 相当大之后,则针与线相交的概率n m p =如下图,通过分析,针与线相交的条件简化为 ϕsin 21≤x 而πϕ≤≤≤≤0,20dx这是一个几何特型的概率问题,通过推理可得(*)22s i n 210d l dd G g p ππϕϕπ===⎰的面积的面积所以,实验过程及结果用matlab 模拟投针过程求∏值 的函数:function f=fun(a,l,n)x=pi.*rand(1,n);y=(a/2).*rand(1,n);c=(y<=((l/2).*sin(x)));m=sum(c);f=2*l*n/(m*a);随机一次实验求得的∏值>> a=input('a=');l=input('l=');n=input('n=');a=20l=15n=1000>> fun(a,l,n)ans =3.131524008350731>>以上得到的∏值不是十分精确,这是由于实验次数有限导致的误差,当实验的次数相当大之后,所得结果必定会更加逼近∏的精确值。
缺点和改进上述模拟实验还不是十分精确,而且没有绘图,不够直观,下次会注意模拟的更加精确,更加直观。
布丰投针数学分析与实验设计(原创)
l 由(1)和(2)我们可以得出一些结论: n 根长度为 的小 n 针仍出去后压线的概率之和与一根长为 l 的针扔出去后压线 l 的概率相等;将 n 根长为 的小针连接成任意形状后扔出去 n 压线的概率与长为 l 的针扔出去压线的概率相等;当 n ,线就是曲线,所以结论可以进一步推广:随机投
k
称作这个连分式的第 k 个渐进分数。同时,
k
它也是所有分母不超过
q 的分数中最接近实数 x 的分数,
k
k
是实数 x 的第 k 个最佳渐进分数。
k
求渐进连分式,当然可以用上面分式求出,下面给出第
p k 个渐进连分式 的递推求法: q p a q 1 p a a 1 q a a p p ( k 2) p q a q q ( k 2 )
如上图所示,AB 针的长度为 2l ,CD 针长度为 l 。在 AB 针 或 AB 针的延长线与直线的夹角为 ,AB 针的中点 M 的取
角 相等,所以 M ' , M ' ' 是 m' , m' ' 的两倍,于是 CD 与直线相交的概率是 AB 与直线相交的概率的一半。对于其 余任意夹角都有这个结论。所以:长度为 l 的针与直线相交 的概率是长度为 2l 的针与直线相交概率的一半。
产生误差原因 1:m/n 的精度问题,这个是数学造 成的误差。解决办法:选取合适的 m 值,使 m/n 的有 效数字达到要求的精度。 产生误差原因 2:如果针的端点与直线非常接近, 例如相距万分之一毫米,用肉眼无法判断针是否与直线 相交,造成误差。解决办法:该次事件无效,不予统计, 继续进行下一次实验。 产生误差原因 3:l/d 的精度问题,这是测量问题。 产生误差的原因 1 和 2,我们都可以解决,使之达
投针试验
投针试验投针问题1777年法国科学家布丰提出的一种计算圆周率的方法——随机投针法,即著名的布丰投针问题。
投针步骤这一方法的步骤是:1)取一张白纸,在上面画上许多条间距为a的平行线。
2)取一根长度为l(l<a)的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m3)计算针与直线相交的概率.18世纪,法国数学家布丰和勒可莱尔提出的“投针问题”,记载于布丰1777年出版的著作中:“在平面上画有一组间距为a的平行线,将一根长度为l(l<a)的针任意掷在这个平面上,求此针与平行线中任一条相交的概率。
”布丰本人证明了,这个概率是p=2l/(πd) π为圆周率利用这个公式可以用概率的方法得到圆周率的近似值。
下面是一些资料试验者时间投掷次数相交次数圆周率估计值Wolf1850年5000 2532 3.1596Smith 1855年3204 1218.5 3.1554C.De Morgan 1680年600 382.5 3.137Fox1884年1030 489 3.1595Lazzerini 1901年3408 1808 3.1415929Reina 1925年2520 859 3.1795设这三个正数为x,y,z,不妨设x≤y≤z,对于每一个确定的z,则必须满足x+y>z,x²+y²;﹤z²;,容易证明这两个式子即为以这3个正数为边长可以围成一个钝角三角形的充要条件,用线性规划可知满足题设的可行域为直线x+y=z与圆x²+y²=z²;围成的弓形,总的可行域为一个边长为z的正方形,则可以围成一个钝角三角形的概率P=S弓形/S正方形=(πz²/4-z²/2)/z²=(π-2)/4.因为对于每一个z,这个概率都为(π-2)/4,因此对于任意的正数x,y,z,有P=(π-2)/4,命题得证。
蒲丰投针试验---------概率论与数理统计
蒲丰资料
1777年,法国科学家蒲丰(Buffon)提ห้องสมุดไป่ตู้了投针 试验问题.平面上画有等距离为a(a>0)的一些平行直 线,现向此平面任意投掷一根长为b( b<a )的针,试求 针与某一平行直线相交的概率. 解 以 x表示针投到平面上时,
针的中点M到最近的一条平行
a
M x
直线的距离, 表示针与该平行直线的夹角.
1.0
0.75 0.83 0.5419
600
1030 3408 2520
382
489 1808 859
3.137
3.1595 3.1415929 3.1795
利用蒙特卡罗(Monte Carlo)法进行计算机模拟. 单击图形播放/暂停 ESC键退出 取a 1, b 0.85.
利用上式可计算圆周率π 的近似值.
历史上一些学者的计算结果(直线距离a=1)
试验者 Wolf Smith 时间 1850 1855 针长 0.8 0.6 投掷次数 相交次数 π的近似值 5000 3204 2532 1218 3.1596 3.1554
De Morgan 1860
Fox Lazzerini Reina 1884 1901 1925
那么针落在平面上的位置可由( x , )完全确定.
投针试验的所有可能结果与 矩形区域
a S {( x , ) 0 x ,0 π} 2 中的所有点一一对应 . 由投掷的任意性可知 这是一个几何概型问题.
a
M x
所关心的事件
o
A { 针与某一平行直线相交} 发生的充分必要条件为S 中的点满足 b 0 x sin , 0 π . 2
基于r语言蒲丰投针法求圆周率
基于r语言蒲丰投针法求圆周率蒲丰投针法是一种估算圆周率的方法,其基本思想是通过随机投针的方式来模拟圆周率。
具体步骤如下:1.画一组平行线,线与线之间的距离为针的长度。
2.随机投针,记录每次针与线的交点情况。
3.统计总共投了多少针和有多少针与线相交,用相交的针数除以总针数,得到一个估计的概率值。
4.利用概率值,可以通过公式π=2L/(DP),其中L为针的长度,D为平行线的距离,P为相交的概率值来估算圆周率。
接下来,我们通过r语言来实现蒲丰投针法:```r。
n_trials <- 1000000 #投针次数。
L<-1#针的长度。
D<-2#平行线之间的距离。
n_hits <- 0 #有多少次投针与线相交。
for (i in 1:n_trials) 。
#随机生成针的中心点距离第一条线的距离和针的倾斜角度。
x <- runif(1, 0, D/2)。
theta <- runif(1, 0, pi/2)。
#计算针的两个端点所在的y坐标。
y1 <- x + L/2 * sin(theta) #计算针的起点。
y2 <- x - L/2 * sin(theta) #计算针的终点。
#判断针是否与线相交。
if (y1 > D/2 || y2 < -D/2) 。
n_hits <- n_hits。
} else 。
n_hits <- n_hits + 1。
}。
}。
#计算估计出的圆周率。
p_hits <- n_hits / n_trials。
pi_estimate <- 2 * L / (D * p_hits)。
print(pi_estimate)。
```。
在这个例子中,我们进行了100万次投针的试验,通过统计投针与线相交的次数,得到了一个估计值为3.141497,与实际值3.1415926非常接近。
值得注意的是,这种方法的精度会随着试验次数的增加而提高,因此应尽可能多地进行试验,以获得更精确的结果。
蒲丰投针问题与无理数π的模拟
5、在C4输入=3*SIN(C4)/2。下托到C1003;在D4输入=IF(D4<=1,"1","0")下托到D1003,在E4输入=COUNTIF(E4:E10003,"1")在下托到E1003,在F4输入=2*10000*3/(F4*4)。
教师评语与成绩:
实验结果总结:计算机上模拟蒲丰投针试验,可以求出π的近似的值.我的到的值为3.225133和3.123367.他与.31415926存在了差别.可能是由于计算机取的1000个随机数的差别.虽然它们存在差别,但是它们已经很接近啦,这比人工或其它方法计远的快和准确于人的计算.
本实验旨在让实验者在计算机上模拟蒲丰投针试验,掌握无理数 的近似计算方法,理解随机模拟法的基本原理,从中体会到新思想、新方法产生的过程。
实验内容:
蒲丰投针问题:平面上画有间隔为 的等距平行线,向平面任意投一枚长为 的针,求针与任一平行线相交的概率,进而求 的近似值。若做了 次投针试验,有 次针与线相交,那么由教材例1.2.9结论知所求概率为 ,而 ,故有 。
2、单击数据/数据分析/随机数发生器,选择变量个数2,随机数1000,均匀分布,介于-1到1,输出区域$A$2,确定;
3、在C2输入=A2^2+B2^2;
4、在D2输入=IF(C6<=1,"1","0"),在E2输入=COUNTIF(D2:D10002,"1");
5、在F2输入=4*E2/10000。
实验二、蒲丰投针问题与无理数π的模拟
蒲丰投针问题_概率论论文
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
概率论与数理统计实验
蒲丰投针与蒙特卡罗法
班级应数12级01班
学号2012444086
姓名张旭东
蒲丰投针与蒙特卡罗法
张旭东2012444086
(重庆科技学院数学与应用数学,重庆沙坪坝)
【摘要】通过设计一个投针实验使这个事件的概率和未知量π有关,然后通过重复实验,以频率估计概率,即可求得未知参数π的近似解。
这种方法称为随机模拟法,也称为蒙特卡罗法。
一般来说,实验次数越多所得的近似值就越接近真值。
可以利用MATLAB来大量重复地模拟所设计的随机实验。
【关键词】随机模拟;投针实验;重复实验
1 引言
蒲丰投针问题是由法国科学家蒲丰(Buffon)在1777年提出的,它是概率中非常有代表性的问题,它是第一个用几何形式表达概率问题的例子,其结论具有很强的理论与实际意义。
蒲丰针问题的解决不仅较典型的反应了集合概率的特征及处理方法,而且还可以由此领略到从“概率土壤”上开出的一朵瑰丽的鲜花——蒙特卡洛(Monte-Carlo)方法。
蒙特卡罗(Monte Carlo)方法,也称计算机模拟方法,是一种基于“随机数”的计算方法,大数定律为近年来发展迅速的随机计算机和随机模拟方法提供了理论基础。
MATLAB是一个适合多学科,具有多种工作平台的功能强大的大型软件。
MATLAB已经成为线性代数、自动控制理论、数理统计、数字信号处理、时间序列分析、动态系统仿真等高级课程的进本教学工具,Matlab随机数发生器的种类丰富且用法简便。
本文介绍了利用随机模拟方法和大数定律的相关理论解决蒲丰投针问题计算π的近似值。
2 有关数学实验的有关基础
定理(贝努力大数定律) 设n μ是n 重贝努力实验中事件A 出现的次数,P 是事件A 每次实验中出现的概率,即P(A)=p,则对任意的
ε>0,有
3 实验
蒲丰投针问题
在平面上画有等距离的一些平行线,平行线间的距离为a(a>0),向平面上随机投一长为l(l<a)的针。
求此针与平行线相交的概率?
解 以x 表示针的中点与最近一条平行线的距离,又以β表
示针与此直线间的交角,见图1.2.易知样本空间Ω满足
0/2,x a ≤≤ 0β≤≤π
由这两式确定x β-平面上的夜歌矩形Ω,这就是样本空间,其面积
为S a
Ω=π/2。
这时针与平行线相交(记为事件A )的充要条件是 sin .
2
l
x β≤ 由这个不等式表示的区域是图1.2中的阴影部分。
lim {|
|}1
n
n p p n
μ→∞
-=
图1.1
图1.2
由于针是向平面任意投掷的,所以由等可能性知这是一个概率的问
题。
由此得
sin 22()=2
A
l
d S l P A a S ββΩ
==
⎰
π。
a ππ 如果l,a 为已知,则以π的值代入上式即可计算得P (A )之值。
反之如果已知P(A)的值,则也可以利用上式去求π,而关于P(A)的值,可以从实验中获得频率去近似它:即投掷掷其中针与平行线相交n
次,则频率n/N 可作为P(A)的估计值,于是由
2()m l P A n ≈=,a π
可得
2ln
.am
≈
π 历史上有一些学者曾亲自做过这个实验,下表记录了他们的实验结果
实验者 年份 针长 投掷次数 相交次数 π的近似值
Wolf 1850 0.8 5000 2532 3.1596
Smith 1855 0.6 3204 1218.5 3.1554
DeMorgan.c 1860 1.0 600 382.5 3.137
Fox 1884 0.75 1030 489 3.1595
Lazzerini 1901 0.83 3408 1808 3.1415929
Reina 1925 0.5419 2520 859 3.1795
历史上有一些学者曾亲自做过这个实验,下表记录了他们的实验结果
可以采用MATLAB 软件进行模拟实验,即用MATLAB 编写程序来进行“蒲丰投针实验”。
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<0.25*a*sin(f);
m=sum(y);
PI=vpa(a*n/(a*m))
实验数据(部分程序截屏见后)
4、结束语
从上述数据分析可知,随着模拟次数的越来越多,PI的值逐渐稳定在π值附近,即越来越趋近于π,故蒲丰投针实验确实可以模拟出π的值。
【参考文献】
茆诗松,程依明,濮晓龙。
概率论与数理统计。
北京:高等教育出
版社2011.
农吉夫。
基于随机模拟实验的参数估计。
广西民族大学数学与计算
机科学学院。
五、附录实验截图。