最速下降法求最优解西安电子科技大学matlab结课大作业.docx
- 文档编号:7906990
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:10
- 大小:165.17KB
最速下降法求最优解西安电子科技大学matlab结课大作业.docx
《最速下降法求最优解西安电子科技大学matlab结课大作业.docx》由会员分享,可在线阅读,更多相关《最速下降法求最优解西安电子科技大学matlab结课大作业.docx(10页珍藏版)》请在冰豆网上搜索。
最速下降法求最优解西安电子科技大学matlab结课大作业
西安电子科技大学课程论文数学软件与实验
最速下降法求最优解
姓名:
方正阳学号:
07117020
班级:
071171
MATLAB结课大作业
摘要:
最速下降法,又称为梯度法,是一种重要的无约束最优化方法。
它是1847年由著名数学家Cauchy给出的,其他解析方法或是它的变形,或是受它启发而得到,因此它是最优化方法的基础。
该法将n维问题转化为一系列不断迭代过程中沿负梯度方向用一维搜索方法寻优的问题,本次程序设计利用最速下降法算法,反复迭代,最终收敛于局部最优点,即为解出的二元函数的无约束非线性规划问题minf(x,y)。
引言:
最优化理论作为运筹学中的一个重要理论方法,在工业生产,金融经济活动,工商管理,国防建设,计算机应用中,都有着重要的应用。
最优化理论通过给出生产活动中的各类实际问题的数学模型,通过最优化方法,寻求该问题的最优解或满意解。
最速下降算法是最优化理论中常见的一个重要算法,理论证明:
最速下降算法在一定条件下是收敛的,它能够有效地求解一部分无约束最优化问题。
一、实验目的
熟悉最速下降法算法思想和步骤,用MATLAB语言编程最速下降法求最优值。
二、实验要求
12n,然后
在最优化计算方法中,要求解y=f(x1,x2,,xn)的局部最小值,可
以采用如下的方法进行迭代计算:
先给出初始点x
0=(x0,x0,,x0)
根据其梯度方向
∇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
求其梯度函数(代码行间距已缩小)
>>clear
>>symsxy
>>f=inline('[(x-4).^2+3*(y-3).^2+2*x*y+1]','x','y');
>>grad=[diff(f(x,y),x),diff(f(x,y),y)]grad=
[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:
设f:
Rn→R1在点x*∈Rn处可微。
若x*是无约束问题的局部最优解,则∇f(x*)=0,由数学分析中我们已经知道,使∇f(x)=0
的点x为函数f的驻点或平稳点。
函数f的一个驻点可以是极小点;也可以是极大点;甚至也可能既不是极小点也不是极大点,此时称它为函数f的鞍点。
以上定理告诉我们,x是无约束问题
的的局部最优解的必要条件是:
x是其目标函数f的驻点。
原理3:
设f:
Rn→R1在点x*∈Rn处的Hesse矩阵∇2f(x*)存在。
若
∇f(x*)=0,并且∇2f(x*)正定,则x*是无约束问题的严格局部
最优解。
一般而言,无约束问题的目标函数的驻点不一定是无约束问题的最优解。
但对于其目标函数是凸函数的无约束凸规划,下面定理证明了,它的目标函数的驻点就是它的整体最优解。
原理4:
设f:
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
f(xk
-
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 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;x0=[2,4] 实验结果四、a,b,c,d分别为4,3,2,1;x0=[1,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;dist0=1; ifnargin<7 MaxIter=100;%最大的迭代次数默认为10 end ifnargin<6 dist0=10;%初始步长默认为10end ifnargin<5 TolFun=1e-8;%函数值误差为1e-8end ifnargin<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); 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 dist=dist*num/den; x=x-dist*g;fx=feval(f,x);%确定下一点break else dist=dist/2; endend ifk1>=kmax1warning=warning+1;%无法确定最优步长 else warning=0;end ifwarning>=2||(norm(x-x0) break;endx0=x;fx0=fx;end xo=x;fo=fx; ifk==MaxIter fprintf('Justbestin%diteration',MaxIter);end 命令窗口输入: 以测试结果一为例 >>symsxy >>x0=[2,4];%初始搜索位置 >>f=inline('[(x (1)-4).^2+3*(x (2)-3).^2+2*x (1)*x (2)+1]','x'); >>%位置(x,y)用一元二维x=(x (1),x (2))来表示 >>grad=inline('[2*x (1)+3*x (2)-2,3*x (1)+6*x (2)-12]','x'); >>%函数f在位置x的梯度 >>[xo,fo]=fun(f,grad,x0)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 下降 最优 西安电子科技大学 matlab 结课大 作业
