Dynamic-Calibration/utils/YALMIP-master/extras/createsdplibfile.m

57 lines
1.6 KiB
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function createsdplibfile(F_struc,K, c, filename,integer_variables)
%CREATESDPLIBFILE Internal function to create SDPA data files
fid = fopen(filename,'w');
F_blksz = [];
if K.l > 0
F_blksz = ones(1,K.l);
else
F_blksz = [];
end
if K.s(1)>0
F_blksz = [F_blksz K.s];
end
try
fprintf(fid,'%s',['* SDPA format file. Generated by YALMIP ' datestr(now,0)]);fprintf(fid,'\r\n');
n_constraint_matrices = size(F_struc,2)-1;
n_blocks = size(F_blksz,2);
fprintf(fid,'%i',n_constraint_matrices);fprintf(fid,'\r\n');
fprintf(fid,'%i',n_blocks);fprintf(fid,'\r\n');
fprintf(fid,'%i ',F_blksz);fprintf(fid,'\r\n');
fprintf(fid,'%1.15f ',c);fprintf(fid,'\r\n');
% Another syntax in SDPLIB format
F_struc(:,1)=-F_struc(:,1);
% Save file (vectorization should be possible but does not seem to improve speed)
accumsize = [0 cumsum(F_blksz.^2)];
tol = sqrt(eps);
for Matrices = 0:n_constraint_matrices
for blk = 1:n_blocks
for i = 1:F_blksz(blk)
for j = i:F_blksz(blk)
el = F_struc((i-1)*F_blksz(blk)+j+accumsize(blk),1+Matrices);
if abs(el)>tol;
fprintf(fid,'%i %i %i %i %1.25f',full([Matrices blk i j el]));fprintf(fid,'\r\n');
end
end
end
end
end
if ~isempty(integer_variables)
fprintf(fid,'*INTEGER\r\n');
for i = 1:length(integer_variables)
fprintf(fid,'*%i ',integer_variables(i));
end
end
fclose(fid);
catch
fclose(fid);
end