76 lines
2.1 KiB
Matlab
Executable File
76 lines
2.1 KiB
Matlab
Executable File
%******************************************************************
|
|
%% svec: compute the vector svec(M),
|
|
%%
|
|
%% x = svec(blk,M,isspx);
|
|
%%*****************************************************************
|
|
%% SDPT3: version 4.0
|
|
%% Copyright (c) 1997 by
|
|
%% Kim-Chuan Toh, Michael J. Todd, Reha H. Tutuncu
|
|
%% Last Modified: 16 Sep 2004
|
|
%%*****************************************************************
|
|
|
|
function x = svec(blk,M,isspx);
|
|
|
|
if iscell(M)
|
|
if (size(blk,1) ~= size(M,1))
|
|
error('svec: number of rows in blk and M not equal');
|
|
end
|
|
if (nargin == 2)
|
|
%%if (size(M,2) == 1)
|
|
%% isspx = zeros(size(blk,1),1);
|
|
%%else
|
|
%% isspx = ones(size(blk,1),1);
|
|
%%end
|
|
isspx = ones(size(blk,1),1);
|
|
else
|
|
if (length(isspx) < size(blk,1))
|
|
isspx = ones(size(blk,1),1);
|
|
end
|
|
end
|
|
x = cell(size(blk,1),1);
|
|
for p=1:size(blk,1)
|
|
pblk = blk(p,:);
|
|
n = sum(pblk{2}); m = size(M,2);
|
|
if strcmp(pblk{1},'s')
|
|
n2 = sum(pblk{2}.*(pblk{2}+1))/2;
|
|
if (isspx(p));
|
|
x{p} = sparse(n2,m);
|
|
else
|
|
x{p} = zeros(n2,m);
|
|
end
|
|
numblk = length(pblk{2});
|
|
if (pblk{2} > 0)
|
|
for k = 1:m
|
|
if (numblk > 1) & ~issparse(M{p,k});
|
|
x{p}(:,k) = mexsvec(pblk,sparse(M{p,k}),isspx(p));
|
|
else
|
|
x{p}(:,k) = mexsvec(pblk,M{p,k},isspx(p));
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if (isspx(p))
|
|
x{p} = sparse(n,m);
|
|
else
|
|
x{p} = zeros(n,m);
|
|
end
|
|
for k = 1:m
|
|
x{p}(:,k) = M{p,k};
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if strcmp(blk{1},'s')
|
|
numblk = length(blk{2});
|
|
if (numblk > 1) & ~issparse(M);
|
|
x = mexsvec(blk,sparse(M),1);
|
|
else
|
|
x = mexsvec(blk,sparse(M));
|
|
end
|
|
else
|
|
x = M;
|
|
end
|
|
end
|
|
%%**********************************************************
|
|
|