Dynamic-Calibration/utils/YALMIP-master/@sdpvar/lift2real.m

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;