布丰投针实验模拟
- 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对本次模拟实验做了可视化窗口,如下图所示:
使用过程中发现,其计算速度有进一步提高。但是有较大的偶然性,根据随机数产生的不同,计算速度会有明显的差异。