example3_11.m
来自「Matlab 6.X辅助优化计算与设计----源代码」· M 代码 · 共 46 行
M
46 行
function [x,y,ier]=minqdef(c,G,A,b,eq,prt,xx);
R=chol(G);
[m,n]=size(A);
A0=A/R;
GG=A0*A0';
c0=R'\c;
cc=-b-A0*c0;
yo=inf+zeros(m,1);
yu=zeros(m,1);yu(eq)=-yo(eq);
[y,fct,ier]=minq(0,cc,GG,yu,yo,prt);
x=R\(A0'*y-c0);
if ier==99, return; end;
% check for accuracy
res=A*x-b;ressmall=nnz(A)*eps*(abs(A)*abs(x)+abs(b));
res(~eq)=min(res(~eq),0);
if prt,
disp('residual (first row) small if comparable to second row')
disp([res,ressmall]')
end;
if min(abs(res)<=ressmall),
% accuracy satisfactory
ier=0;
return;
end;
% one step of iterative refinement
if prt,
disp('one step of iterative refinement')
end;
[dy,fct,ier]=minq(0,-res,GG,yu-y,yo-y,prt);
x=x+R\(A0'*dy);
y=y+dy;
% check for accuracy
res=A*x-b;ressmall=nnz(A)*eps*(abs(A)*abs(x)+abs(b));
res(~eq)=min(res(~eq),0);
if min(abs(res)<=sqrt(nnz(A))*ressmall),
% accuracy satisfactory
ier=0;
else
% feasible set probably empty
ier=1;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?