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

121 lines
2.7 KiB
Mathematica
Raw Normal View History

2019-12-18 11:25:45 +00:00
function [oldvariable,sqrList] = expandforindex(sqrList,candidates,nonconvindex);
%EXPANDFORINDEX Internal function for organizing nonlinear variables
% Expand the incoming variables
if 1
z = sqrList(:,1);
x1_list = find(z==candidates(2));
if candidates(2)==candidates(1)
x2_list = x1_list;
else
x2_list = find(z==candidates(1));
end
temp = [];
if isempty(x1_list)
temp = candidates(2);
else
temp = sqrList(x1_list,2:end);
end
if isempty(x2_list)
temp = [temp candidates(1)];
else
temp = [temp sqrList(x2_list,2:end)];
end
temp = sort(temp(find(any(temp,1))));
oldsqrList = sqrList;
if length(temp)>size(sqrList,2)-1
% This one cannot already exist
index = [];
%sqrList = [sqrList zeros(size(sqrList,1),1+size(sqrList,2)-length(temp));nonconvindex temp(end:-1:1)];
sqrList = [sqrList zeros(size(sqrList,1),1+length(temp)-size(sqrList,2));nonconvindex temp(end:-1:1)];
else
% sqrList = [sqrList;nonconvindex temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
% searchfor = sqrList(end,2:end);
searchfor = [temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
searchin = sqrList(:,2:end);
% Simple Hash
key = sum(searchfor);
tbl = sum(searchin,2);
possible = find(tbl==key);
index = findrows(searchin(possible,:),searchfor);
if isempty(index)
sqrList = [sqrList;nonconvindex temp(end:-1:1) zeros(1,size(sqrList,2)-length(temp)-1)];
else
index = possible(index);
end
end
%searchfor = sqrList(end,2:end);
%index = findrows(sqrList(1:end-1,2:end),searchfor);
if length(index)>1
index
end
if ~isempty(index)
oldvariable = sqrList(index,1);
sqrList = oldsqrList;
else
oldvariable = [];
end
else
% Expand the list to begin with
if isempty(sqrList)
sqrList = [nonconvindex candidates];
else
sqrList = [sqrList; nonconvindex candidates(2) candidates(1) zeros(1,size(sqrList,2)-3)];
end
bottom = size(sqrList,1);
%%FIXz = sqrList(1:bottom,1);
z = sqrList(:,1);
x1_list = find(z==candidates(2));
if candidates(2)==candidates(1)
x2_list = x1_list;
else
x2_list = find(z==candidates(1));
end
temp = [];
if isempty(x1_list)
temp = sqrList(bottom,2);
else
temp = sqrList(x1_list,2:end);
end
if isempty(x2_list)
temp = [temp sqrList(bottom,3)];
else
temp = [temp sqrList(x2_list,2:end)];
end
temp = sort(temp(find(any(temp,1))));
sqrList(bottom,2:2+length(temp)-1)=temp(end:-1:1);%fliplr(sort(temp));
bottom = bottom+1;
searchfor = sqrList(end,2:end);
index = findrows(sqrList(1:end-1,2:end),searchfor);
if ~isempty(index)
oldvariable = sqrList(index,1);
sqrList = sqrList(1:end-1,:);
else
oldvariable = [];
end
end