版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用最优化方法编程大作业班 级: 姓 名: 指导老师: 学 号: 大连理工大学2015年11月27日版本号:MATLAB 7.11.0 (R2010b)【文件名 WP.m】function x = WP(f,x0,var,s0,eps)clcsyms x1 x2 ;c1=0.1;c2=0.5;b=inf;lambda=1;if nargin=4 eps=1.0e-6;endgradf=jacobian(f,var); g0=subs(gradf,var,x0);f0=subs(f,var,x0);gs=g0*s0;a=0;j=0;while j1000 new_x=x0+lambda*s0;
2、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; if leftright %不满足第一个条件 j=j+1; b=lambda; lambda=0.5*(lambda+a); else %满足第一个条件 left2=new_gs; right2=c2*g0; if left2right2 %不满足第二个条件 j=j+1; a=lambda; lambda=min(2*lambda,0.5*(lambda+b); else x=l
3、ambda; break; end endend在Command Window 输入:syms x1 x2WP(100*(x2-x12)2+(1-x1)2,-1,1,x1 x2,1 1)程序运行后可得出结果:ans=0.0039【文件名minGETD.m】function x,minf = minGETD(f,x0,var,eps)clcsyms x1 x2 x3format long;n=length(x0);if nargin=3 eps=1.0e-3;endx0=x0;syms lambda;gradf=jacobian(f,var);g=subs(gradf,var,x0);s=-g;
4、k=0;while 1 tol=norm(double(g); if tol=eps x=x0; break; end x1=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) if tol=eps x=x1; break; end if k+1=n x0=x1; continue; else miu=dot(g1,g1)/dot(g,g) s=-g1+miu*s; k=k+1; x0=x1; en
5、dendx在Command Window 输入:syms x1 x2 x3x0=0 0 0;var=x1 x2 x3;f=x12-2*x1*x2+2*x22+x32-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 = Excise_3(f,x0,var,method,eps) % method表算法,1时为最速下降法,2时为牛顿法,3为BFGSclcticsyms x1 x2format lo
6、ng;if nargin = 4 eps = 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);if tol=eps x=x0; minf=subs(f,var,x); return;end while 1 lambda0=WP(f,x0,var,s); x1=x0+lambda0*s; f1=subs(f,var,x1); g1=subs(gradf,var,x1); tol=
7、norm(double(g1); if tol=eps x=x1; break; end if k+1=n x0=x1; H0=eye(2); s=-subs(gradf,var,x0); k=0; continue; else switch method case 1 % 最速下降法 H1=eye(n); case 2 % 牛顿法 Hesse=jacobian(gradf,var) H1=inv(subs(Hesse,var,x1); case 3 % BFGS d_x=x1-x0; d_g=g1-g0; v=d_x/(d_x*d_g)-H0*d_g/(d_g*H0*d_g); H1=H0+
8、(d_x*d_x)/(d_x*d_g)-(H0*d_g)*(H0*d_g)/. (d_g*H0*d_g) +(d_g*H0*d_g)*v*v end j=j+1; s=-H1*g1; k=k+1; x0=x1; g0=g1; H0=H1; endendx % 最优解minf=subs(f,var,x) % 最优值j % 迭代次数toc % 运行时间format short;在Command Window 输入:syms x1 x2Excise_3(x1+2*x22+exp(x12+x22),1 0,x1 x2,1)程序运行后可得出结果(最速下降法,method=1):x=-0.8560,0mi
9、nf=0.0059j=10Elapsed time is 2. seconds.仅改变输入变量method的值得到牛顿法(method=2),程序运行后可得出结果:x=-0.3280,0minf=0.0027j=3Elapsed time is 0. seconds.仅改变输入变量method的值得到BFGS法(method=3),程序运行后可得出结果:x=-0.5761,0minf=0.9971j=8Elapsed time is 3. seconds.可以看出,仅就习题3来说,牛顿法迭代次数(3次)最少,运行时间(0.87s)最短。【文件名Excise_4.m】function x,min
10、f=Excise_4(x0)clcformat long;syms x1 x2;x=x1 x2;f=x12+2*x22-2*x1-6*x2-2*x1*x2;G=2 -2;-2 4;g=-2 -6;b=1 2 0 0;AA=1/2 1/2; -1 2; -1 0; 0 -1;A=AA; A1=; A0=; b0=; b1=; for i=1:length(A(:,1) if A(i,:)*x0=b(i) A10=A(i,:); A1=A1;A10; b1=b1;b(i); else A00=A(i,:); A0=A0;A00; b0=b0;b(i); endend while 1 if size
11、(A1)=0 0 ZA=G; Zg=-(G*x0+g); dl=inv(ZA)*Zg; d=dl; lambda=dl(3:length(dl),:); else ZA=G A1;A1 zeros(length(A1(:,1); Zg=-(G*x0+g);zeros(length(A1(:,1),1); dl=inv(ZA)*Zg; d=dl(1:2,:); lambda=dl(3:length(dl),:); end if norm(d)=0 break; else a=find(lambda=lmin); A0=A0;A1(a,:); b0=b0;b1(a); A1(a,:)=; b1(a
12、)=; end else x0ba=x0+d; newb=A0*x0ba-b0; bmax=max(newb); if bmax0 A2=A2;A0(i,:); b2=b2;b0(i); end end alfav=(A2*x0-b2)./(A2*d); alfa=min(-alfav); x0=x0+alfa.*d; end A=AA; A1=; A0=; b0=; b1=; for i=1:length(A(:,1) if A(i,:)*x0=b(i) A10=A(i,:); A1=A1;A10; b1=b1;b(i); else A00=A(i,:); A0=A0;A00; b0=b0;
13、b(i); end end endendx=x0minf=subs(f,findsym(f),x0)习题要求取两种点:(1)可行域内部点(取x0=0 0);(2)可行域边界点(取x0=2/3 4/3)。在Command Window 输入:Excise_4(0 0)程序运行后可得出结果:x=0.8,1.2minf=-7.2同理,在Command Window 输入:Excise_4(2/3 4/3)可得相同结果。【文件名Excise_5.m (脚本)】clearclcformat long;syms x1 x2 lambda miu1 miu2 miu3eps=1.0e-6;c=8; miu0
14、=0 0 0; lambda=0;x=x1 x2;miu=miu1 miu2 miu3;f=4*x1-x22-12; h=25-x12-x22;g1=10*x1-x12-x22+10*x2-34;g2=x1; g3=x2;zg=g1 g2 g3;comp=0 0 0;x0=0 0;while 1 zg0=subs(zg,findsym(zg),x0) y=Lagrange(x,c,miu0,lambda,x0) x1=BFGS(x0,x,c,miu0,lambda) h1=subs(h,findsym(h),x1) zg1=subs(zg,findsym(zg),x1) b=min(zg1,-
15、1/c*miu0) if h12+(norm(b)2eps2 break; else lambda=lambda+c*h1 miu0=min(comp,miu0+c*zg1) x0=x1 endendminx=x1minf=subs(f,findsym(f),x1)【文件名Lagrange.m (计算增广的Lagrange表达式)】function y=Lagrange(x,c,miu,lambda,x0);f1=4*x(1)-x(2)2-12; f=f1 0;h1=25-x(1)2-x(2)2; h=h1 0;g1=10*x(1)-x(1)2-x(2)2+10*x(2)-34;g2=x(1)
16、; g3=x(2);zg=g1 g2 g3;comp=0 0 0;y=f(1)+lambda*h(1)+c/2*(h(1)2);zg0=subs(zg,findsym(zg),x0);for i=1:3 if miu(i)+c*zg0(i)=right1 if left2=right2 break; else a=lambda0; lambda1=min(2*lambda0,(lambda0+b)/2); end else b=lambda0; lambda1=(lambda0+a)/2; end lambda0=lambda1;enda=lambda0;【文件名BFGS.m (精简习题3的m
17、ethod=3为适应乘子法的BFGS方法)】function minx=BFGS(x0,x,c,miu,lambda)syms Heps=1.0e-6;k=0 ;H0=eye(2);while 1 f=Lagrange(x,c,miu,lambda,x0); gf=jacobian(f,x); ggf=jacobian(gf,x); gf0=subs(gf,findsym(gf),x0); ggf0=subs(ggf,findsym(ggf),x0); if norm(gf0)eps break; else s0=-(H0*gf0); a=newWP(x,x0,s0,c,miu,lambda); x1=x0+a*s0; gf1=subs(gf,finds
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年产00万吨钢铁生产线建设合同
- 2024正式版车辆转让合同标准范本
- 土建承包合同范本2024年
- 2024幼儿园合作合同范文
- 上海买房合同书
- 2024个人店铺出租合同范本
- 2024华硕电脑经销商订货单合同大客户
- 商铺合作经营协议
- 2024临时工合同协议书版临时工合同范本
- 2024新媒体主播合同
- 中医脑病科缺血性中风(脑梗死恢复期)中医诊疗方案临床疗效分析总结
- 部编版语文二年级上册《语文园地三我喜欢的玩具》(教案)
- 软件开发项目验收方案
- 岗位整合整治与人员优化配置实施细则
- 康复治疗技术的职业规划课件
- 蜜雪冰城营销案例分析总结
- 交换机CPU使用率过高的原因分析及探讨
- 易制毒化学品安全管理岗位责任分工制度
- 住宿服务免责声明
- 2023年医疗机构消毒技术规范医疗机构消毒技术规范
- MOOC 家庭与社区教育-南京师范大学 中国大学慕课答案
评论
0/150
提交评论