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