《优化方法大作业.pdf》由会员分享,可在线阅读,更多相关《优化方法大作业.pdf(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、(一)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=0.0)d=-g;endendif(norm(g)epsilon),break;end%检验终止条件 m=0;mk=0;while(m20)%Armijo搜索if(feval(fun,x0+rhom*d)feval(fun,x0)+sigma*rhom*g*d)mk
2、=m;break;end m=m+1;end x0=x0+rhomk*d;val=feval(fun,x0);g0=g;d0=d;k=k+1;endx=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 x1 x2 x3 x4xx=x1;x2;x3;x4;fun=(x1-1)2+(x3-1)2+100*(x2-x12)2+100*(x4-x32)2;gfun=2*(x1-1)-
3、400*x1*(x2-x12);.200*(x2-x12);.2*(x3-1)-400*x3*(x4-x32);.200*(x4-x32);maxk=10;%最大迭代次数rho=0.5;sigma=0.4;k=0;epsilon=1e-5;xx=x0;k2=0;while(k2maxk)g=subs(gfun,x1 x2 x3 x4,xx(1)xx(2)xx(3)xx(4);%计算梯度 d=-g;%计算搜索方向if(norm(d)epsilon),break;end m=0;mk=0;while(m20)%Armijo搜索 xz=xx+rhom*d;if(subs(fun,x1 x2 x3 x
4、4,xz(1)xz(2)xz(3)xz(4)subs(fun,x1x2 x3 x4,xz(1)xz(2)xz(3)xz(4)+sigma*rhom*g*d)mk=m;break;end m=m+1;end xx=xx+rhomk*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(k2maxk)gk=feval(gfun,x0);%计算梯度 Gk=feval(Hess,x0);%计算Hesse阵 dk=-Gkgk;%解方程组G
5、k*dk=-gk,计算搜索方向if(norm(gk)epsilon),break;end%检验终止准则 m=0;mk=0;while(m20)%用Armijo搜索求步长if(feval(fun,x0+rhom*dk)feval(fun,x0)+sigma*rhom*gk*dk)mk=m;break;end m=m+1;end x0=x0+rhomk*dk;k2=k2+1;endx2=x0;%BFGSBk=eye(n);K3=0;while(k3maxk)gk=feval(gfun,x0);%计算梯度if(norm(gk)epsilon1)break;end%检验终止准则 dk=-Bkgk;m=
6、0;mk=0;while(m20)%用Armijo搜索求步长 newf=feval(fun,x0+rhom*dk);oldf=feval(fun,x0);if(newf0)Bk=Bk-(Bk*det_xk*det_xk*Bk)/(det_xk*Bk*det_xk)+(det_gk*det_gk)/(det_gk*det_xk);end k3=k3+1;x0=x;Endx3=x;disp(the solution for gradient is);disp(xx);disp(gradient iteration is);disp(k);disp(the solution for newton i
7、s);disp(x2);disp(newton iteration is);disp(k2);disp(the solution for BGFS is);disp(x3);disp(BFGS iteration is);disp(k3);(三)惩罚函数法clcclearm=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);syms x1syms x2syms em(1)=1;c=10;a(1)=6;b(1)=6;imax=100;for k=1:imax xi=a(k);yi=b(k);e=m(k);fx=4*x1-x22-12;h
8、x=25-x12-x22;gx=-10*x1+x12-10*x2+x22+34;gx1=subs(gx,x1 x2,xi yi);if gx1=0 f=fx+M*hx2;else f=fx+M*(hx2+gx2);end fx1=diff(f,x1);fx2=diff(f,x2);fx1x1=diff(fx1,x1);fx1x2=diff(fx1,x2);fx2x1=diff(fx2,x1);fx2x2=diff(fx2,x2);for n=1:100 f1=subs(fx1,x1 x2,xi yi);f2=subs(fx2,x1 x2,xi yi);f11=subs(fx1x1,x1 x2,
9、xi yi);f12=subs(fx1x2,x1 x2,xi yi);f21=subs(fx2x1,x1 x2,xi yi);f22=subs(fx2x2,x1 x2,xi yi);if(double(sqrt(f12+f22)epsilon&kepsilonif(k=2&btak theta*btaold)sigma=eta*sigma;end%更新乘子向量for(i=1:l),mu(i)=mu(i)-sigma*he(i);endfor(i=1:m)lambda(i)=max(0.0,lambda(i)-sigma*gi(i);endend k=k+1;btaold=btak;x0=x;endf=feval(fun,x);disp(x1=),disp(x(1)disp(x2=),disp(x(2)disp(objective function value f=),disp(f)