Buffon投针实验的理论证明
我们知道,当正多边形的边数无限增多时,它的极限是圆。
所以“圆”这种图形可以代表弯曲得最厉害的小针。
现在假定圆形小针的直径恰好与纸上两条相邻的平行线间的距离相等,那末这个圆形小针投掷下来时,不是和一条直线相交两次,就是和两条相邻的平行线相切。
不管怎样,它的相交次数是2。
因此,当投掷的次数为n时,碰线的次数便是2n。
现在小针的长度只有两条相邻平行线间距离的一半,所以针的长度只有上述圆形小针长度(即圆周长)的。
但是可能碰线的次数是与针的长度成正比的,因此小针的可能碰线的次数k就必须满足下面的比例式:
1:(1/2π) =2n: k
于是就得到π=n/k,也就是
π=投掷总次数/碰线次数
这就是上面“投针实验”的理论根据。
它又叫莆丰氏实验,在概率论中是很出名的,也可以说是近代的“统计试验法”(又叫“蒙特卡罗法”)的滥觞。
蒲丰(Buffon)投针求π
蒲丰(Buffon)投针问题:在平面上画有等距离的一些平行线,平行线间的距离为a(a>0),向平面上随机投一长为l (l<a)的针,针与平行线相交的概率P,结果发现π=2*l/(a*p)。
一、实验目的
蒲丰实验是采用投针来计算π的值,历史上也有许多的学者曾亲自做过这个实验,如下表:
我们也可以来做这个实验,而且希望做更多次,但是投针又比较费时费力,于是,可以采用另一种设计随机实验的方法,随机模拟的办法来模拟蒲丰投针实验。
从而求得π的近似值。
二、实验方法
可以采用MatLAB软件进行模拟实验,即用MATLAB编写程序来进行“蒲丰投针实验”。
1.基本原理:由于针投到纸上的时候,有各种不同的方向和位置(图a),但是,每一次投针时,其位置和方向都可以由两个量唯一确定,那就是针的中点和偏离水平的角度(图b)。
随机投针图
针的某一特定位置
于是,我们可以生成两个n*1随机矩阵,分别设为x和y,x 表示此时针的中点的位置,y表示此时针偏离水平方向的角度。
如图b,当x< 0.5*l*sin(y)的时候,即可认为此时的针与横线相交;只要随机生成n对这样的x和y,就可以模拟n次的投针实验,然后统计满足x< 0.5*l*sin(y)的x的个数,就可以认为这是相交的次数。
然后利用公式求得π值。
2.MATLAB编程
这是名字为P_Buffon的m文件:…………………………………………………………………………function PI=P_Buffon(a,l,n,p) %蒲丰投针实验求π,其中a 为横线间距,l为针的长度,n为投掷次数,p为有效位数
if l>a
error('针的长度不能超过横线间距,请确定l<a');
return;end
x=unifrnd(0,a/2,[n,1]);
f=unifrnd(0,pi,[n,1]);
y=x<0.5*l*sin(f);
m=sum(y) %显示相交次数
PI=vpa(2*l*n/(a*m),p); …………………………………………………………………………
三、实验数据(见附表)
四、数据分析
1)由数据可以看出,当l和a为定值,而次数改变时,相交次数也会改变,相交次数与投掷次数有个近似的线性关系,这个关系就是P,即相交的概率,但是n越大,对结果只是变化减小,n越大,并不会使得结果越准确。
2)由上面的实验数据第二部分可知,当间距和n(投掷次数)不变时,针长越大或是越小,都会越偏离π的真实值,一般来说,a可能在[0.6*l,0.8*l]之间时,会接近真实结果一些。