最速下降法求最优解西安电子科技大学matlab结课大作业Word下载.docx
- 文档编号:21041491
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:10
- 大小:165.17KB
最速下降法求最优解西安电子科技大学matlab结课大作业Word下载.docx
《最速下降法求最优解西安电子科技大学matlab结课大作业Word下载.docx》由会员分享,可在线阅读,更多相关《最速下降法求最优解西安电子科技大学matlab结课大作业Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
∇f(x0)
,计算一元函数
y(λ1)=minf(x
λ≥0
0-λ⋅∇f(x0))
,并
100
得到x=x
-λ1⋅∇f(x
)。
如此反复迭代,最终收敛于局部最优点。
实现
该算法,求的最优值,a,b,c,d自定(非0)
三、实验假设
考虑到参数的随机性、代表性,验证程序的正确性、典型性,在此我们从两个角度出发,一是在abcd值确定的情况下改变初始搜索位置x0,看函数最优解是否相同;
二是初始搜索位置x0相同,abcd值不同的情况下,看函数最优解是否相同。
1.不妨令a,b,c,d分别为1,2,3,4,即
f(x,y)=(x-1)2+3(y-2)2+3xy+4
求其梯度函数(代码行间距已缩小)
>
clear
symsxy
f=inline('
[(x-1).^2+3*(y-2).^2+3*x*y+4]'
'
x'
y'
)f=
Inlinefunction:
f(x,y)=[(x-1).^2+3*(y-2).^2+3*x*y+4]
grad=[diff(f(x,y),x),diff(f(x,y),y)]grad=
[2*x+3*y-2,3*x+6*y-12]
2.令a,b,c,d分别为4,3,2,1,即
f(x,y)=(x-4)2+3(y-3)2+2xy+1
[(x-4).^2+3*(y-3).^2+2*x*y+1]'
);
[2*x+2*y-8,2*x+6*y-18]
四、程序设计
1.无约束问题的最优性条件
原理1:
设f:
Rn→R1在点x∈Rn处可微。
若存在p∈Rn,使∇f(x)Tp<
0,则向量P是f在点x处的下降方向。
原理2:
Rn→R1在点x*∈Rn处可微。
若x*是无约束问题的局部最优解,则∇f(x*)=0,由数学分析中我们已经知道,使∇f(x)=0
的点x为函数f的驻点或平稳点。
函数f的一个驻点可以是极小点;
也可以是极大点;
甚至也可能既不是极小点也不是极大点,此时称它为函数f的鞍点。
以上定理告诉我们,x是无约束问题
的的局部最优解的必要条件是:
x是其目标函数f的驻点。
原理3:
Rn→R1在点x*∈Rn处的Hesse矩阵∇2f(x*)存在。
若
∇f(x*)=0,并且∇2f(x*)正定,则x*是无约束问题的严格局部
最优解。
一般而言,无约束问题的目标函数的驻点不一定是无约束问题的最优解。
但对于其目标函数是凸函数的无约束凸规划,下面定理证明了,它的目标函数的驻点就是它的整体最优解。
原理4:
Rn→R1,x*∈Rn,f是Rn上的可维凸函数。
若有
∇f(x*)=0,则x*是无约束问题的整体最优解。
2.最速下降法算法思想
○1任一点的负梯度方向是函数值在该点下降最快的方向;
○2将n维问题转化为一系列沿负梯度方向用一维搜索方法寻优的问题;
○3极值点导数性质知,该点梯度=0,终止条件也就是梯度尽可能逼近0,
极值
即当搜寻区间非常逼近极值点时,∇f(a)→0⇒f(a)→f(x)
即为所求。
3.最速下降法算法迭代步骤
,f(a)
第1步选取初始点x0,给定终止误差ε<
0,令k=0;
第2步计算∇f(xk),若||∇f(xk)||≤ε,停止迭代.输出xk,否则进行第3步;
第3步取搜索方向pk=−∇f(xk);
第4步进行一维搜索,求tk,使得f(x
+
tp
)=minf(x
tp),
kkkk
kt≥0
xk+1
=xk+tpk
k=k+1,转至第2步;
k
由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点
4.确定最优步长tk
此时的f(xk-t∇f(xk))已成为步长t的一元函数,故可用任何一种
一维寻优法,此程序中采用线性搜索法求出tk即
f(x
k+1)=
f(xk
-
tk∇f(x
k))=
min
t
t∇f(x
k))
5.主要的参数说明
grad:
梯度函数;
x0:
搜索初始值;
TolX:
最优值点间的误差阈值;
TolFun:
函数的误差阈值;
dist0:
初始步长;
MaxIter:
最大的迭代次数;
xo:
最优化点值;
fo:
函数在点xo处的函数值。
%%迭代计算求最优解确定搜寻方向代码:
fork=1:
MaxIter
g=feval(grad,X);
g=g/norm(g);
%求点x处的梯度
%%线性搜索方法确定步长的部分代码:
dist=dist*2;
fx1=feval(f,X-dist*2*g);
fork1=1:
kmax1
fx2=fx1;
fx1=feval(f,X-dist*g);
iffx0>
fx1+TolFun&
&
fx1<
fx2-TolFun%fx0>
fx1<
fx2,den=4*fx1-2*fx0-2*fx2;
num=den-fx0+fx2;
%二次逼近法dist=dist*num/den;
X=X-dist*g;
fx=feval(f,X);
%确定下一点
注:
在此为了简便,判断输入的变量数,设定一些变量为默认值(用户可自己定义),不妨设为TolX=1e-4;
TolFun=1e-9;
MaxIter=100;
dist0=1;
五、测试结果
实验结果一、a,b,c,d分别为1,2,3,4;
x0=[2,4]
实验结果二、a,b,c,d分别为1,2,3,4;
x0=[1,1]
实验结果三、a,b,c,d分别为4,3,2,1;
实验结果四、a,b,c,d分别为4,3,2,1;
六、结果评价
本次测试分别从两组不同的初始搜索位置,两组不同a,b,c,d值出发,两两比较可得结论:
测试用例abcd为某些特定值时,不同初始搜索位置可以得到相同的最优解;
测试用例当初搜索位置相同时,abcd分别取两组数时得到的最优解是不同的。
从结果上来看本例函数始终取到相同最优值,达到了题目要求,只是在最优点位置有略微差异,这个问题产生原因是与最优值点间的误差阈值自定义值有关,精度越高最优值越准确。
七、程序评价
1.最速下降法算法简单,初始点可以任意选,每次迭代计算量小,即使从一个不好的初始点出发,往往也能收敛到局部极小点。
2.由于在远离极小点的地方每次迭代可以使目标函数值有较大的下降,但是在接近极小点的地方,由于锯齿现象,会导致每次行进距离缩短,从而使收敛速度不快。
即全局收敛,线性收敛,易产生扭摆现象而造成早停。
3.最速下降法是一种理想的极小化方法。
必须指出的是,某点的负梯度方向,通常只是在该店附近才具有这种最速下降的性质。
4.在实用中常将最速下降法和其他方法联合应用,在前期使用最速下降法,而在接近极小点时,可改用收敛较快的其他方法,这样能使计算速度更快,结果更准确。
八、心得体会
通过这次结课大作业,加深了我对MATLAB记忆和理解,真正做到了理论和实践相结合,锻炼了自己分析,处理实际问题的能力,也认识到了自己的不足。
编程存在问题很大,主要细节错误找不出,M文件的编写后调用运用的不好,也让我认识到编写好M文件的重要性。
在以后的学习中,要注重细节和改错,多上机操作,切实提高编程能力。
九、附录
fun.m文件
function[xo,fo]=fun(f,grad,x0)%f:
函数名;
%grad:
%x0:
%TolX:
%TolFun:
%dist0:
%MaxIter:
%xo:
%fo:
函数在点xo处的函数值。
%%%%%%判断输入的变量数,设定一些变量为默认值
TolX=1e-4;
TolFun=1e-9;
MaxIter=100;
ifnargin<
7
%最大的迭代次数默认为10
end
6
dist0=10;
%初始步长默认为10end
5
TolFun=1e-8;
%函数值误差为1e-8end
4
TolX=1e-6;
%自变量距离误差end
x=x0;
fx0=feval(f,x0);
fx=fx0;
dist=dist0;
kmax1=25;
%线性搜索法确定步长的最大搜索次数
warning=0;
%%%%%迭代计算求最优解fork=1:
MaxIterg=feval(grad,x);
%求点x处的梯度
%%线性搜索方法确定步长dist=dist*2;
fx1=feval(f,x-dist*2*g);
fork1=1:
fx1=feval(f,x-dist*g);
fx1+TolFun&
fx2-TolFun%fx0>
fx2,den=4*fx1-2*fx0-2*fx2;
%二次逼近法
dist=dist*num/den;
x=x-dist*g;
fx=feval(f,x);
%确定下一点break
else
dist=dist/2;
endend
ifk1>
=kmax1warning=warning+1;
%无法确定最优步长
ifwarning>
=2||(norm(x-x0)<
TolX&
abs(fx-fx0)<
TolFun)
break;
endx0=x;
fx0=fx;
end
xo=x;
fo=fx;
ifk==MaxIter
fprintf('
Justbestin%diteration'
MaxIter);
命令窗口输入:
以测试结果一为例
symsxy
x0=[2,4];
%初始搜索位置
f=inline('
[(x
(1)-4).^2+3*(x
(2)-3).^2+2*x
(1)*x
(2)+1]'
%位置(x,y)用一元二维x=(x
(1),x
(2))来表示
grad=inline('
[2*x
(1)+3*x
(2)-2,3*x
(1)+6*x
(2)-12]'
%函数f在位置x的梯度
[xo,fo]=fun(f,grad,x0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 下降 最优 西安电子科技大学 matlab 结课大 作业