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

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