当前位置:文档之家› 基于MATLAB的布丰投针实验仿真

基于MATLAB的布丰投针实验仿真

系统建模与仿真题目:Buffon实验的仿真
院系: 电子工程学院
专业:信息对抗技术
班级:021231
姓名:***
学号:********
指导老师:***
完成时间:2015年4月
西安电子科技大学
基于MATLAB的投针实验仿真
摘要
在求证圆周率的过程中经过割圆术后,出现的投针试验以求出圆周率,目前利用MATLAB数学建模的仿真实验,运用到计算机中,简化其随机实验的操作量大,运算慢等特点。

不同针距相同实验量运算后得出不同的π,其针距与线间距离相等,所得值接近于π。

目录
摘要 (2)
二、实验内容 (4)
三、建模流程图 (5)
四、程序主要代码 (6)
五、运行结果 (6)
六、结论 (7)
一、实验原理
1777年法国科学家布丰提出的一种计算圆周率的方法——随机投针法,即著名的布丰投针问题。

该投针实验主要有如下三个步骤:(一)取一张白纸,在上面画许多条间距为a的平行线;(二)取一根长度为l(l<a)的针,随机地向画有平行直线的纸上掷n次,观察针与直线相交的次数,记为m;(三)计算针与直线相交的概率。

而布丰本人证明了这个概率是p=2l/(πa),π为圆周率。

二、实验内容
运用MATLAB仿真软件进行求圆周率π的模拟。

1.用GUI设计实验。

2.设取变量n为实验次数,a为相邻两直线间的距离,l为针长,
角Φ为针与直线相交时所呈的夹角,frequency为相交频率,
Pi即为所求圆周率。

3.编写程序代码达到实验目的,求圆周率π。

三、建模流程图
四、程序主要代码
str(handles.edit1,'string'); %取得变量,定义变量,变量初始化
n = str2double(str);
str = get(handles.edit2,'string');
l = str2double(str);
str = get(handles.edit3,'string');
a = str2double(str);
counter = 0; %变量初始化
phi = 0;
frequency = 0;
Pi = 0;
x = unifrnd(0,a/2,1,n);%产生n个(0,a/2)之间均匀分布的随机数,这里a/2是投针的中点到最近的平行线的距离
phi = unifrnd(0,pi,1,n);% 产生n个(0,pi)之间均匀分布的随机数,这里pi是投针与最近平行线的角度
for i=1:n
if x(i)<l*sin(phi(i))/2 % 只要x小于l*sin(phi(i))/2,则针与平行线相交
counter = counter+1;
end
end
frequency = counter/n; % 计算相交的频率,即相交次数比总投针次数
Pi = 2*l/(a*frequency) % 从相交的频率求Pi
五、运行结果显示
六、结论
由于想要达到实验者自己设置投针次数的目的,故而没有设置精度,即精度由系统决定,导致最终实验结果不是很理想,概率性事件,每次实验都会有一些偏差。

没有设置高精度,因此计算速度较为稳定,但是实验次数虽然可以自定,也不能设置得太多,不然电脑也会累的工作不起来,甚至罢工。

每一次实验都是一次提升自己的机会,虽然我不是做的最好的,但是我能保证自己的态度绝对认真。

相关主题