41 lines
1.4 KiB
Matlab
Executable File
41 lines
1.4 KiB
Matlab
Executable File
function appendYALMIPvariables(lmi_variables,mt,variabletype,hashed_monoms,current_hash);
|
|
|
|
if nargin == 1
|
|
[mt,variabletype,hashed_monoms,current_hash] = yalmip('monomtable');
|
|
end
|
|
|
|
% Update monomtable and pre-calculated variable type
|
|
n_mt = size(mt,1);
|
|
m_mt = size(mt,2);
|
|
newmt = [];
|
|
if min(lmi_variables)>m_mt % New variables
|
|
if size(mt,1)~=size(mt,2)
|
|
mt(size(mt,1),size(mt,1))=0;
|
|
end
|
|
% This was faster before. However in recent versions of matlab, there
|
|
% is a compiled version of blkdiag available
|
|
% fill=spalloc(size(mt,1),length(lmi_variables),0);
|
|
% mt=[mt fill;fill' speye(length(lmi_variables))];
|
|
if isempty(mt)
|
|
mt = speye(length(lmi_variables));
|
|
newmt = mt;
|
|
elseif length(lmi_variables)==1
|
|
% Slightly faster than general case
|
|
newmt = sparse(1);
|
|
mt(end+1,end+1) = newmt;
|
|
else
|
|
newmt = speye(length(lmi_variables));
|
|
mt=blkdiag(mt,newmt);
|
|
end
|
|
else
|
|
mt(lmi_variables,lmi_variables) = speye(length(lmi_variables));
|
|
end
|
|
variabletype(1,size(mt,1)) = 0;
|
|
if ~isempty(newmt)
|
|
new_hash = 3*rand_hash(size(mt,2),size(newmt,2),1);
|
|
hashed_monoms = [hashed_monoms;full(newmt*new_hash)];
|
|
current_hash = [current_hash;new_hash];
|
|
yalmip('setmonomtable',mt,variabletype,hashed_monoms,current_hash);
|
|
else
|
|
yalmip('setmonomtable',mt,variabletype);
|
|
end |