大连理工优化方法-增广拉格朗日方法MATLAB程序_第1页
大连理工优化方法-增广拉格朗日方法MATLAB程序_第2页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精品文档 1欢迎。下载 上机大作业 II 定义目标函数 fun function f=fun(x) x1=x(1); x2=x(2); f=4*x1-x2A2-12; 定义目标函数梯度函数 dfun function f=dfun(x) x2=x(2); f=4;-2*x2; 定义等式约束函数 hf function qua=hf(x) qua=25-x(1)A2-x(2)A2; 定义等式约束函数梯度函数 dhf function qua=dhf(x) qua=-2*x(1);-2*x(2); 定义不等式约束函数 gfun function inq=gfun(x) inq=10*x(1)-x(

2、1)A2+10*x(2)-x(2)A2-34; 定义不等式约束梯度数 dgf function inq=dgf(x) inq=10-2*x(1);10-2*x(2); 定义增广拉格朗日函数 mpsi function psi=mpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) f=feval(fun,x); he=feval(hf,x); gi=feval(gfun,x); l=length(he); m=length(gi); psi=f; s1=0; for i=1:l psi=psi-he(i)*mu(i); s1=s1+he(i)A2; e

3、nd psi=psi+0.5*sigma*s1; s2=0.0; for i=1:m s3=max(0.0, lambda(i) - sigma*gi(i); s2=s2+s3A2-lambda(i)A2; end psi=psi+s2/(2.0*sigma); 定义增广拉格朗日函数梯度函数 dmpsi function dpsi=dmpsi(x,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) dpsi=feval(dfun,x); he=feval(hf,x); gi=feval(gfun,x); dhe=feval(dhf,x); dgi=feval(d

4、gf,x); 精品文档 2欢迎。下载 l=length(he); m=length(gi); for i=1:l dpsi=dpsi+(sigma*he(i)-mu(i)*dhe(:,i); end for i=1:m dpsi=dpsi+(sigma*gi(i)-lambda(i)*dgi(:,i); end 定义 BFGS 法函数函数 bfgs function x,val,k=bfgs(mpsi,dmpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma) maxk=1000; rho=0.5; sigma1=0.4; epsilon1=1e-4;

5、 k=0; n=length(x0); Bk=eye(n); while(kmaxk) gk=feval(dmpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma); if(norm(gk)epsilon1) break; end dk=-Bkgk; m=0; mk=0; while(m20) newf=feval(mpsi,x0+rhoAm*dk,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma); oldf=feval(mpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma)

6、; if(n ewf0) Bk=Bk-(Bk*sk)*sk*Bk)/(sk*Bk*sk)+(yk*yk)/(yk*sk); end k=k+1; x0=x; end val=feval(mpsi,x0,fun,hf,gfun,dfun,dhf,dgf,mu,lambda,sigma); 精品文档 3欢迎。下载 定义增广拉格朗日乘子法函数 multphr function answer=multphr(fun,hf,gfun,dfun,dhf,dgf,x0) maxk=5000; sigma=2.0; eta=2.0; theta=0.8; k=0; ink=0; epsilon=1e-4; x

7、=x0; he=feval(hf,x); gi=feval(gfun,x); l=length(he); m=length(gi); mu=0.1*ones(l,1); lambda=0.1*ones(m,1); btak=10; btaold=10; while(btakepsilon&kepsilon if(k=2&btak theta*btaold) sigma=eta*sigma; end for i=1:l mu(i)=mu(i)-sigma*he(i); end for i=1:m lambda(i)=max(0.0,lambda(i)-sigma*gi(i); end end k=k+1; btaold=btak; x0=x; end f=feval(fun,x); x f mu 精品文档 4欢迎。下载 lambda k 运行求解 x0=0;0 x0 = 0 0 multphr(fun,hf,gfun,dfun,dhf,dgf,x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论