大连理工大学优化方法上机大作业
优化方法上机大作业
学 院:电子信息与电气工程学部 姓 名: 学 号: 指导老师:
大连理工大学优化方法上机大作业
上机大作业(一) %目标函数
function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2; end
%目标函数梯度
function gf=gfun(x)
gf=[-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));200*(x(2)-x(1)^2)]; End
%目标函数Hess矩阵 function He=Hess(x)
He=[1200*x(1)^2-400*x(2)+2,-400*x(1); -400*x(1), 200;]; end
%线搜索步长
function mk=armijo(xk,dk) beta=0.5; sigma=0.2; m=0; maxm=20; while (m<=maxm)
if(fun(xk+beta^m*dk)<=fun(xk)+sigma*beta^m*gfun(xk)'*dk) mk=m; break; end m=m+1; end
alpha=beta^mk newxk=xk+alpha*dk fk=fun(xk) newfk=fun(newxk)
%最速下降法
function [k,x,val]=grad(fun,gfun,x0,epsilon) %功能:梯度法求解无约束优化问题:minf(x)
%输入:fun,gfun分别是目标函数及其梯度,x0是初始点, % epsilon为容许误差
%输出:k是迭代次数,x,val分别是近似最优点和最优值 maxk=5000; %最大迭代次数 beta=0.5; sigma=0.4;
大连理工大学优化方法上机大作业
k=0;
while(k gk=feval(gfun,x0); %计算梯度 dk=-gk; %计算搜索方向 if(norm(gk) while(m<20) %用Armijo搜索步长 if(feval(fun,x0+beta^m*dk)<=feval(fun,x0)+sigma*beta^m*gk'*dk) mk=m;break; end m=m+1; end x0=x0+beta^mk*dk; k=k+1; end x=x0; val=feval(fun,x0); >> x0=[0;0]; >> [k,x,val]=grad('fun','gfun',x0,1e-4) 迭代次数: k = 1033 x = 0.9999 0.9998 val = 1.2390e-008 %牛顿法 x0=[0;0];ep=1e-4;maxk=10;k=0; while(k