用蒙特卡洛方法估计积分方法及matlab编程实现Word文档下载推荐.docx
《用蒙特卡洛方法估计积分方法及matlab编程实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用蒙特卡洛方法估计积分方法及matlab编程实现Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
改写成
的形式,(其中为
一随机变量X的概率密度函数,且
的支持域
),
);
令Y=h(X),则积分S=E(Y);
利用matlab软件,编程产生随机变量X的随机数,在由
,得到随机变量Y的随机数,求出样本均值,以此估计积分值。
积分
的求法与上述方法类似,在此不赘述。
概率密度函数的选取:
一重积分,由于要求
,为使方法普遍适用,考虑到标准正态分布概率密度函数
支持域为
,故选用
。
类似的,二重积分选用
,支持域为
估计评价:
进行重复试验,通过计算样本均值以评价估计的无偏性;
通过计算均方误(针对第1类题,积得出)或样本方差(针对第2类题,积不出)以评价估计结果的精度。
程序设计:
依据问题分四类:
第一类一重积分;
第一类二重积分;
第二类一重积分,第二类二重积分,相应程序设计成四类。
为了使程序具有一般性以及方便以后使用:
一重积分,程序保存为一个.m文本,被积函数,积分区间均采用键盘输入;
二重积分,程序主体保存为一个.m文本,被积函数键盘输入,示性函数用function语句构造,求不同区域二重积分,只需改变function函数内容。
编程完整解决用蒙特卡洛方法估计一重、二重积分值问题。
程序代码及运行结果:
第一类一重积分程序代码:
%%%构造示性函数
functionI=I1(x,a,b)
ifx>
=a&
&
x<
=b
I=1;
else
I=0;
end
%保存为I1.m
%%%%%%%%%%%%%%%%
%%第一类一重积分,程序主体:
%保存为f11.m
functionoutf11=f11()
g1=input('
输入一元被积函数如x.*sin(x):
'
'
s'
)%输入被积函数
g1=inline(g1);
a=input('
输入积分下界a:
%输入积分上下限
b=input('
输入积分上界b:
Real=input('
积分真值:
%输入积分真值
fprintf('
输入样本容量10^V1--10^V2:
\r'
)
V=zeros(1,2);
V
(1)=input('
V1:
%输入样本容量
V
(2)=input('
V2:
form=V
(1):
V
(2)%样本容量10^m1--10^m2
n=10^m
forj=1:
10
x=randn(1,n);
fori=1:
n
t1(i)=I1(x(i),a,b);
%示性及求和向量
y1=g1(x)*((pi*2)^0.5).*exp(x.^2/2);
Y1(j)=y1*t1'
/n;
%单次实验样本均值
t=ones(1,10);
EY=Y1*t'
/10;
%十次均值
D=abs(EY-Real);
%绝对误差
RD=D/Real;
d=0;
d=d+(Y1(i)-Real)^2;
d=d/(10-1);
EY1(m-V
(1)+1)=EY;
%样本容量为10^m时的样本均值
D1(m-V
(1)+1)=D;
RD1(m-V
(1)+1)=RD;
MSE1(m-V
(1)+1)=d;
%方差
Real,EY1,D1,RD1,MSE1
outf11=[EY1;
D1;
RD1;
MSE1];
%存放样本数字特征
运行结果:
%估计积分
,积分真值为1
m=f11
x.*sin(x)
g1=
pi/2
1
5
n=
10
100
1000
10000
100000
Real=
1
EY1=
1.26351.00881.00661.01091.0018
D1=
0.26350.00880.00660.01090.0018
RD1=
MSE1=
0.64390.02050.00280.00060.0001
m=
0.64390.02050.00280.00060.0001
真值为0.8862
M=f11
exp(-x.^2)
+inf
pi^0.5/2%0.8862
4
0.8862
0.93330.90770.88730.8871
0.04700.02150.00100.0009
0.05310.02430.00120.0010
0.19270.01120.00160.0000
M=
第一类二重积分程序代码:
%%%构造示性函数,求不同区域上积分只需更改示性函数
functionI=I2(x,y)
ifx^2+y^2<
=1
%保存为I2.m
%第一类二重积分程序主体
%保存为f12.m
functionoutf12=f12()
g2=input('
输入二元被积函数如exp(x.^2+y.^2):
g2=inline(g2,'
x'
y'
输入样本容量10^V1*10^V1--10^V2*10^V2:
y=randn(1,n);
t2(i)=I2(x(i),y(i));
y2=g2(x,y)*(2*pi).*exp((x.^2+y.^2)/2);
Y2(j)=y2*t2'
EY=Y2*t'
d=d+(Y2(i)-Real)^2;
EY2(m-V
(1)+1)=EY;
D2(m-V
(1)+1)=D;
RD2(m-V
(1)+1)=RD;
MSE2(m-V
(1)+1)=d;
Real,EY2,D2,RD2,MSE2
outf12=[EY2;
D2;
RD2;
MSE2];
,真值为pi*(exp
(1)-1)%5.3981
m=f12
exp(x.^2+y.^2)
g2=
pi*(exp
(1)-1)%5.3981
5.3981
EY2=
4.77025.12505.43175.4041
D2=
0.62790.27320.03350.0060
RD2=
0.11630.05060.00620.0011
MSE2=
3.89650.55640.02470.0017
m=
3.89650.55640.02470.0017
第二类一重积分程序代码:
%第二类一重积分程序主体
%程序保存为f21.m
functionoutf21=f21()
输入一元被积函数如exp(x.^2):
d=d+(Y1(i)-EY)^2;
EY1,MSE1
outf21=[EY1;
%%%%程序保存为f21.m
m=f21
exp(x.^2)
2.07821.65831.50291.4590
0.43150.08890.00570.0008
%用matlab指令求积分
f=inline('
exp(x.^2)'
f=
Inlinefunction:
f(x)=exp(x.^2)
>
S=quadl(f,0,1)
S=
1.4627
第二类二重积分程序代码:
%第二类二重积分函数主体
%,程序保存为f22.m
functionoutf22=f22()
输入二元被积函数如1./(1+x.^4+y.^4).^0.5:
d=d+(Y2(i)-EY)^2;
EY2,MSE2
outf22=[EY2;
%第二类二重积分,程序保存为f22.m
%估计积分
m=f22
1./(1+x.^4+y.^4).^0.5
3.07592.96992.85662.8269
1.32670.09000.00600.0014
1.32670.09000.00600.0014
实验结果整理:
第一类一重积分:
估计积分
积分真值:
1积分估计值:
1.0018
样本容量:
10100100010000100000
样本均值:
1.26351.00881.00661.01091.0018
绝对误差:
0.26350.00880.00660.01090.0018
相对误差:
均方误差:
估计积分
0.8862积分估计值:
0.8871
10100100010000
0.93330.90770.88730.8871
0.04700.02150.00100.0009
0.05310.02430.00120.0010
0.19270.01120.00160.0000
第一类二重积分:
5.3981积分估计值:
5.4041
4.77025.12505.43175.4041
0.11630.05060.00620.0011
第二类一重积分:
积分估计值:
1.4590
2.07821.65831.50291.4590
样本方差:
0.43150.08890.00570.0008
用matlab指令求得积分结果1.4627
第二类二重积分:
2.8269
3.07592.96992.85662.8269
实验结果分析:
从第一类积分看,以估计积分
为例:
随着样本容量的增大,样本均值有接近积分真值的趋势,绝对误差、相对误差、均方误差呈减小趋势;
随着样本容量的增大,样本均值有接近积分真值的趋势,说明估计具有无偏性;
绝对误差、相对误差、均方误差呈减小趋势,说明增大样本容量能提高估计精度;
验证了蒙特卡洛方法估计积分值的可行性,为后续估计第二类积分提供了参考。
从第二类积分看,以估计积分
由于积分真值未知,无法直接比较估计值与积分值值;
但随样本容量增大,样本方差减小,间接反映了估计精度的提高。
蒙特卡洛方法估计值1.4590相比用matlab指令求得的积分结果1.4627,绝对偏差0.0038,相对偏差0.0025。
蒙特卡洛方法估计值与用matlab指令求得的积分结果相互验证。
总结与讨论:
蒙特卡洛方法是基于随机数的一种统计方法。
蒙特卡洛方法估计积分值,总的思想是将积分改写为某个随机变量的数学期望,借助相应的随机数,利用样本均值估计数学期望,从而估计相应的积分值。
为使方法具有一般性,概率密度函数一重积分选择了
,二重积分选用
程序设计方面,本着使程序具有一般性以及方便以后使用的原则,依据问题分四类:
第二类一重积分,第二类二重积分,相应程序设计成四类,并存储为.m文件,用蒙特卡洛方法估计积分值,一重积分只需调用相应程序即可;
二重积分只需依据积分域修改相应示性函数即可调用相应函数求解。
极大方便了同类问题求解。
实验运行结果表明本方案可操作性良好。
遗留问题:
本次实验未设计选用不同概率密度函数,估计精度的比较,留有不同条件下选用何种概率密度函数估计效果最佳?
如何缩短程序运行时间?
如何对程序进行封装?
如何更好评价第二类积分估计值无偏性以及精度?
等问题。
姓名:
王宏辉
班级:
材料43
学号:
2140201060
感谢下载!
欢迎您的下载,资料仅供参考