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

35 lines
1.0 KiB
Mathematica
Raw Permalink Normal View History

2019-12-18 11:25:45 +00:00
function X = real(X)
%REAL (overloaded)
X.basis = real(X.basis);
X = clean(X);
if isa(X,'sdpvar')
X.conicinfo = [0 0];
if length(X.midfactors)>0
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});
if nnz(ar)>0 & nnz(br)>0
newleftfactors{end+1} = ar;
newmidfactors{end+1} = X.midfactors{i};
newrightfactors{end+1} = br;
end
if nnz(ai)>0 & nnz(bi)>0
newleftfactors{end+1} = -ai;
newmidfactors{end+1} = X.midfactors{i};
newrightfactors{end+1} = bi;
end
end
X.leftfactors = newleftfactors;
X.midfactors = newmidfactors;
X.rightfactors = newrightfactors;
end
end