蒙特卡罗实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蒙特卡罗方法
实验一
实验报告
蒙特卡罗方法实验一实验报告
一、实验目的
1、了解蒙特卡罗方法方法的基本思想;
2、掌握蒙特卡罗方法计算面积、体积的方法;
3、掌握由已知分布的随机抽样方法。
二、实验原理
Monte Carlo 方法,又称统计模拟方法或计算机随机模拟方法,是一种基于“随机数”进行数值模拟的方法,一种采用统计抽样理论近似求解物理或数学问题的方法。
倘若待求量可以表述成某些特征量的期望值、某些事件出现的概率或两者的函数形式,那么可采用蒙特卡罗方法求解。在求解某些特征量的期望值或某些事件出现的概率时,必须构建合符实际的数学模型。例如采用蒙特卡罗方法计算某函数所围面积时,构建的数学模型是构造一已知面积的可均匀抽样区域,在该区域投点,由伯努利定理大数定理可知,进入待求区域投点的频率依概率1收敛于该事件出现的概率(面积之比)。
由已知分布的随机抽样方法指的是由已知分布的总体中抽取简单子样。抽样方法有: 直接抽样方法:离散型分布随机抽样方法、连续型分布直接抽样方法;挑选抽样方法;复合抽样方法;随机抽样一般方法:加抽样方法、减抽样方法、乘抽样方法、乘加抽样方法、乘减抽样方法、对称抽样方法、替换抽样方法、多为分布抽样方法、积分抽样方法;随机抽样其他方法:偏倚抽样方法、近似分布抽样方法、近似-修正抽样方法。
三、实验内容
1、安装所需计算工具(MA TLAB 、fortran 、C++等);
2、编写一伪随机数发生器;(如乘加同余a=1366,c=150889,M=714025、a=9301,c=49297,M=233280;乘同余a=16807,M=232
-1;或采用其它方法)
以下内容选取一个采用自编伪随机数发生器进行计算,其余采用工具软件中自带伪随机数发生器进行计算。
3、求解以下区域的面积、体积:
3.1、给定曲线y =2 – x 2 和曲线y 3 = x 2,曲线的交点为:P 1( – 1,1 )、P 2( 1,1 )。曲线围成平面有限区域,用蒙特卡罗方法计算区域面积;
3.2、计算22
22
11z x y z x y
⎧≥+⎪
⎨≤+--⎪⎩所围体积
其中{(,,)|11,11,02}x y z x y z Ω=-≤≤-≤≤≤≤。
4、对以下已知分布进行随机抽样: 4.1、()()
[]2
3
321,0,12
f x x x x =+
-∈;
4.2、()()
()[]11,1,21E f x f x x E k E =
⋅∈+
其中()()()()()2
123
221111211411ln 212221E x f x E x x x x E k E E E E E ⎧+-⎛⎫=+-+⎪ ⎪⋅⎝⎭⎪
⎨+⎡⎤⎪=-⋅+++-
⎢⎥⎪+⎣⎦⎩
。
四、实验程序及其相关情况
第2题
function [SJS]=suiji(ZHONG) % SJS 产生的随机数
% ZHONG 输入的随机数种子 a=1366;c=150889;M=714025; SJS=mod(ZHONG*a+c,M)/M; 第3.1题
clear; clc;
M=0;%记录投点在所围图形中的个数 N= input('请输入总投点个数:\n'); ksi=0.89656; %用输入的方式 tic;
for i=1:N
ksi=suiji(ksi); x=2*ksi-1; ksi=suiji(ksi); y=2*ksi;
if y<=2-x^2
if y^3>=x^2 M=M+1; end end end toc
MIANJI=M/N*4 clear M N i x y;
计算结果:N =50000时面积为2.1431,计算时间约0.688s 。 第3.2题 clear;
clc;
M=0;%记录投点在所围图形中的个数 N= input('请输入总投点个数:\n'); tic;
for i=1:N
x=2*rand()-1;
y=2*rand()-1;
z=2*rand();
t=x^2+y^2;
s=z^2;
if s>=t
if t<=-s+2*z
M=M+1;
end
end
end
toc
MIANJI=M/N*8
clear M N i x y;
计算结果:N=50000时面积为3.1350,计算时间约0.282s。第4.1题
clear;
clc;
M = input('输入所需产生随机变量的个数:\n');
x = zeros(M,1);
tic;
for i=1:M
if(rand()<=0.5)
x(i) = max(rand(),rand())
x(i) = max(x(i),rand());
x(i) = max(x(i),rand());
else
x(i) = min(rand(),rand());
x(i) = min(x(i),rand());
end
end
toc
clear M;
第4.2题
clear;
clc;
E = input('输入入射光子的能量(单位keV):\n');
E=E/511;
%计算系数
KE=(1-2*(E+1)/(E^2))*log(2*E+1)+0.5+4/E-1/(2*(2*E+1)^2); p1=(E/(2*E+1))^2/KE;
p2=p1+(2/E+2*E/(2*E+1)^2)/KE;
p3=p1+p2+(1-2*(E+1)/(E^2))*log(2*E+1)/KE;