最速下降算法为:Opt_Steepest.doc

最速下降算法为:Opt_Steepest

CENTRAL SOUTH UNIVERSITY MATLAB程序设计实践 题 目 MATLAB程序设计实践 学生姓名 学 号 0103100132 指导教师 学 院 材料科学与工程学院 专 业 完成时间 2013年3月24日 第1题 算法说明: 原理 函数的负梯度表示如下: 搜索步长可调整,通常记为(第k次迭代中的步长)。该算法利用一维的线性搜索方法,如二次逼近法,沿着负梯度方向不断搜索函数的较小值,从而找出最优解。 步骤 最速下降法的基本求解流程如下。 1:迭代次数初始化为k=0,求出初始点x0的函数值f0=f(x0)。 2:迭代次数加1,即k=k+1,用一维线性搜索方法确定沿负梯度方向-gk-1的步长k-1,其中k-1=ArgMinf(xk-1-gk-1/||gk-1||)。 3:沿着负梯度的方向寻找下一个接近最小值的点,其中步长为k-1,得下一点的坐标为:xk=xk-1-k-1gk-1/||gk-1||。 4:如果xk=xk-1,且f(xk)f(xk-1),那么就认为xk为所求的最小值点,并结束循环;否则,跳到步骤2。 流程图: 源程序代码: %在MATLAB中编程实现的最速下降算法为:Opt_Steepest。 功能:最速下降算法求无约束最优化解。 调用格式:[xo,fo]=Opt_Steepest(f,grad,x0,TolX,TolFun,dist0,MaxIter)。 其中,f为函数名; grad为梯度函数; x0为搜索初始值; TolX为最优值点间的误差阀值; TolFun为函数的误差阀值; dist0为初始步长; MaxIter为最大迭代次数; xo为最优化点值; fo为函数在点xo处的函数值。 function [xo,fo]=Opt_Steepest(f,grad,x0,TolX,TolFun,dist0,MaxIter) %最速下降法求最优化解 %f为函数名; %grad为梯度函数; %x0为搜索初始值; %TolX为最优值点间的误差阀值; %TolFun为函数的误差阀值; %dist0为初始步长; %MaxIter为最大迭代次数; %xo为最优化点值; %fo为函数在点xo处的函数值。 %%%%%%判断输入的变量数,设定一些变量为默认值 if nargin 7 MaxIter = 100; %最大迭代次数默认为100 end if nargin 6 dist0 = 10; end if nargin 5 TolFun = 1e-6; end %%%%%%第一步,求解的初始值的函数值 x = x0; fx0 = feval(f,x0); fx = fx0; dist =dist0; kmax1 = 25; %线性搜索法确定步长的最大搜索次数 warning = 0; %%%%%%迭代计算求最优解 for k=1:MaxIter g=feval(grad,x); g=g/norm(g); %求点x处的梯度方向 %%线性搜索方法确定步长 dist=dist*2; %令步长为原步长的二倍 fx1=feval(f,x-dist*2*g); for k1=1:kmax1 fx2=fx1; fx1=feval(f,x-dist*g); if fx0fx1+TolFun fx1 fx2 - TolFun %fx0fx1fx2, den=4*fx1-2*fx0-2*fx2;num=den-fx0+fx2; %二次逼近法 dist=dist*num/den; x=x-dist*g;fx=feval(f,x); %确定下一点 break; else dist=dist/2; end end if k1=kmax1 warning=warning+1; %无法确定最优步长 else warning = 0; end if warning=2|(norm(x-x0)TolXabs(fx-fx0)TolFun)

文档评论(0)

1亿VIP精品文档

相关文档