无约束优化.docx
- 文档编号:17492206
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:15
- 大小:56.61KB
无约束优化.docx
《无约束优化.docx》由会员分享,可在线阅读,更多相关《无约束优化.docx(15页珍藏版)》请在冰点文库上搜索。
无约束优化
实验9无约束优化
一、实验目的
1、了解无约束优化的基本算法;
2、掌握Matlab优化工具箱的基本用法;
3、掌握用Matlab求解无约束优化实际问题。
二、实验要求
能够掌握Matlab优化工具箱中fminunc,fminsearch,lsqnonlin,lsqcurvefit的基本用法,能够对控制参数进行设置,能够对不同算法进行选择和比较。
[x,fv,ef.out,grad,hess]=fminunc(@f,x0,opt,P1,P2,…)
[x,fv,ef.out,]=fminsearch(@f,x0,opt,P1,P2,…)
[x,norm,res,ef,out,lam,jac]=lsqnonlin(@F,x0,v1,v2,opt,P1,P2,…)
[x,norm,res,ef,out,lam,jac]=lsqcurvefit(@F,x0,t,y,opt,P1,P2,…)
fminunc为无约束优化提供了大型优化和中型优化算法.由options中的参数LargeScale控制:
LargeScale=’on’(默认值),使用大型算法
LargeScale=’off’,使用中型算法
fminunc为中型优化算法的搜索方向提供了3种算法,由options中的参数HessUpdate控制:
HessUpdate=’bfgs’(默认值),拟牛顿法的BFGS公式;
HessUpdate=’dfp’,拟牛顿法的DFP公式;
HessUpdate=’steepdesc’,最速下降法
fminunc为中型优化算法的步长一维搜索提供了两种算法,由options中参数LineSearchType控制:
LineSearchType=’quadcubic’(缺省值),混合的二次和三次多项式插值;
LineSearchType=’cubicpoly’,三次多项式插
搜索步长的算法选择(lsqnonlin,lsqcurvefit)
LevenbergMarquardt=‘off’(GN法)
LevenbergMarquardt=‘on’(LM法,缺省值)
例
1、编写M-文件fun1.m:
functionf=fun1(x)
f=exp(x
(1))*(4*x
(1)^2+2*x
(2)^2+4*x
(1)*x
(2)+2*x
(2)+1);
2、输入M文件myprg3.m如下:
x0=[-1,1];
x=fminunc('fun1',x0)
y=fun1(x)
三、实验内容
1.求下列函数的极小值点:
2、求解
对
的不同取值如
和
,及不同算法(搜索方向、步长搜索、数值梯度与分析梯度等)的结果进行分析、比较。
3、有一组数据
其中
由下表给出。
现要用这组数据拟合函数
中的参数
,初值可选为
,用GN和LM两种方法求解。
对
作一扰动,即
,
为
内的随机数,观察并分析迭代收敛变慢的情况。
i
yi
i
yi
i
yi
1
0.844
12
0.718
23
0.478
2
0.908
13
0.685
24
0.467
3
0.932
14
0.658
25
0.457
4
0.936
15
0.628
26
0.448
5
0.925
16
0.603
27
0.438
6
0.908
17
0.580
28
0.431
7
0.881
18
0.558
29
0.424
8
0.850
19
0.538
30
0.420
9
0.818
20
0.522
31
0.414
10
0.784
21
0.506
32
0.411
11
0.751
22
0.490
33
0.406
安徽师范大学
数学计算机科学学院实验报告
专业名称数学与应用数学
实验室实验室201
实验课程数学建模
实验名称无约束优化
姓名王强
学号100701134
同组人员无
实验日期2013-5-22
注:
实验报告应包含(实验目的,实验原理,主要仪器设备和材料,实验过程和步骤,实验原始数据记录和处理,实验结果和分析,成绩评定)等七项内容。
具体内容可根据专业特点和实验性质略作调整,页面不够可附页。
一、实验目的
1、了解无约束优化的基本算法;
2、掌握Matlab优化工具箱的基本用法;
3、掌握用Matlab求解无约束优化实际问题。
二、实验原理
1、无约束优化的基本操作步骤
2、Matlab的基本操作步骤
三、主要仪器设备和材料
PC机
四、实验过程和步骤
1、求函数的极小值点
函数:
(1)
1、先建立函数文件:
fun1.m
functionf=fun1(x)
f=x
(1)^2+4*x
(2)^2+9*x(3)^2-2*x
(1)+18*x
(2);
2、解决求极值文件jizhi1.m
x0=[0,0,0];
x=fminsearch('fun1',x0)
y2=fun1(x)
求解结果为:
x=
1.0000-2.25000.0000
y2=-21.2500
通过求偏导运算得:
解得极值刚好为x,
计算黑塞矩阵为:
,因为
故H为正定的,也就是说x是极小值。
(2)
同上述方法求解为:
x=0.50001.0000
y2=-0.7500
计算黑塞矩阵
,其中
,
,
故黑塞矩阵正定,所求值为极小值。
2求解
,不同初值,不同算法(搜索方向)、步长搜索、数值梯度与分析梯度等)的结果分析、比较。
根据求解梯度算法的函数,我们建立不同的matlab文件进行试验。
首先建立函数文件
fun3.m
%用于数值梯度
functionf=fun3(x,a,b)
f=x
(1)^2/a+x
(2)^2/b;
fun4.m
%用于分析梯度
function[f,g]=fun4(x,a,b)
f=x
(1)^2/a+x
(2)^2/b;
ifnargout>1
g
(1)=2*x
(1)/a;g
(2)=2*x
(2)/b;
end
建立主程序
%jizhi3.m
a=2;b=1;x0=[1,1];
%-----------------------数值梯度类
formatshorte
%-----------------------大型算法
'---largescale'
[x,f,ef,out]=fminunc(@fun3,x0,[],a,b)
%----------------------中型算法(2-3次混合插值)
'---case1:
bfg----'%BFGS
opt1=optimset('LargeScale','off')
[x1,v1,exit1,out1]=fminunc('fun3',x0,opt1,a,b);
'---case2:
dfp'%DFP
fopt=optimset(opt1,'HessUpdate','dfp')
[x2,v2,exit2,out2]=fminunc('fun3',x0,fopt,a,b)
'---case3:
steep'%最速下降法
fopt=optimset(opt1,'HessUpdate','steepdesc');
[x3,v3,exit3,out3]=fminunc('fun3',x0,fopt,a,b)
%-----------------------中型算法(3次插值)
'---case4:
bfg1'
opt2=optimset('LargeScale','off','LineSearchType','cubicpoly')
[x4,v4,exit4,out4]=fminunc('fun3',x0,opt2,a,b)
'---case5:
dfp'%DFP
fopt2=optimset(opt2,'HessUpdate','dfp','LineSearchType','cubicpoly')
[x5,v5,exit5,out5]=fminunc('fun3',x0,fopt2,a,b)
'---case6:
steep'%最速下降法
fopt2=optimset(opt2,'HessUpdate','steepdesc','LineSearchType','cubicpoly');
[x6,v6,exit6,out6]=fminunc('fun3',x0,fopt2,a,b)
'+++++resultsofsolutions++++'
solutions=[x1;x2;x3;x4;x5;x6];
funvalues=[v1;v2;v3;v4;v5;v6];
iterations=[out1.funcCount;out2.funcCount;out3.funcCount;out4.funcCount;out5.funcCount;out6.funcCount];
[solutions,funvalues,iterations]
%------------------------分析梯度类
'---case7:
bfg----'%BFGS
opt1=optimset('LargeScale','off','GradObj','on')
[x1,v1,exit1,out1]=fminunc('fun4',x0,opt1,a,b)
'---case8:
dfp'%DFP
fopt=optimset(opt1,'HessUpdate','dfp')
[x2,v2,exit2,out2]=fminunc('fun4',x0,fopt,a,b)
'---case9:
steep'%最速下降法
fopt=optimset(opt1,'HessUpdate','steepdesc');
[x3,v3,exit3,out3]=fminunc('fun4',x0,fopt,a,b)
%-----------------------中型算法(3次插值)
'---case10:
bfg1'
opt2=optimset('LargeScale','off','LineSearchType','cubicpoly','GradObj','on')
[x4,v4,exit4,out4]=fminunc('fun4',x0,opt2,a,b)
'---case11:
dfp'%DFP
fopt2=optimset(opt2,'HessUpdate','dfp','LineSearchType','cubicpoly')
[x5,v5,exit5,out5]=fminunc('fun4',x0,fopt2,a,b)
'---case12:
steep'%最速下降法
fopt2=optimset(opt2,'HessUpdate','steepdesc','LineSearchType','cubicpoly');
[x6,v6,exit6,out6]=fminunc('fun4',x0,fopt2,a,b)
'+++++resultsofsolutions++++'
solutions=[x1;x2;x3;x4;x5;x6];
funvalues=[v1;v2;v3;v4;v5;v6];
iterations=[out1.funcCount;out2.funcCount;out3.funcCount;out4.funcCount;out5.funcCount;out6.funcCount];
[solutions,funvalues,iterations]
改变
初值类似,调整局部代码即可。
3、通过不同方式的拟合,我们设置不同的opt即可,但是注意函数的格式,先建立函数文件:
fun5.m
functionf=fun5(x,t)
f=x
(1)+x
(2)*exp(-x(4)*t)+x(3)*exp(-x(5)*t);
接着建立主程序:
nonlin1.m
i=1:
33;
t=10*(i-1);
x0=[0.5,1.5,-1,0.01,0.02];
y=[10.844120.718230.478
20.908130.685240.467
30.932140.658250.457
40.936150.628260.448
50.925160.603270.438
60.908170.580280.431
70.881180.558290.424
80.850190.538300.420
90.818200.522310.414
100.784210.506320.411
110.751220.490330.406];
y=[y(:
2)',y(:
4)',y(:
6)'];
[x1,norm,res]=lsqcurvefit(@fun5,x0,t,y);
opt=optimset('lsqcurvefit');
opt=optimset(opt,'LevenbergMarquardt','off');
[x2,norm,res]=lsqcurvefit(@fun5,x0,t,y,[],[],opt);
y=y+rand(1,33)-0.5;
[x3,norm,res]=lsqcurvefit(@fun5,x0,t,y);
opt=optimset('lsqcurvefit');
opt=optimset(opt,'LevenbergMarquardt','off');
[x4,norm,res]=lsqcurvefit(@fun5,x0,t,y,[],[],opt);
x=[x1;x2;x3;x4]
x
五、实验原始数据记录和处理
2、
求解得出的结果为:
大规模算法:
x=-1.1428e-0073.2268e-008
f=7.5710e-015
1、数值梯度
算法
步长
极值点(x
(1),x
(2))
最优值
迭代次数n
BFGS
2,3次
-1.1428e-007
3.2268e-008
7.5710e-015
2.1000e+001
DFP
2,3次
-1.8112e-006
3.1254e-007
1.7380e-012
2.1000e+001
steep
2,3次
-7.4506e-009
-1.4901e-008
2.4980e-016
9.0000e+000
BFGS
3次
-1.1428e-007
3.2268e-008
7.5710e-015
2.1000e+001
DFP
3次
-1.8112e-006
3.1254e-007
1.7380e-012
2.1000e+001
steep
3次
-7.4506e-009
-1.4901e-008
2.4980e-016
9.0000e+000
2、分析梯度:
算法
步长
极值点(x
(1),x
(2))
最优值
迭代次数n
BFGS
2,3次
-1.2173e-007
2.4816e-008
8.0249e-015
7.0000e+000
DFP
2,3次
-1.8187e-006
3.0508e-007
1.7469e-012
7.0000e+000
steep
2,3次
0
0
0
3.0000e+000
BFGS
3次
-1.2173e-007
2.4816e-008
8.0249e-015
7.0000e+000
DFP
3次
-1.8187e-006
3.0508e-007
1.7469e-012
7.0000e+000
steep
3次
0
0
0
3.0000e+000
通过上述两个表的对比发现,总体来讲分析梯度算法,运算效率比数值梯度的算法要高效很多,而且在同一种梯度下,随着步长的增加,VBFGS和DFP算法并没有及三少迭代次数,而steep更加受到步长的影响,迭代次数随着步长的增加而减少。
转换初值运算结果为:
数值梯度:
算法
步长
极值点(x
(1),x
(2))
最优值
迭代次数n
BFGS
2,3次
-3.7081e-006
-3.8219e-007
1.6739e-012
1.8000e+001
DFP
2,3次
-4.5174e-008
4.5076e-008
2.2586e-015
2.4000e+001
steep
2,3次
1.0891e-005
-6.7055e-007
1.3628e-011
1.4100e+002
BFGS
3次
-3.7081e-006
-3.8219e-007
1.6739e-012
1.8000e+001
DFP
3次
-4.5174e-008
4.5076e-008
2.2586e-015
2.4000e+001
steep
3次
1.0891e-005
-6.7055e-007
1.3628e-011
1.4100e+002
分析梯度:
算法
步长
极值点(x
(1),x
(2))
最优值
迭代次数n
BFGS
2,3次
-3.7165e-006
-3.8974e-007
1.6866e-012
6.0000e+000
DFP
2,3次
-5.2622e-008
3.7623e-008
1.7232e-015
8.0000e+000
steep
2,3次
1.0898e-005
0
1.3196e-011
4.7000e+001
BFGS
3次
-3.7165e-006
-3.8974e-007
1.6866e-012
6.0000e+000
DFP
3次
-5.2622e-008
3.7623e-008
1.7232e-015
8.0000e+000
steep
3次
1.0898e-005
0
1.3196e-011
4.7000e+001
3、运算的结果为:
LM
0.3754
1.9358
-1.4647
0.0129
0.0221
GN
0.3754
1.9358
-1.4647
0.0129
0.0221
LM
(加入随机误差)
0.4902
31.6019
-31.1530
0.0198
0.0202
GN
(加入随机误差)
0.4902
31.6019
-31.1530
0.0198
0.0202
六、实验结果和分析
1、在求解极值的过程中,适当分析黑塞矩阵是必要的,以便判断出该极值点的性质,是极大还是极小值点。
2、在分析梯度求解问题中,要对原来的函数文件重新设置,建立函数与其导函数的综合文件
3、在数据求解结果中,得出中型算法中steep搜索方法受到步长的影响较大,以及LM和GM拟合结果相当,但是对于分量
受到变化影响较大,其他拟合值较好,而且针对不同参数的设置,对极值的搜索效率也会有影响。
成绩评定:
1、根据实验情况和实验报告质量作出写事性评价
2、评分
综合评分
折合成等级
指导教师签名:
时间:
年月日
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无约束 优化