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

71 lines
2.6 KiB
Matlab
Executable File

function [constants,general,newsingles,newpairs] = compressfactors2(constants,general,singles,pairs)
% Author Johan Löfberg
% $Id: compressfactors2.m,v 1.1 2009-11-03 10:30:33 joloef Exp $
newpairs = {};
taken = zeros(1,length(pairs));
for i = 1:length(pairs)
Lsameas = [];
Rsameas = [];
LsameasR = [];
RsameasL = [];
if ~taken(i)
for j = i+1:length(pairs)
% if ~isequal(pairs{i}.M,pairs{j}.M)
% if isequal(pairs{i}.M,pairs{j}.M',1)
% pairs{j}.M = pairs{i}.M;
% temp = pairs{j}.L;
% pairs{j}.L = pairs{j}.R';
% pairs{j}.R = temp';
% end
% end
if isequal(pairs{i}.M,pairs{j}.M,1)
if isequal(pairs{i}.L,pairs{j}.L)
Lsameas = [Lsameas j];
taken(j) = 1;
elseif isequal(pairs{i}.R,pairs{j}.R)
Rsameas = [Rsameas j];
taken(j) = 1;
elseif isequal(pairs{i}.M,pairs{i}.M',1)
if isequal(pairs{i}.L,pairs{j}.R')
temp = pairs{j}.R;
pairs{j}.R = pairs{j}.L';
pairs{j}.L = temp';
Lsameas = [Lsameas j];
taken(j) = 1;
elseif isequal(pairs{i}.R,pairs{j}.L')
temp = pairs{j}.R;
pairs{j}.R = pairs{j}.L';
pairs{j}.L = temp';
Rsameas = [Rsameas j];
taken(j) = 1;
end
end
end
end
if isempty(Rsameas) & ~isempty(Lsameas)
newpairs{end+1}.L = pairs{i}.L;
newpairs{end}.M = pairs{i}.M;
newpairs{end}.R = pairs{i}.R;
for j = 1:length(Lsameas)
newpairs{end}.R = newpairs{end}.R + pairs{Lsameas(j)}.R;
end
elseif isempty(Lsameas) & ~isempty(Rsameas)
newpairs{end+1}.L = pairs{i}.L;
newpairs{end}.M = pairs{i}.M;
newpairs{end}.R = pairs{i}.R;
for j = 1:length(Rsameas)
newpairs{end}.L = newpairs{end}.L + pairs{Rsameas(j)}.L;
end
elseif ~taken(i)
newpairs{end+1}.L = pairs{i}.L;
newpairs{end}.M = pairs{i}.M;
newpairs{end}.R = pairs{i}.R;
end
end
end
newsingles = singles;