50 lines
2.0 KiB
Mathematica
50 lines
2.0 KiB
Mathematica
|
|
%%********************************************************************
|
||
|
|
%% blkbarrier: calculate
|
||
|
|
%% [-v(p)*logdet(X{p}), v(p)*logdet(Z{p}) + n*v(p)*(1-log(v(p)))]
|
||
|
|
%% [-v(p)*log(gam(X{p})), v(p)*log(gam(Z{p})) + v(p)]
|
||
|
|
%% [-v(p)*log(X{p}), v(p)*log(Z{p}) + n*v(p)*(1-log(v(p)))]
|
||
|
|
%%*****************************************************************
|
||
|
|
%% SDPT3: version 4.0
|
||
|
|
%% Copyright (c) 1997 by
|
||
|
|
%% K.C. Toh, M.J. Todd, R.H. Tutuncu
|
||
|
|
%% Last Modified: 16 Sep 2004
|
||
|
|
%%*****************************************************************
|
||
|
|
|
||
|
|
function objadd = blkbarrier(blk,X,Z,Xchol,Zchol,v);
|
||
|
|
|
||
|
|
objadd = zeros(1,2); tmp = zeros(1,2);
|
||
|
|
for p = 1:size(blk,1)
|
||
|
|
pblk = blk(p,:);
|
||
|
|
vp = v{p};
|
||
|
|
idx = find(vp > 0);
|
||
|
|
if ~isempty(idx)
|
||
|
|
vpsub = vp(idx);
|
||
|
|
if size(vpsub,1) < size(vpsub,2); vpsub = vpsub'; end
|
||
|
|
if strcmp(pblk{1},'s')
|
||
|
|
ss = [0, cumsum(pblk{2})];
|
||
|
|
logdetX = 2*log(diag(Xchol{p}));
|
||
|
|
logdetZ = 2*log(diag(Zchol{p}));
|
||
|
|
logdetXsub = zeros(length(idx),1);
|
||
|
|
logdetZsub = zeros(length(idx),1);
|
||
|
|
for k = 1:length(idx)
|
||
|
|
idxtmp = [ss(idx(k))+1:ss(idx(k)+1)];
|
||
|
|
logdetXsub(k) = sum(logdetX(idxtmp));
|
||
|
|
logdetZsub(k) = sum(logdetZ(idxtmp));
|
||
|
|
end
|
||
|
|
tmp(1) = -sum(vpsub.*logdetXsub);
|
||
|
|
tmp(2) = sum(vpsub.*logdetZsub + (pblk{2}(idx)').*vpsub.*(1-log(vpsub)));
|
||
|
|
elseif strcmp(pblk{1},'q')
|
||
|
|
gamX = sqrt(qops(pblk,X{p},X{p},2));
|
||
|
|
gamZ = sqrt(qops(pblk,Z{p},Z{p},2));
|
||
|
|
tmp(1) = -sum(vpsub.*log(gamX(idx)));
|
||
|
|
tmp(2) = sum(vpsub.*log(gamZ(idx)) + vpsub);
|
||
|
|
elseif strcmp(pblk{1},'l')
|
||
|
|
logX = log(X{p}); logZ = log(Z{p});
|
||
|
|
tmp(1) = -sum(vpsub.*logX(idx));
|
||
|
|
tmp(2) = sum(vpsub.*logZ(idx) + vpsub.*(1-log(vpsub)));
|
||
|
|
end
|
||
|
|
objadd = objadd + tmp;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
%%********************************************************************
|