蒙特卡罗法模拟投针实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MATLAB:蒙特卡罗法解决投针实验

研究物理或数学过程的一种随机模型的计算方法。蒙特-卡罗法是以随机抽样技巧作为工具的一门近代数值分析的学科。蒙特卡罗法的思想提出虽然较早,但系统性的研究实开始于1944年前后。当时由于研制原子弹,需要研究中子在裂变物质中的输运,提出了一些不易用一般数学方法求解的问题。

蒙特卡罗法可以用来求解两类问题。第一类问题称之为概率问题,用直接模拟某种物理过程的方法解决。第二类问题,是所谓定数问题。在解定数问题时,必须把问题化为相适应的能作模拟的概率问题。

投针实验:在两平行线中投针,取针的中点为参考,它到平线的距离为x,而针与平行线的交角为α,针长为l (当然要小于平行线间的距离D啦)

下面就在数学建模必备工具Matlab中写出这个实验过程吧:

D = 1;

L = 0.6;

counter = 0;

n = 10000;

x = unifrnd(0, D/2, 1, n);%在0-D/2的范围内产生的随机数填到1*n的矩阵当中

phi = unifrnd(0, pi, 1, n);

axis([0,pi, 0,D/2]);

for i=1:n

if x(i) < L*sin(phi(i))/2

plot(phi(i), x(i), 'r.');

counter = counter + 1;

hold on;

end

end

fren = counter/n;

pihat = 2*L/(D*fren);

以下是Matlab程序

clear

a=1;% 设置两条平行线之间的距离

l=0.6;% 投针的长度

counter=0;% 针与平行线相交的次数

n=10000000;% 投掷次数

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)

end

end

frequency=counter/n; % 计算相交的频率,即相交次数比总次数

Pi=2*l/(a*frequency) % 从相交的频率总求的pi

%运行结果

>> test

Pi =

3.1416

相关文档
最新文档