📄 yalmip.m
字号:
while ~found & i <=length(internal_sdpvarstate.ExtendedMap)
if varargin{2} == getvariables(internal_sdpvarstate.ExtendedMap(i).var)
found = 1;
varargout{1} = internal_sdpvarstate.ExtendedMap(i);
end
i = i + 1;
end
else
% If requests several extended variables, returns as cell
found = zeros(1,length(varargin{2}));
varargout{1} = cell(0,length(varargin{2}));
i = 1;
while ~all(found) & i <=length(internal_sdpvarstate.ExtendedMap)
j = find(varargin{2} == getvariables(internal_sdpvarstate.ExtendedMap(i).var));
if ~isempty(j)
found(j) = 1;
varargout{1}{j} = internal_sdpvarstate.ExtendedMap(i);
end
i = i + 1;
end
end
case 'rankvariables'
i = 1;
rankvariables = [];
dualrankvariables = [];
for i = 1:length(internal_sdpvarstate.ExtendedMap)
if strcmpi('rank',internal_sdpvarstate.ExtendedMap(i).fcn)
rankvariables = [rankvariables getvariables(internal_sdpvarstate.ExtendedMap(i).var)];
end
if strcmpi('dualrank',internal_sdpvarstate.ExtendedMap(i).fcn)
dualrankvariables = [dualrankvariables getvariables(internal_sdpvarstate.ExtendedMap(i).var)];
end
end
varargout{1} = rankvariables;
varargout{2} = dualrankvariables;
% case 'dualrankvariables'
% i = 1;
% rankvariables = [];
% for i = 1:length(internal_sdpvarstate.ExtendedMap)
% if isequal('dualrank',internal_sdpvarstate.ExtendedMap(i).fcn)
% rankvariables = [rankvariables getvariables(internal_sdpvarstate.ExtendedMap(i).var)];
% end
% end
% varargout{1} = rankvariables;
case 'lmiid'
if not(isempty(internal_setstate.LMIid))
internal_setstate.LMIid = internal_setstate.LMIid+1;
varargout{1}=internal_setstate.LMIid;
else
internal_setstate.LMIid=1;
varargout{1}=internal_setstate.LMIid;
end
case 'setnonlinearvariables'
error('Internal error (ref. setnonlinearvariables). Report please.')
case {'clear'}
W = evalin('caller','whos');
for i = 1:size(W,1)
if strcmp(W(i).class,'sdpvar') | strcmp(W(i).class,'lmi')
evalin('caller', ['clear ' W(i).name ';']);
end
end
internal_setstate.LMIid = 0;
internal_setstate.duals_index = [];
internal_setstate.duals_data = [];
internal_setstate.duals_associated_index = [];
internal_setstate.duals_associated_data = [];
internal_sdpvarstate.sosid = 0;
internal_sdpvarstate.sos_index = [];
internal_sdpvarstate.sos_data = [];
internal_sdpvarstate.sos_ParV = [];
internal_sdpvarstate.sos_Q = [];
internal_sdpvarstate.sos_v = [];
internal_sdpvarstate.monomtable = spalloc(0,0,0);
internal_sdpvarstate.hashedmonomtable = [];
internal_sdpvarstate.hash = [];
internal_sdpvarstate.boundlist = [];
internal_sdpvarstate.variabletype = spalloc(0,0,0);
internal_sdpvarstate.intVariables = [];
internal_sdpvarstate.binVariables = [];
internal_sdpvarstate.uncVariables = [];
internal_sdpvarstate.parVariables = [];
internal_sdpvarstate.extVariables = [];
internal_sdpvarstate.evalVariables = [];
internal_sdpvarstate.logicVariables = [];
;internal_sdpvarstate.complexpair = [];
internal_sdpvarstate.internalconstraints = [];
internal_sdpvarstate.ExtendedMap = [];
internal_sdpvarstate.optSolution.info = 'Initialized by YALMIP';
internal_sdpvarstate.optSolution.variables = [];
internal_sdpvarstate.optSolution.optvar = [];
internal_sdpvarstate.optSolution.values = [];
internal_sdpvarstate.nonCommutingTable = [];
case 'cleardual'
if nargin==1
internal_setstate.duals_index = [];
internal_setstate.duals_data = [];
internal_setstate.duals_associated_index = [];
internal_setstate.duals_associated_data = [];
else
if ~isempty(internal_setstate.duals_index)
internal_setstate.lmiid = varargin{2};
for i = 1:length(varargin{2})
j = find(internal_setstate.duals_index==internal_setstate.lmiid(i));
if ~isempty(j)
internal_setstate.duals_index = internal_setstate.duals_index([1:1:j-1 j+1:1:length(internal_setstate.duals_index)]);
internal_setstate.duals_data = {internal_setstate.duals_data{[1:1:j-1 j+1:1:length(internal_setstate.duals_data)]}};
end
end
end
end
case 'associatedual'
internal_setstate.duals_associated_index = [internal_setstate.duals_associated_index varargin{2}];
internal_setstate.duals_associated_data{end+1} = varargin{3};
case 'addcomplexpair'
internal_sdpvarstate.complexpair = [internal_sdpvarstate.complexpair;varargin{2}];
case 'getcomplexpair'
varargout{1} = internal_sdpvarstate.complexpair;
return
case 'setallsolution'
internal_sdpvarstate.optSolution.optvar = varargin{2}.optvar;
internal_sdpvarstate.optSolution.variables = varargin{2}.variables;
internal_sdpvarstate.optSolution.values = [];
return
case 'setvalues'
internal_sdpvarstate.optSolution.values = varargin{2};
case 'setsolution'
if isempty(internal_sdpvarstate.optSolution.variables)
internal_sdpvarstate.optSolution = varargin{2};
else
% Just save some stuff first
newSolution = varargin{2};
oldSolution = internal_sdpvarstate.optSolution;
optSolution = varargin{2};
keep_these = find(~ismember(oldSolution.variables,newSolution.variables));
internal_sdpvarstate.optSolution.optvar = [oldSolution.optvar(keep_these);newSolution.optvar(:)];
internal_sdpvarstate.optSolution.variables = [oldSolution.variables(keep_these);newSolution.variables(:)];
end
% clear evaluated values (only used cache-wise)
internal_sdpvarstate.optSolution.values = [];
return
case 'getsolution'
varargout{1} = internal_sdpvarstate.optSolution;
return
case 'setdual'
internal_setstate.duals_index = varargin{2};
internal_setstate.duals_data = varargin{3};
if ~isempty(internal_setstate.duals_associated_index)
if ~isempty(intersect(internal_setstate.duals_index,internal_setstate.duals_associated_index))
for i = 1:length(internal_setstate.duals_index)
itshere = find(internal_setstate.duals_associated_index==internal_setstate.duals_index(i));
if ~isempty(itshere)
assign(internal_setstate.duals_associated_data{itshere},internal_setstate.duals_data{i});
end
end
end
end
case 'dual'
if isempty(internal_setstate.duals_index)
varargout{1}=[];
else
LMIid = varargin{2};
index_to_dual = find(LMIid==internal_setstate.duals_index);
if isempty(index_to_dual)
varargout{1}=[];
else
varargout{1} = internal_setstate.duals_data{index_to_dual};
end
end
case 'clearsos'
if nargin==1
internal_sdpvarstate.sos_index = [];
internal_sdpvarstate.sos_data = [];
internal_sdpvarstate.sos_ParV = [];
internal_sdpvarstate.sos_Q = [];
internal_sdpvarstate.sos_v = [];
end
case 'setsos'
if ~isempty(internal_sdpvarstate.sos_index)
where = find(internal_sdpvarstate.sos_index==varargin{2});
if ~isempty(where)
internal_sdpvarstate.sos_index(where) = varargin{2};
internal_sdpvarstate.sos_data{where} = varargin{3};
internal_sdpvarstate.sos_ParV{where} = varargin{4};
internal_sdpvarstate.sos_Q{where} = varargin{5};
internal_sdpvarstate.sos_v{where} = varargin{6};
else
internal_sdpvarstate.sos_index(end+1) = varargin{2};
internal_sdpvarstate.sos_data{end+1} = varargin{3};
internal_sdpvarstate.sos_ParV{end+1} = varargin{4};
internal_sdpvarstate.sos_Q{end+1} = varargin{5};
internal_sdpvarstate.sos_v{end+1} = varargin{6};
end
else
internal_sdpvarstate.sos_index(end+1) = varargin{2};
internal_sdpvarstate.sos_data{end+1} = varargin{3};
internal_sdpvarstate.sos_ParV{end+1} = varargin{4};
internal_sdpvarstate.sos_Q{end+1} = varargin{5};
internal_sdpvarstate.sos_v{end+1} = varargin{6};
end
case 'sosid'
if not(isempty(internal_sdpvarstate.sosid))
internal_sdpvarstate.sosid = internal_sdpvarstate.sosid+1;
varargout{1}=internal_sdpvarstate.sosid;
else
internal_sdpvarstate.sosid=1;
varargout{1}=internal_sdpvarstate.sosid;
end
case 'getsos'
if isempty(internal_sdpvarstate.sos_index)
varargout{1}=[];
varargout{2}=[];
varargout{3}=[];
varargout{4}=[];
else
SOSid = varargin{2};
index_to_sos = find(SOSid==internal_sdpvarstate.sos_index);
if isempty(index_to_sos)
varargout{1}=[];
varargout{2}=[];
varargout{3}=[];
varargout{4}=[];
else
varargout{1} = internal_sdpvarstate.sos_data{index_to_sos};
varargout{2} = internal_sdpvarstate.sos_ParV{index_to_sos};
varargout{3} = internal_sdpvarstate.sos_Q{index_to_sos};
varargout{4} = internal_sdpvarstate.sos_v{index_to_sos};
% FIX
end
end
case 'getinternalsetstate'
varargout{1} = internal_setstate; % Get internal state, called from saveobj
case 'setinternalsetstate'
internal_setstate = varargin{2}; % Set internal state, called from loadobj
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -