60 lines
1.5 KiB
Mathematica
60 lines
1.5 KiB
Mathematica
|
|
function prob = appendMosekSDPdata(F_struc,K,prob)
|
||
|
|
|
||
|
|
prob.bardim = K.s;
|
||
|
|
prob.barc.subj = [];
|
||
|
|
prob.barc.subk = [];
|
||
|
|
prob.barc.subl = [];
|
||
|
|
prob.barc.val = [];
|
||
|
|
prob.bara.subi = [];
|
||
|
|
prob.bara.subj = [];
|
||
|
|
prob.bara.subk = [];
|
||
|
|
prob.bara.subl = [];
|
||
|
|
prob.bara.val = [];
|
||
|
|
|
||
|
|
C = F_struc(:,1);
|
||
|
|
A = -F_struc(:,2:end);
|
||
|
|
|
||
|
|
% -- Faster fix by Shahar
|
||
|
|
tops = [1 cumsum(K.s.^2)+1];
|
||
|
|
top = 1+K.f+K.l+sum(K.q);
|
||
|
|
[ii,jj,kk] = find(A(top:top + sum(K.s.^2)-1,:));
|
||
|
|
allcon = floor(interp1(tops,1:length(tops),ii,'linear'));
|
||
|
|
all_iilocal = ii-tops(allcon)'+1;
|
||
|
|
a = all_iilocal;
|
||
|
|
b = K.s(allcon);
|
||
|
|
allcol = ceil(a(:)./b(:))';
|
||
|
|
allrow = a(:)' - (allcol-1).*b(:)';
|
||
|
|
allvar = jj;
|
||
|
|
allval = kk;
|
||
|
|
% sort (for backward compatibility?)
|
||
|
|
[~,ind_sort] = sort(allcon);
|
||
|
|
allcon = allcon(ind_sort)';
|
||
|
|
allcol = allcol(ind_sort)';
|
||
|
|
allrow = allrow(ind_sort)';
|
||
|
|
allvar = allvar(ind_sort)';
|
||
|
|
allval = allval(ind_sort)';
|
||
|
|
% --
|
||
|
|
|
||
|
|
keep = find(allrow >= allcol);
|
||
|
|
allcol = allcol(keep);
|
||
|
|
allrow = allrow(keep);
|
||
|
|
allcon = allcon(keep);
|
||
|
|
allvar = allvar(keep);
|
||
|
|
allval = allval(keep);
|
||
|
|
prob.bara.subi = [prob.bara.subi allvar];
|
||
|
|
prob.bara.subj = [prob.bara.subj allcon];
|
||
|
|
prob.bara.subk = [prob.bara.subk allrow];
|
||
|
|
prob.bara.subl = [prob.bara.subl allcol];
|
||
|
|
prob.bara.val = [prob.bara.val allval];
|
||
|
|
|
||
|
|
for j = 1:length(K.s)
|
||
|
|
n = K.s(j);
|
||
|
|
Ci = C(top:top+n^2-1);
|
||
|
|
Ci = tril(reshape(Ci,n,n));
|
||
|
|
[k,l,val] = find(Ci);
|
||
|
|
prob.barc.subj = [prob.barc.subj j*ones(1,length(k))];
|
||
|
|
prob.barc.subk = [prob.barc.subk k(:)'];
|
||
|
|
prob.barc.subl = [prob.barc.subl l(:)'];
|
||
|
|
prob.barc.val = [prob.barc.val val(:)'];
|
||
|
|
top = top + n^2;
|
||
|
|
end
|