本科学生设计性实验报告(样本)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科学生设计性实验报告
项目组长华南虎_学号_007(写全)
成员华北虎华东虎胡戈
专业信息与计算科学专业班级07信本1班实验项目名称_案例分析——蒲丰投针问题
指导教师及职称_曹慧荣_副教授__
开课学期 2013至_2014 学年_一_学期
上课时间2013 年 11 月 14 日
案例分析——蒲丰投针问题
一、摘要
法国科学家蒲丰提出的一种计算圆周率的方法——随机投针法,即著名的蒲丰投针问题。
本实验给出了蒲丰投针实验matlab实现,并且在此基础上给出圆周率matlab的近似计算。
二、实验目的及要求
选择一个典型的问题,进行数学模型的建立及数学理论分析,给出matlab程序的实现。
三、实验仪器设备
计算机4台
四、实验方案设计
(一)原理描述
1.蒲丰投针问题
1777年法国科学家蒲丰提出的一种计算圆周率的方法——随机投针法,即著名的蒲丰投针问题。
这一方法的步骤是:
step1:取一张白纸,在上面画上许多条间距为d的平行线;
step2:取一根长度为l(l<d)的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m;
step3:计算针与直线相交的频率。
18世纪,法国数学家布丰和勒可莱尔提出的“投针问题”,记载于布丰1777年出版的著作中:“在平面上画有一组间距为d的平行线,将一根长度为l(l<d)的针任意掷在这个平面上,球此针与平行线中任一条相交的频率。
”
布丰本人证明了,这个概率是p=2l/(πd) (π为圆周率)。
利用这个公式可以用概率的方法得到圆周率的近似值。
2.流程图
根据以上分析,下面给出计算圆周率的近似值的流程图:
(二)实验过程设计
step1:理解蒲丰投针问题;
step2:给出圆周率近似计算的公式;
step3:利用matlab 模拟蒲丰投针问题。
确定近似计算过程中涉及的变量;两个随机变量的产生方法:给出针的中点到最近平行线的距离d 、针与线相交的角度的产生方法。
step4:给出针与线相交的频率。
step5:估计圆周率的值。
(三)实验观测点、观测指标与假设条件
本实验的主要观测点及观测指标是:针长与平行线相交的次数及频率的计算。
本实验的假设条件:针长小于平行线的距离。
五、实验内容及步骤
(一)实验调试步骤
1、蒲丰投针问题中圆周率π 值的估计
在画有许多间距为 d 的等距平行线的白纸上,随机投掷一根长为 l ( l ≤ d ) 的均匀直针,求针与平行线相交的概率,并计算的 π 值。
设针与平行线的夹角为)0(παα≤≤,针的中心与最近直线的距离为
)2/0(d x x ≤≤,则针与平行线相交的充要条件为αsin 2
l x ≤。
利用几何概率所以针与平行线相交的概率为
2、蒲丰投针问题的matlab 实现
根据以上分析给出蒲丰投针问题的matlab 实现。
在matlab7.0中,建立以下脚本文件
n=100000;% 总的试验次数
l=1; % 针的长度
d=2; % 平行线间的距离
m=0; % 针与线相交次数的初始值
for k = l : n %循环n 次
x = d/2*rand; % 随机投针,针的中点与离最近平行线间的距离
phi = pi*rand; % 随机产生针与平行线间的交角0<=phi<=pi
if x < 0.5*l*sin(phi)
m = m + 1;
end
end
p=m/n;
3、圆周率值的估计
由蒲丰投针问题,给出的相交频率p,估计圆周率的值,在上边的matlab 脚本文件中加入命令
pi_m=2*l/(p*d)
运行,即得结果.
当实验总次数越大时,越接近真值。
N=1000:200:100000;
chang=length(N);
PI=zeros(1,chang);
for j=1:chang
n=N(j);% 总的试验次数
l=1; % 针的长度
d=2; % 平行线间的距离
m=0; % 针与线相交次数的初始值
for k = 1 : n %循环n次
x = d/2*rand; % 随机投针,针的中点与离最近平行线间的距离
phi = pi*rand; % 随机产生针与平行线间的交角0<=phi<=pi
if x < 0.5*l*sin(phi)
m = m + 1;
end
end
p=m/n;
pi_m=2*l/(p*d);
PI(j)=pi_m;
end
t=1:length(PI);
plot(t,pi*ones(size(t)),'r','linewidth',2);
hold on
plot(PI,'*');
hold off
legend('真值','估计值')
(二)实验调试过程中存在的问题及解决方法
1、在实验中存在以下问题
问题1:随机投针,针的中点与离最近平行线间的距离的产生方法。
问题2:随机产生针与平行线间的交角。
问题3:针与线相交次数的累计。
2、解决问题的思路及办法
问题1的解决方法:因为针的中点与离最近平行线间的距离x在区间[0,d/2]上随机取值,并且是均匀地随机取值方法,所以利用matlab
命令 d/2*rand产生区间[0,d/2]上一个均匀随机数。
问题2的解决方法:因为每次投针实验时,针与平行线间的交角是一个[0,pi]的随机角度,所以利用matlab命令 pi*rand产生区间[0,pi]
上一个均匀随机数。
问题3:针与线相交次数的累计的解决方法:利用if语句判断是否针与线相交,若满足则进行累计,不满足时则不累计,进入for循环。
六、结果与讨论
通过蒲丰投针给出了圆周率pi值的估计,并且给出了matlab代码,其中的实验总次数可以更改,当实验总次数越大时给出的圆周率pi值越接近真值。
在仿真过程中,随机产生针与平行线的角度时,由于matlab中角的单位默认是弧度,所以程序中出现了要估算的圆周率pi,这一问题的出现是我们仿真过程中的不足,需要进一步探讨。