71 lines
2.6 KiB
Mathematica
71 lines
2.6 KiB
Mathematica
|
|
function [constants,general,newsingles,newpairs] = compressfactors2(constants,general,singles,pairs)
|
|||
|
|
|
|||
|
|
% Author Johan L<EFBFBD>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;
|