数学实验七.docx
- 文档编号:22782580
- 上传时间:2023-04-27
- 格式:DOCX
- 页数:15
- 大小:307.14KB
数学实验七.docx
《数学实验七.docx》由会员分享,可在线阅读,更多相关《数学实验七.docx(15页珍藏版)》请在冰豆网上搜索。
数学实验七
数学实验七—无约束优化
土木工程系结71陈浩宇2007010544
[实验目的]
1.掌握Matlab优化工具箱的基本用法,对不同算法进行初步分析、比较。
2.练习用无约束优化方法建立和求解实际问题的模型(包括非线性最小二乘拟合)
[实验内容]
2.
(1)取不同的初值计算下列非线性规划,尽可能求出所有局部极小点,进而找出全局极小点,并对不同算法(搜索方向、搜索步长、数值梯度与分析梯度等)的结果进行分析、比较。
解:
首先用如下的函数绘制出z函数的图像(见图1),以进行初值的大致确定。
%第七次实验,第一题
clc
clear
%画出函数简图
x1=-100:
5:
100;
x2=-100:
5:
100;
[X1,X2]=meshgrid(x1,x2);
Z=((X1.*X2).^2.*(1-X1).^2).*(1-X1-X2.*(1-X1).^5).^2;
surfc(X1,X2,Z)
gridon
axis([-100100-100100-1013e35])
图1函数简图
首先,采用fminsearch函数的缺省算法对于不同的初值所求出的极值进行分析。
采用如下程序进行,计算结果见表1。
clc
clear
formatshorte
x0=[100,1];
表1不同初值优化结果
X0
(1)
X0
(2)
极值处x1值
极值处x2值
函数极值
迭代次数
函数调用次数
100
100
1
4.6219e+001
0
114
256
100
10
0
1.1422e+001
0
199
401
10
100
1
1.1011e+002
3.8195e-056
91
163
10
10
1.5450e+000
1.1332e+001
4.4294e-018
64
122
-100
-100
1
-1.2340e+002
0
106
191
-100
-10
1
-1.2340e+001
0
80
144
-10
-100
1
-1.1984e+002
0
84
199
-10
-10
1
-1.2234e+001
0
80
185
-10
0
-10
0
0
199
401
通过比较可以得出此函数存在多个极值点,当x1=1,x1=0,x2=0其都为函数的最小值,其最小值为0。
即此函数存在三条最小值的等值线。
由于函数在x1,x2值较大时会出现剧烈增长,故缩小函数的取值范围,画出函数的大致图像可以更加清楚地表明出等值线的存在(如图2)。
并且,近似观察函数的图像,还可发现,函数沿极值线还存在着十分平缓的区域,这对于极值的迭代求出设置了较大的障碍。
因为函数迭代中可能会因为梯度函数的差异过小而提前结束迭代求值。
图2函数极值等值线
根据这一情况,画出函数的梯度简图(如图3),以便进一步对函数的性质探索。
图3函数梯度图(左图为g1,有图为g2)
根据,函数的梯度图像可以分析,其在x=1附近存在一片梯度差异较小的区域,不利于使用梯度下降法来对于其极值点进行判断。
而其存在一个较为明显的分水岭,即大致x1=0.3左右,其梯度函数存在一个明显的高峰,因而,当计算初值取在X1<0.3范围内时其容易跌落至X1=0的极值,而当X1>0.3时其容易跌落到X1=1值,但是,因为X=1附近的缓和梯度区的存在,对于X1>0.3情况很难得到足够的精确极值。
故而,初始点的选择对于此函数极值的求取以及所得极值的精度有着较大的影响。
依据以上的梯度分析,选择初始点为x0=(-2.5,-5)采用如下程序进行算法收敛性的比对。
同时在计算时考虑到函数的性质不利于极值求解,将误差限人为设高,对比结果见表2。
clc
clear
formatshorte
x0=[-5,-10];
'--case1:
BFGS,hybrid2,3poly--'
opt1=optimset('LargeScale','off','MaxFunEvals',1000,'TolX',1e-18,'TolFun',1e-18,'HessUpdate','bfgs');
[x1,v1,exit1,out1]=fminunc('hw71withoutGfun',x0,opt1)
pause
'--case2:
DFP,hybrid2,3poly--'
fopt=optimset(opt1,'HessUpdate','dfp');
[x2,v2,exit2,out2]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case3:
Steep,hybrid2,3poly--'
fopt=optimset(opt1,'HessUpdate','steepdesc');
[x3,v3,exit3,out3]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case4:
BFGS,hybrid3poly--'
opt2=optimset(opt1,'LineSearchType','cubicpoly');
[x4,v4,exit4,out4]=fminunc('hw71withoutGfun',x0,opt2)
pause
'--case5:
DFP,hybrid3poly--'
fopt=optimset(opt2,'HessUpdate','dfp');
[x5,v5,exit5,out5]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case6:
Steep,hybrid3poly--'
fopt=optimset(opt2,'HessUpdate','steepdesc');
[x6,v6,exit6,out6]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case7:
BFGS,hybrid2,3poly--'
opt3=optimset(opt1,'GradObj','on');
[x7,v7,exit7,out7]=fminunc('hw71withoutGfun',x0,opt3)
pause
'--case8:
DFP,hybrid2,3poly--'
fopt=optimset(opt3,'HessUpdate','dfp');
[x8,v8,exit8,out8]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case9:
Steep,hybrid2,3poly--'
fopt=optimset(opt3,'HessUpdate','steepdesc');
[x9,v9,exit9,out9]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case10:
BFGS,hybrid3poly--'
opt4=optimset(opt3,'LineSearchType','cubicpoly');
[x10,v10,exit10,out10]=fminunc('hw71withoutGfun',x0,opt2)
pause
'--case11:
DFP,hybrid3poly--'
fopt=optimset(opt4,'HessUpdate','dfp');
[x11,v11,exit11,out11]=fminunc('hw71withoutGfun',x0,fopt)
pause
'--case12:
Steep,hybrid3poly--'
fopt=optimset(opt4,'HessUpdate','steepdesc');
[x12,v12,exit12,out12]=fminunc('hw71withoutGfun',x0,fopt)
Pause
'++++resultofsolutions++++'
solutions=[x1;x2;x3;x4;x5;x6;x7;x8;x9;x10;x11;x12];
funvalues=[v1;v2;v3;v4;v5;v6;v7;v8;v9;v10;v11;v12];
iterations=[out1.funcCount;out2.funcCount;out3.funcCount;out4.funcCount;out5.funcCount;out6.funcCount;out7.funcCount;out8.funcCount;out9.funcCount;out10.funcCount;out11.funcCount;out12.funcCount];
[solutions,funvalues,iterations]
其中,函数的定义程序如下:
function[f,g]=hw71withoutGfun(x)
f=(x
(1)*x
(2))^2*(1-x
(1))^2*(1-x
(1)-x
(2)*(1-x
(1))^5)^2;
ifnargout>1
g
(1)=2*(x
(1)*x
(2))*x
(2)*(1-x
(1))^2*(1-x
(1)-x
(2)*(1-x
(1))^5)^2+(x
(1)*x
(2))^2*(-2)*(1-x
(1))*(1-x
(1)-x
(2)*(1-x
(1))^5)^2+(x
(1)*x
(2))^2*(1-x
(1))^2*2*(1-x
(1)-x
(2)*(1-x
(1))^5)*(-1+5*x
(2)*(1-x
(1))^4);
g
(2)=2*(x
(1)*x
(2))*x
(1)*(1-x
(1))^2*(1-x
(1)-x
(2)*(1-x
(1))^5)^2+(x
(1)*x
(2))^2*(1-x
(1))^2*2*(1-x
(1)-x
(2)*(1-x
(1))^5)*(-(1-x
(1))^5);
end
表2初始点为(-2.5,-5)时不同算法收敛性比较
编号
搜索方向
步长搜索
梯度计算
最优解x1
最优解x2
最优值
目标函数调用次数
1
BFGS
混合二、三次插值
数值梯度
-1.5131e-009
-9.3027
2.1031e-014
129
2
DFP
-1.5132e-009
-9.3027
2.1033e-014
129
3
Gillmurray
1.0158e+000
-8.9160
5.1216e-006
222
4
BFGS
三次插值
-1.5131e-009
-9.3027
2.1031e-014
129
5
DFP
-1.5132e-009
-9.3027
2.1033e-014
129
6
Gillmurray
1.0158e+000
-8.9160
5.1216e-006
222
7
BFGS
混合二、三次插值
分析梯度
-8.9637e-009
-9.3027
7.3805e-013
43
8
DFP
-8.9638e-009
-9.3027
7.3807e-013
43
9
Gillmurray
1.0145e+000
-8.9160
3.6200e-006
75
10
BFGS
三次插值
-1.5131e-009
-9.3027
2.1031e-014
129
11
DFP
-8.9638e-009
-9.3027
7.3807e-013
43
12
Gillmurray
1.0145e+000
-8.9160
3.6200e-006
75
根据表2中的结果可以发现在其他条件相同时,不同的搜索方向可能会引向不同的极值点。
无论采用数值梯度或分析梯度,gillmurray算法都会导向X1=1的极值线,而采用BFGS或DFP算法则会导向X1=0的极值线。
BFGS与DFP算法的差异在此算例中体现的不明显,其迭代次数、最优值、最优解在除了分析梯度、三次插值时都十分的接近甚至相同。
但是在分析梯度且三次插值时,DFP算法的精度略微有所下降,即其极值略大于BFGS算法,但是DFP的函数调用次数小于BFGS算法。
即分析搜索方向对于求解结果的影响,可以得出在本算例中BFGS与DFP算法的差异不大,而gillmurray算法的收敛速度慢于前两种算法,且其可能将极值引向不同的最优值。
在此算例中,步长的确定方式(二次多项式或三次多项式)对于解收敛的速度影响不是特别明显。
在数值梯度时,两种步长确定方式对于解的精度以及收敛速度完全相同。
但是在分析梯度情况下,BFGS算法的两种步长确定方式所解出的解差异较大,且其函数迭代次数差异也较大。
三次插值的精度略高与二次或三次多项式插值,但是三次插值的函数调用次数大大高于二次或三次插值。
分析两种梯度算法对于解的精度的影响。
毫无疑问地,采用分析梯度算法较数值梯度有着较大的优势。
其函数调用次数大大少于数值梯度模式,且计算的精度相近。
故而,在可能的情况下应尽量采用分析梯度进行计算。
6.有一组数据
,其中
,
由表7.9给出。
现要用这组数据拟合函数
中的参数x,初值可选为(0.5,1.5,-1,0.01,0.02),用GN和LM两种方法求解。
对
作一扰动,即
,
为(-0.05,0.05)内的随机数,观察并分析迭代收敛是否会变慢。
表7.9
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
解:
采用lsqcurvefit函数由如下程序进行非线性回归参数求解。
%第七次实验,第六题
clc
clear
formatshorte
x0=[0.5,1.5,-1,0.01,0.02];
i=1:
1:
33;
t=10*(i-1);
c=[0.8440.9080.9320.9360.9250.9080.8810.8500.8180.7840.7510.7180.6850.6580.6280.6030.5800.5580.5380.5220.5060.490.4780.4670.4570.4480.4380.4310.4240.4200.4140.4110.406];
%LM法
opt1=optimset('LargeScale','off','MaxFunEvals',1000);
[x1,norm1,res1,ef1,out1]=lsqcurvefit(@problem6fun,x0,t,c,[],[],opt1)
%GN法
opt2=optimset(opt1,'LevenbergMarquardt','off');
[x2,norm2,res2,ef2,out2]=lsqcurvefit(@problem6fun,x0,t,c,[],[],opt2)
fori=1:
1:
33
t1=10*(i-1);
f1(i)=problem6fun(x1,t1);
f2(i)=problem6fun(x2,t1);
end
plot(t,f1,'k')
holdon
plot(t,f2,'r')
gridon
legend('LM算法','GN算法')
plot(t,c,'*');
通过程序画出拟合所使用数据与拟合后的函数图象,如图4所示。
图4拟合后函数与拟合点
而比较两种算法的差异可以得出表3。
表3两种算法拟合比较
算法
X1
X2
X3
X4
X5
norm
迭代次数
调用次数
LM
3.7541e-001
1.9358
-1.4647
1.2868e-002
2.2123e-002
5.4649e-005
35
230
GN
3.7541e-001
1.9358
-1.4647
1.2868e-002
2.2123e-002
5.4649e-005
9
81
注:
LM退出条件为ef=3,GN退出条件为ef=1。
从两种算法的比较中可以得出,其计算的精度基本相同,即所得的拟合参数基本相同,而误差的平方和也基本相同。
但是,这两种函数的收敛速度有较大的差异,LM算法的迭代次数与函数调用次数均大大大于GN算法。
使用如下函数,对拟合点y引入随机数,再次采用两种计算方法进行拟合。
拟合结果见图5及表4。
Clc
clear
formatshorte
x0=[0.5,1.5,-1,0.01,0.02];
i=1:
1:
33;
t=10*(i-1);
c=[0.8440.9080.9320.9360.9250.9080.8810.8500.8180.7840.7510.7180.6850.6580.6280.6030.5800.5580.5380.5220.5060.490.4780.4670.4570.4480.4380.4310.4240.4200.4140.4110.406];
e=rand(1,33);
e=e*0.1-0.05;
c=c+e;
%LM·¨
opt1=optimset('LargeScale','off','MaxFunEvals',1000,'TolX',1e-8);
[x1,norm1,res1,ef1,out1]=lsqcurvefit(@problem6fun,x0,t,c,[],[],opt1)
%GN·¨
opt2=optimset(opt1,'LevenbergMarquardt','off');
[x2,norm2,res2,ef2,out2]=lsqcurvefit(@problem6fun,x0,t,c,[],[],opt2)
fori=1:
1:
33
t1=10*(i-1);
f1(i)=problem6fun(x1,t1);
f2(i)=problem6fun(x2,t1);
end
plot(t,f1,'k')
holdon
plot(t,f2,'r')
gridon
plot(t,c,'*');
legend('LM算法','GN算法','拟合点')
图5引入随机数后拟合图
(1)
表4引入随机数后拟合结果
(1)
算法
X1
X2
X3
X4
X5
norm
迭代次数
调用次数
LM
3.0382e-001
9.0367e-001
-3.5571e-001
7.2353e-003
5.2360e-002
2.4014e-002
21
139
GN
3.0379e-001
9.0362e-001
-3.5563e-001
7.2341e-003
5.2380e-002
2.4014e-002
14
126
注LM算法的退出条件为ef=3,GN算法的退出条件为ef=1。
在引入了随机数后,函数的误差值norm大大增加。
而对于函数的收敛速度,当引入随机数后,LM算法的迭代次数与函数调用次数与引入前相比反而下降了,这是因为其退出条件为ef=3,即r的平方和小于了容忍的误差值(1e-6)。
而GN的退出条件为ef=1,故而,其随随机数的引入而出现了收敛速度减慢的情况。
由于不同的退出条件,增加随机数后,算法的收敛速度出现了不同的变化情况。
而多次产生不同的随机数,发现在某些随机数影响下,还甚至会发生超出最大调用次数而退出的情况,见图6,表5。
图6引入随机数后拟合图
(2)
表5引入随机数后拟合结果
(2)
算法
X1
X2
X3
X4
X5
norm
迭代次数
调用次数
LM
3.9756e-001
9.6815e+000
-9.2112e+000
1.6877e-002
1.8411e-002
2.2404e-002
154
1005
GN
3.9769e-001
2.2002e+001
-2.1531e+001
1.7294e-002
1.7959e-002
2.2398e-002
105
1002
注LM算法的退出条件为ef=0,GN算法的退出条件为ef=0。
即而随机数对于回归算法的收敛性有较大的影响。
当出现了调用次数超出了阈值后,其收敛速度快于出现随机数前。
[实验感想]
1)在本次试验中学会了无约束极值的函数使用,以及不同算法的调试调用。
2)对于课程中学习的无约束极值求解方法有了更加深入的理解与掌握。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 实验