40 lines
1.3 KiB
Mathematica
40 lines
1.3 KiB
Mathematica
|
|
function Freal = imag2reallmi(F)
|
||
|
|
|
||
|
|
F = flatten(F);
|
||
|
|
Counter = size(F.clauses,2);
|
||
|
|
Freal = F;
|
||
|
|
j=1;
|
||
|
|
for i = 1:Counter
|
||
|
|
if isreal(F.clauses{i}.data)
|
||
|
|
Freal.clauses{j}=F.clauses{i};
|
||
|
|
j = j+1;
|
||
|
|
else
|
||
|
|
switch F.clauses{i}.type
|
||
|
|
case 1
|
||
|
|
|
||
|
|
if hasfactors(Freal.clauses{j}.data)
|
||
|
|
% We use factor-tracking lifting
|
||
|
|
Freal.clauses{j}.data = lift2real(F.clauses{j}.data);
|
||
|
|
else
|
||
|
|
% Fast without tracking
|
||
|
|
reF=real(F.clauses{j}.data);
|
||
|
|
imF=imag(F.clauses{j}.data);
|
||
|
|
Freal.clauses{j}.data = [reF imF;-imF reF];
|
||
|
|
end
|
||
|
|
|
||
|
|
j = j+1;
|
||
|
|
case {2,3}
|
||
|
|
reF=real(F.clauses{j}.data);
|
||
|
|
imF=imag(F.clauses{j}.data);
|
||
|
|
Freal.clauses{j}.data=[reF;imF];
|
||
|
|
j = j+1;
|
||
|
|
case 4
|
||
|
|
reF=real(F.clauses{j}.data);
|
||
|
|
imF=imag(F.clauses{j}.data);
|
||
|
|
Freal.clauses{j}.data=[reF(1);reF(2:end);imF(2:end)];
|
||
|
|
j = j+1;
|
||
|
|
otherwise
|
||
|
|
error('Internal bug. Please report.');
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|