收藏 分销(赏)

用蒙特卡洛方法估计积分方法与matlab编程实现.doc

上传人:二*** 文档编号:4591072 上传时间:2024-09-30 格式:DOC 页数:32 大小:245KB 下载积分:5 金币
下载 相关 举报
用蒙特卡洛方法估计积分方法与matlab编程实现.doc_第1页
第1页 / 共32页
本文档共32页,全文阅读请下载到手机保存,查看更方便
资源描述
(完整word版)用蒙特卡洛方法估计积分方法与matlab编程实现 用蒙特卡洛方法估计积分 方法及matlab编程实现 专业班级: 材料43 学生姓名: 王宏辉 学 号: 2140201060 指导教师:李耀武 完成时间: 2016年6月8日 - 用蒙特卡洛方法估计积分 方法及matlab编程实现 实验内容: 1用蒙特卡洛方法估计积分 ,和的值,并将估计值与真值进行比较。 2用蒙特卡洛方法估计积分 和的值,并对误差进行估计。 要求: (1)针对要估计的积分选择适当的概率分布设计蒙特卡洛方法; (2)利用计算机产生所选分布的随机数以估计积分值; (3)进行重复试验,通过计算样本均值以评价估计的无偏性;通过计算均方误差(针 对第1类题)或样本方差(针对第2类题)以评价估计结果的精度。 目的: (1)能通过 MATLAB 或其他数学软件了解随机变量的概率密度、分布函数 及其期望、方差、协方差等; (2) 熟练使用 MATLAB 对样本进行基本统计,从而获取数据的基本信息; (3) 能用 MATLAB 熟练进行样本的一元回归分析。 实验原理: 蒙特卡洛方法估计积分值,总的思想是将积分改写为某个随机变量的数学期望,借助相应的随机数,利用样本均值估计数学期望,从而估计相应的积分值。 具体操作如下: 一般地,积分改写成的形式,(其中为一随机变量X的概率密度函数,且的支持域),);令Y=h(X),则积分S=E(Y);利用matlab软件,编程产生随机变量X的随机数,在由,得到随机变量Y的随机数,求出样本均值,以此估计积分值。 积分的求法与上述方法类似,在此不赘述。 概率密度函数的选取: 一重积分,由于要求的支持域,为使方法普遍适用,考虑到标准正态分布概率密度函数支持域为,故选用。 类似的,二重积分选用,支持域为。 估计评价: 进行重复试验,通过计算样本均值以评价估计的无偏性;通过计算均方误(针对第1类题,积得出)或样本方差(针对第2类题,积不出)以评价估计结果的精度。 程序设计: 依据问题分四类:第一类一重积分;第一类二重积分;第二类一重积分,第二类二重积分,相应程序设计成四类。 为了使程序具有一般性以及方便以后使用:一重积分,程序保存为一个.m文本,被积函数,积分区间均采用键盘输入;二重积分,程序主体保存为一个.m文本,被积函数键盘输入,示性函数用function 语句构造,求不同区域二重积分,只需改变function 函数内容。 编程完整解决用蒙特卡洛方法估计一重、二重积分值问题。 程序代码及运行结果: 第一类一重积分程序代码: %%%构造示性函数 function I=I1(x,a,b) if x>=a&&x<=b I=1; else I=0; end %保存为I1.m %%%%%%%%%%%%%%%% %%第一类一重积分,程序主体: %保存为f11.m function outf11=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:'); for m=V(1):V(2)%样本容量10^m1--10^m2 n=10^m for j=1:10 x=randn(1,n); for i=1:n t1(i)=I1(x(i),a,b);%示性及求和向量 end y1=g1(x)*((pi*2)^0.5).*exp(x.^2/2); Y1(j)=y1*t1'/n; %单次实验样本均值 end t=ones(1,10); EY=Y1*t'/10; %十次均值 D=abs(EY-Real); %绝对误差 RD=D/Real; %绝对误差 d=0; for i=1:10 d=d+(Y1(i)-Real)^2; end 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; %方差 end Real,EY1,D1,RD1,MSE1 outf11=[EY1;D1;RD1;MSE1]; %存放样本数字特征 %保存为f11.m 运行结果: %估计积分 ,积分真值为1 m=f11 输入一元被积函数如x.*sin(x):x.*sin(x) g1 = x.*sin(x) 输入积分下界a:0 输入积分上界b:pi/2 积分真值:1 输入样本容量 10^V1--10^V2: V1:1 V2:5 n = 10 n = 100 n = 1000 n = 10000 n = 100000 Real = 1 EY1 = 1.2635 1.0088 1.0066 1.0109 1.0018 D1 = 0.2635 0.0088 0.0066 0.0109 0.0018 RD1 = 0.2635 0.0088 0.0066 0.0109 0.0018 MSE1 = 0.6439 0.0205 0.0028 0.0006 0.0001 m= 1.2635 1.0088 1.0066 1.0109 1.0018 0.2635 0.0088 0.0066 0.0109 0.0018 0.2635 0.0088 0.0066 0.0109 0.0018 0.6439 0.0205 0.0028 0.0006 0.0001 %估计积分 真值为0.8862 M=f11 输入一元被积函数如x.*sin(x):exp(-x.^2) g1 = exp(-x.^2) 输入积分下界a:0 输入积分上界b:+inf 积分真值:pi^0.5/2%0.8862 输入样本容量 10^V1--10^V2: V1:1 V2:4 n = 10 n = 100 n = 1000 n = 10000 Real = 0.8862 EY1 = 0.9333 0.9077 0.8873 0.8871 D1 = 0.0470 0.0215 0.0010 0.0009 RD1 = 0.0531 0.0243 0.0012 0.0010 MSE1 = 0.1927 0.0112 0.0016 0.0000 M = 0.9333 0.9077 0.8873 0.8871 0.0470 0.0215 0.0010 0.0009 0.0531 0.0243 0.0012 0.0010 0.1927 0.0112 0.0016 0.0000 第一类二重积分程序代码: %%%构造示性函数,求不同区域上积分只需更改示性函数 function I=I2(x,y) if x^2+y^2<=1 I=1; else I=0; end %保存为I2.m %第一类二重积分程序主体 %保存为f12.m function outf12=f12() g2=input('输入二元被积函数如exp(x.^2+y.^2):','s')%输入被积函数 g2=inline(g2,'x','y'); Real=input('积分真值:');%输入积分真值 fprintf('输入样本容量 10^V1*10^V1--10^V2*10^V2:\r') V=zeros(1,2); V(1)=input('V1:');%输入样本容量 V(2)=input('V2:'); for m=V(1):V(2)%样本容量10^m1--10^m2 n=10^m for j=1:10 x=randn(1,n); y=randn(1,n); for i=1:n t2(i)=I2(x(i),y(i));%示性及求和向量 end y2=g2(x,y)*(2*pi).*exp((x.^2+y.^2)/2); Y2(j)=y2*t2'/n; %单次实验样本均值 end t=ones(1,10); EY=Y2*t'/10; %十次均值 D=abs(EY-Real); %绝对误差 RD=D/Real; %绝对误差 d=0; for i=1:10 d=d+(Y2(i)-Real)^2; end d=d/(10-1); EY2(m-V(1)+1)=EY; %样本容量为10^m时的样本均值 D2(m-V(1)+1)=D; %绝对误差 RD2(m-V(1)+1)=RD; %绝对误差 MSE2(m-V(1)+1)=d; %方差 end Real,EY2,D2,RD2,MSE2 outf12=[EY2;D2;RD2;MSE2]; %存放样本数字特征 %保存为f12.m 运行结果: %估计积分 ,真值为pi*(exp(1)-1)%5.3981 m=f12 输入二元被积函数如exp(x.^2+y.^2):exp(x.^2+y.^2) g2 = exp(x.^2+y.^2) 积分真值:pi*(exp(1)-1)%5.3981 输入样本容量 10^V1*10^V1--10^V2*10^V2: V1:1 V2:4 n = 10 n = 100 n = 1000 n = 10000 Real = 5.3981 EY2 = 4.7702 5.1250 5.4317 5.4041 D2 = 0.6279 0.2732 0.0335 0.0060 RD2 = 0.1163 0.0506 0.0062 0.0011 MSE2 = 3.8965 0.5564 0.0247 0.0017 m = 4.7702 5.1250 5.4317 5.4041 0.6279 0.2732 0.0335 0.0060 0.1163 0.0506 0.0062 0.0011 3.8965 0.5564 0.0247 0.0017 第二类一重积分程序代码: %%%构造示性函数 function I=I1(x,a,b) if x>=a&&x<=b I=1; else I=0; end %保存为I1.m %第二类一重积分程序主体 %程序保存为f21.m function outf21=f21() g1=input('输入一元被积函数如exp(x.^2):','s')%输入被积函数 g1=inline(g1); a=input('输入积分下界a:');%输入积分上下限 b=input('输入积分上界b:'); fprintf('输入样本容量 10^V1--10^V2:\r') V=zeros(1,2); V(1)=input('V1:');%输入样本容量 V(2)=input('V2:'); for m=V(1):V(2)%样本容量10^m1--10^m2 n=10^m for j=1:10 x=randn(1,n); for i=1:n t1(i)=I1(x(i),a,b);%示性及求和向量 end y1=g1(x)*((pi*2)^0.5).*exp(x.^2/2); Y1(j)=y1*t1'/n; %单次实验样本均值 end t=ones(1,10); EY=Y1*t'/10; %十次均值 d=0; for i=1:10 d=d+(Y1(i)-EY)^2; end d=d/(10-1); EY1(m-V(1)+1)=EY; %样本容量为10^m时的样本均值 MSE1(m-V(1)+1)=d; %方差 end EY1,MSE1 outf21=[EY1;MSE1]; %存放样本数字特征 %%%%程序保存为f21.m 运行结果: %估计积分 m=f21 输入一元被积函数如exp(x.^2):exp(x.^2) g1 = exp(x.^2) 输入积分下界a:0 输入积分上界b:1 输入样本容量 10^V1--10^V2: V1:1 V2:4 n = 10 n = 100 n = 1000 n = 10000 EY1 = 2.0782 1.6583 1.5029 1.4590 MSE1 = 0.4315 0.0889 0.0057 0.0008 m = 2.0782 1.6583 1.5029 1.4590 0.4315 0.0889 0.0057 0.0008 %用matlab 指令求积分 f=inline('exp(x.^2)') f = Inline function: f(x) = exp(x.^2) >> S=quadl(f,0,1) S = 1.4627第二类二重积分程序代码: %%%构造示性函数,求不同区域上积分只需更改示性函数 function I=I2(x,y) if x^2+y^2<=1 I=1; else I=0; end %保存为I2.m %第二类二重积分函数主体 %,程序保存为f22.m function outf22=f22() g2=input('输入二元被积函数如1./(1+x.^4+y.^4).^0.5:','s')%输入被积函数 g2=inline(g2,'x','y'); fprintf('输入样本容量 10^V1*10^V1--10^V2*10^V2:\r') V=zeros(1,2); V(1)=input('V1:');%输入样本容量 V(2)=input('V2:'); for m=V(1):V(2)%样本容量10^m1--10^m2 n=10^m for j=1:10 x=randn(1,n); y=randn(1,n); for i=1:n t2(i)=I2(x(i),y(i));%示性及求和向量 end y2=g2(x,y)*(2*pi).*exp((x.^2+y.^2)/2); Y2(j)=y2*t2'/n; %单次实验样本均值 end t=ones(1,10); EY=Y2*t'/10; %十次均值 d=0; for i=1:10 d=d+(Y2(i)-EY)^2; end d=d/(10-1); EY2(m-V(1)+1)=EY; %样本容量为10^m时的样本均值 MSE2(m-V(1)+1)=d; %方差 end EY2,MSE2 outf22=[EY2;MSE2]; %存放样本数字特征 %第二类二重积分,程序保存为f22.m 运行结果: %估计积分 m=f22 输入二元被积函数如1./(1+x.^4+y.^4).^0.5:1./(1+x.^4+y.^4).^0.5 g2 = 1./(1+x.^4+y.^4).^0.5 输入样本容量 10^V1*10^V1--10^V2*10^V2: V1:1 V2:4 n = 10 n = 100 n = 1000 n = 10000 EY2 = 3.0759 2.9699 2.8566 2.8269 MSE2 = 1.3267 0.0900 0.0060 0.0014 m = 3.0759 2.9699 2.8566 2.8269 1.3267 0.0900 0.0060 0.0014 实验结果整理: 第一类一重积分: 估计积分 积分真值:1 积分估计值:1.0018 样本容量:10 100 1000 10000 100000 样本均值:1.2635 1.0088 1.0066 1.0109 1.0018 绝对误差:0.2635 0.0088 0.0066 0.0109 0.0018 相对误差:0.2635 0.0088 0.0066 0.0109 0.0018 均方误差:0.6439 0.0205 0.0028 0.0006 0.0001 估计积分 积分真值:0.8862 积分估计值:0.8871 样本容量:10 100 1000 10000 样本均值:0.9333 0.9077 0.8873 0.8871 绝对误差:0.0470 0.0215 0.0010 0.0009 相对误差:0.0531 0.0243 0.0012 0.0010 均方误差:0.1927 0.0112 0.0016 0.0000 第一类二重积分: 估计积分 积分真值:5.3981 积分估计值: 5.4041 样本容量:10 100 1000 10000 样本均值:4.7702 5.1250 5.4317 5.4041 绝对误差: 0.6279 0.2732 0.0335 0.0060 相对误差:0.1163 0.0506 0.0062 0.0011 均方误差:3.8965 0.5564 0.0247 0.0017 第二类一重积分: 估计积分 积分估计值:1.4590 样本容量:10 100 1000 10000 样本均值:2.0782 1.6583 1.5029 1.4590 样本方差:0.4315 0.0889 0.0057 0.0008 用matlab 指令求得积分结果1.4627 第二类二重积分: 估计积分 积分估计值:2.8269 样本容量:10 100 1000 10000 样本均值:3.0759 2.9699 2.8566 2.8269 样本方差:1.3267 0.0900 0.0060 0.0014 实验结果分析: 从第一类积分看,以估计积分 为例: 积分真值:1 积分估计值:1.0018 样本容量:10 100 1000 10000 100000 样本均值:1.2635 1.0088 1.0066 1.0109 1.0018 绝对误差:0.2635 0.0088 0.0066 0.0109 0.0018 相对误差:0.2635 0.0088 0.0066 0.0109 0.0018 均方误差:0.6439 0.0205 0.0028 0.0006 0.0001 随着样本容量的增大,样本均值有接近积分真值的趋势,绝对误差、相对误差、均方误差呈减小趋势;随着样本容量的增大,样本均值有接近积分真值的趋势,说明估计具有无偏性;绝对误差、相对误差、均方误差呈减小趋势,说明增大样本容量能提高估计精度;验证了蒙特卡洛方法估计积分值的可行性,为后续估计第二类积分提供了参考。 从第二类积分看,以估计积分 为例: 积分估计值:1.4590 样本容量:10 100 1000 10000 样本均值:2.0782 1.6583 1.5029 1.4590 样本方差:0.4315 0.0889 0.0057 0.0008 用matlab 指令求得积分结果1.4627 由于积分真值未知,无法直接比较估计值与积分值值;但随样本容量增大,样本方差减小,间接反映了估计精度的提高。蒙特卡洛方法估计值1.4590相比用matlab 指令求得的积分结果1.4627,绝对偏差0.0038,相对偏差0.0025。蒙特卡洛方法估计值与用matlab 指令求得的积分结果相互验证。 总结与讨论: 蒙特卡洛方法是基于随机数的一种统计方法。 蒙特卡洛方法估计积分值,总的思想是将积分改写为某个随机变量的数学期望,借助相应的随机数,利用样本均值估计数学期望,从而估计相应的积分值。 为使方法具有一般性,概率密度函数一重积分选择了,二重积分选用。 程序设计方面,本着使程序具有一般性以及方便以后使用的原则,依据问题分四类:第一类一重积分;第一类二重积分;第二类一重积分,第二类二重积分,相应程序设计成四类,并存储为.m文件,用蒙特卡洛方法估计积分值,一重积分只需调用相应程序即可;二重积分只需依据积分域修改相应示性函数即可调用相应函数求解。 极大方便了同类问题求解。 实验运行结果表明本方案可操作性良好。 遗留问题:本次实验未设计选用不同概率密度函数,估计精度的比较,留有不同条件下选用何种概率密度函数估计效果最佳?如何缩短程序运行时间?如何对程序进行封装?如何更好评价第二类积分估计值无偏性以及精度?等问题。 姓名:王宏辉 班级:材料43 学号:2140201060
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服