121 lines
2.7 KiB
Mathematica
121 lines
2.7 KiB
Mathematica
|
|
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
|