30 lines
845 B
Matlab
Executable File
30 lines
845 B
Matlab
Executable File
function X = lift2real(X)
|
|
|
|
% Given (ar+i*ai)*X*(br+i*bi)
|
|
% Silly code, since it is Hermitian, we know ar = br', ai=-bi'
|
|
reF=real(X);
|
|
imF=imag(X);
|
|
newleftfactors = {};
|
|
newmidfactors = {};
|
|
newrightfactors = {};
|
|
for i = 1:length(X.midfactors)
|
|
ar = real(X.leftfactors{i});
|
|
ai = imag(X.leftfactors{i});
|
|
br = real(X.rightfactors{i});
|
|
bi = imag(X.rightfactors{i});
|
|
newleftfactors{end+1} = [ar;ai];
|
|
newmidfactors{end+1} = X.midfactors{i};
|
|
newrightfactors{end+1} = [br -bi];
|
|
newleftfactors{end+1} = [-ai;ar];
|
|
newmidfactors{end+1} = X.midfactors{i};
|
|
newrightfactors{end+1} = [bi br];
|
|
end
|
|
X.leftfactors = [];
|
|
X.midfactors = [];
|
|
X.rightfactors = [];
|
|
X = [reF -imF;imF reF];
|
|
%X = kron(eye(2),reF) + kron([0 -1;1 0],imF);
|
|
|
|
X.leftfactors = newleftfactors;
|
|
X.midfactors = newmidfactors;
|
|
X.rightfactors = newrightfactors; |