if(index(j)>0), Aee=[Aee; Ai(j,:)]; end end
gk=H*x+c;
[m1,n1] = size(Aee);
[dk,lamk]=qsubp(H,gk,Aee,zeros(m1,1)); if(norm(dk)<=err) y=0.0; if(length(lamk)>ne)
[y,jk]=min(lamk(ne+1:length(lamk))); end if(y>=0) exitflag=0; else
exitflag=1; for(i=1:ni)
if(index(i) & (ne+sum(index(1:i)))==jk) index(i)=0; break; end end end
k=k+1; else
exitflag=1;
alpha=1.0; tm=1.0; for(i=1:ni)
if((index(i)==0)&(Ai(i,:)*dk<0))
tm1=(bi(i)-Ai(i,:)*x)/(Ai(i,:)*dk); if(tm1 alpha=min(alpha,tm); x = x+alpha*dk; if(tm<1), index(ti)=1; end end if(exitflag==0), break; end k=k+1; end output.fval=0.5*x'*H*x+c'*x; output.iter=k; qsubp.m文件 function [x,lambda]=qsubp(H,c,Ae,be) 11 / 13 ginvH=pinv(H); [m,n]=size(Ae); if (m>0) rb = Ae*ginvH*c + be; lambda = pinv(Ae*ginvH*Ae')*rb; x = ginvH*(Ae'*lambda-c); else x = -ginvH*c; lambda = zeros(m,1); end callqpact.m文件 function callqpact H=[2 0; 0 2]; c=[-2 -5]'; Ae=[ ]; be=[ ]; Ai=[1 -2; -1 -2; -1 2;1 0;0 1]; bi=[-2 -6 -2 0 0]'; x0=[0 0]'; [x, lambda, exitflag,output]=qpact(H,c,Ae,be,Ai,bi,x0)文档来自于网络搜索 运行结果: >>callqpact x = 1.4000 1.7000 lambda = 0.8000 exitflag = 0 output = fval: -6.4500 iter: 7 第七题 fun文件 function f=fun(x) f=abs(x(1))+abs(x(2))+abs(x(3))+abs(x(4)); 主程序 x0=[1;1;1;1]; A=[]; b=[]; 12 / 13 Aeq=[1 0 0 0.5;0 1 0.2 0.3;0 0.1 1 0.2];beq=[-1;0.2;1]; 文档来自于网络搜索 VLB=[]; VUB=[]; [x,fval]=fmincon('fun',x0,A,b,Aeq,beq,VLB,VUB) 运行结果 x = -1.0000 -0.0000 1.0000 0.0000 fval = 2.0000 / 13 13
优化方法上机作业



