43 lines
1.1 KiB
Mathematica
43 lines
1.1 KiB
Mathematica
|
|
function [Lc,Mc,Rc] = compressfactors(L,M,R)
|
||
|
|
|
||
|
|
Lc = {};
|
||
|
|
Rc = {};
|
||
|
|
Mc = {};
|
||
|
|
taken = zeros(1,length(M));
|
||
|
|
for i = 1:length(M)
|
||
|
|
Lsameas = [];
|
||
|
|
Rsameas = [];
|
||
|
|
if ~taken(i)
|
||
|
|
for j = i+1:length(M)
|
||
|
|
if isequal(M{i},M{j})
|
||
|
|
if isequal(L{i},L{j})
|
||
|
|
Lsameas = [Lsameas j];
|
||
|
|
taken(j) = 1;
|
||
|
|
elseif isequal(R{i},R{j})
|
||
|
|
Rsameas = [Rsameas j];
|
||
|
|
taken(j) = 1;
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if isempty(Rsameas) & ~isempty(Lsameas)
|
||
|
|
Lc{end+1} = L{i};
|
||
|
|
Mc{end+1} = M{i};
|
||
|
|
Rc{end+1} = R{i};
|
||
|
|
for j = 1:length(Lsameas)
|
||
|
|
Rc{end} = Rc{end} + R{Lsameas(j)};
|
||
|
|
end
|
||
|
|
elseif isempty(Lsameas) & ~isempty(Rsameas)
|
||
|
|
Lc{end+1} = L{i};
|
||
|
|
Mc{end+1} = M{i};
|
||
|
|
Rc{end+1} = R{i};
|
||
|
|
for j = 1:length(Rsameas)
|
||
|
|
Lc{end} = Lc{end} + L{Rsameas(j)};
|
||
|
|
end
|
||
|
|
elseif ~taken(i)
|
||
|
|
Lc{end+1} = L{i};
|
||
|
|
Mc{end+1} = M{i};
|
||
|
|
Rc{end+1} = R{i};
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|