38 lines
1.1 KiB
Matlab
Executable File
38 lines
1.1 KiB
Matlab
Executable File
%%*****************************************************************
|
|
%% schurmat_lblk: compute A*D*A'
|
|
%%*****************************************************************
|
|
%% SDPT3: version 4.0
|
|
%% Copyright (c) 1997 by
|
|
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
|
|
%% Last Modified: 16 Sep 2004
|
|
%%*****************************************************************
|
|
|
|
function [schur,UU,EE] = schurmat_lblk(blk,At,par,schur,UU,EE,p,dd)
|
|
|
|
global idxdenAl
|
|
|
|
iter = par.iter;
|
|
n = sum(blk{p,2});
|
|
|
|
if (iter==1)
|
|
idxdenAl{p} = checkdense(At{p}');
|
|
end
|
|
ddsch = dd{p};
|
|
if ~isempty(idxdenAl{p});
|
|
idxden = idxdenAl{p};
|
|
len = length(idxden);
|
|
Ad = At{p}(idxden,:)' *spdiags(sqrt(ddsch(idxden)),0,len,len);
|
|
UU = [UU, Ad];
|
|
if isempty(EE)
|
|
count = 0;
|
|
else
|
|
count = max(max(EE(:,1)),max(EE(:,2)));
|
|
end
|
|
tmp = count + [1:len]';
|
|
EE = [EE; [tmp, tmp, -ones(len,1)] ];
|
|
ddsch(idxden) = zeros(len,1);
|
|
end
|
|
schurtmp = At{p}' *spdiags(ddsch,0,n,n) *At{p};
|
|
schur = schur + schurtmp;
|
|
%%*******************************************************************
|