资源描述:
《实用最优化方法编程大作业.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实用最优化方法编程大作业班级:姓名:指导老师:学号:大连理工大学2015年11月27日版本号:MATLAB7.11.0(R2010b)【文件名WP.m】functionx=WP(f,x0,var,s0,eps)clcsymsx1x2;c1=0.1;c2=0.5;b=inf;lambda=1;ifnargin==4eps=1.0e-6;endgradf=jacobian(f,var);g0=subs(gradf,var,x0);f0=subs(f,var,x0);gs=g0*s0';a=0;j=0;whilej<1000new_x=x0
2、+lambda*s0;new_f=subs(f,var,new_x);left=f0-new_f;new_g=subs(gradf,var,new_x);new_gs=new_g*s0';right=-1*c1*lambda*gs;ifleft3、0.5*(lambda+b));elsex=lambda;break;endendend在CommandWindow输入:symsx1x2WP(100*(x2-x1^2)^2+(1-x1)^2,[-1,1],[x1x2],[11])程序运行后可得出结果:ans=0.0039【文件名minGETD.m】function[x,minf]=minGETD(f,x0,var,eps)clcsymsx1x2x3formatlong;n=length(x0);ifnargin==3eps=1.0e-3;endx0=x0';symslambda;g
4、radf=jacobian(f,var);g=subs(gradf,var,x0);s=-g';k=0;while1tol=norm(double(g));iftol<=epsx=x0;break;endx1=x0+lambda*s;f1=subs(f,var,x1);dy1=diff(f1);lambda0=solve(dy1);x1=x0+lambda0*s;g1=subs(gradf,var,x1)tol=norm(double(g1))iftol<=epsx=x1;break;endifk+1==nx0=x1;continue
5、;elsemiu=dot(g1,g1)/dot(g,g)s=-g1'+miu*s;k=k+1;x0=x1;endendx在CommandWindow输入:symsx1x2x3x0=[000];var=[x1x2x3];f=x1^2-2*x1*x2+2*x2^2+x3^2-x2*x3+2*x1+3*x2-x3;minGETD(f,x0,var,eps)程序运行后可得出结果:x=[-/59711,-/59711,-59465/59711]可认为最终解为[-4,-3,-1]。【文件名Excise.m】function[x,minf]=Exc
6、ise_3(f,x0,var,method,eps)%method表算法,1时为最速下降法,2时为牛顿法,3为BFGSclcticsymsx1x2formatlong;ifnargin==4eps=1.0e-6;endn=length(x0);H0=eye(2);x0=x0';gradf=jacobian(f,var);g0=subs(gradf,var,x0)';s=-H0*g0;k=0;j=0;%检查初始点是否为最优点tol=norm(double(g0));iftol<=epsx=x0;minf=subs(f,var,x);re
7、turn;endwhile1lambda0=WP(f,x0',var,s');x1=x0+lambda0*s;f1=subs(f,var,x1);g1=subs(gradf,var,x1)';tol=norm(double(g1));iftol<=epsx=x1;break;endifk+1==nx0=x1;H0=eye(2);s=-subs(gradf,var,x0)';k=0;continue;elseswitchmethodcase1%最速下降法H1=eye(n);case2%牛顿法Hesse=jacobian(gradf,va
8、r)H1=inv(subs(Hesse,var,x1));case3%BFGSd_x=x1-x0;d_g=g1-g0;v=d_x/(d_x'*d_g)-H0*d_g/(d_g'*H0*d_g);H1=H0+(d_x*d_