优化方法大作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function [x,val,k]=frcg(fun,gfun,x0)

%输入: x0是初始点, fun, gfun分别是目标函数和梯度

%输出: x, val分别是近似最优点和最优值, k是迭代次数.

maxk=200; %最大迭代次数

rho=0.6;sigma=0.4;

k=0; epsilon=1e-4;

n=length(x0);

while(k

g=feval(gfun,x0); %计算梯度

itern=k-(n+1)*floor(k/(n+1));

itern=itern+1;

%计算搜索方向

if(itern==1)

d=-g;

else

beta=(g'*g)/(g0'*g0);

d=-g+beta*d0; gd=g'*d;

if(gd>=0.0)

d=-g;

end

end

if(norm(g)

m=0; mk=0;

while(m<20) %Armijo搜索

if(feval(fun,x0+rho^m*d)

end

m=m+1;

end

x0=x0+rho^mk*d;

val=feval(fun,x0);

g0=g; d0=d;

k=k+1;

end

x=x0;

val=feval(fun,x);

x=reshape(x,10,10);

x=double(x);

disp('final x='),disp(x)

disp('final y='),disp(val)

最速下降

clc;

clear;

x0=[-1.2;1;-1.2;1];

syms x1x2x3x4

xx=[ x1;x2;x3;x4];

fun=(x1-1)^2+(x3-1)^2+100*(x2-x1^2)^2+100*(x4-x3^2)^2;

gfun=[2*(x1-1)-400*x1*(x2-x1^2);...

200*(x2-x1^2);...

2*(x3-1)-400*x3*(x4-x3^2);...

200*(x4-x3^2)];

maxk=10; %最大迭代次数

rho=0.5;sigma=0.4;

k=0; epsilon=1e-5;

xx=x0;

k2=0;

while(k2

g=subs(gfun,{x1 x2 x3 x4},{xx(1) xx(2) xx(3) xx(4)}); %计算梯度

d=-g; %计算搜索方向

if(norm(d)

m=0; mk=0;

while(m<20) %Armijo搜索

xz=xx+rho^m*d;

if(subs(fun,{x1 x2 x3 x4},{xz(1) xz(2) xz(3) xz(4)})

mk=m; break;

end

m=m+1;

end

xx=xx+rho^mk*d;

k=k+1;

end

%%%%牛顿

function [x,val,k]=dampnm(fun,gfun, Hess,x0)

k2=0;maxk=100; rho=0.55;sigma=0.4;

k=0; epsilon=1e-5;

while(k2

gk=feval(gfun,x0); %计算梯度

Gk=feval(Hess,x0); %计算Hesse阵

dk=-Gk\gk; %解方程组Gk*dk=-gk, 计算搜索方向

if(norm(gk)

m=0; mk=0;

while(m<20) % 用Armijo搜索求步长

if(feval(fun,x0+rho^m*dk)

mk=m; break;

end

m=m+1;

end

x0=x0+rho^mk*dk;

k2=k2+1;

end

x2=x0;

%%%%BFGS

Bk=eye(n);

K3=0;

while(k3

gk=feval(gfun,x0); %计算梯度

if(norm(gk)

break;

end%检验终止准则

dk=-Bk\gk; m=0; mk=0;

while(m<20) % 用Armijo搜索求步长

newf=feval(fun,x0+rho^m*dk);

oldf=feval(fun,x0);

if(newf

mk=m; break;

end

m=m+1;

end

x=x0+rho^mk*dk;

det_xk=x-x0;

det_gk=feval(gfun,x)-gk;

if(det_gk'*det_xk>0)

Bk=Bk-(Bk*det_xk*det_xk'*Bk)/(det_xk'*Bk*det_xk)+(det_gk*det_gk')/(de t_gk'*det_xk);

end

k3=k3+1; x0=x;

End

x3=x;

disp('the solution for gradient is '); disp(xx');

disp(' gradient iteration is '); disp(k);

disp('the solution for newton is '); disp(x2');

disp('newton iteration is'); disp(k2);

disp('the solution for BGFS is '); disp(x3’);

disp('BFGS iteration is'); disp(k3);

相关文档
最新文档