34 lines
800 B
Mathematica
34 lines
800 B
Mathematica
|
|
function Y = imag2real(Y)
|
||
|
|
%IMAG2REAL
|
||
|
|
|
||
|
|
if isreal(Y)
|
||
|
|
y = Y;
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
realBase = real(Y.basis);
|
||
|
|
imagBase = imag(Y.basis);
|
||
|
|
|
||
|
|
lmi_variables = getvariables(Y);
|
||
|
|
nv = length(lmi_variables);
|
||
|
|
|
||
|
|
% [re im;-im re] = kron(I,re) + kron([0 1;-1 0],im)
|
||
|
|
sparse_X1 = [1 0;0 1];
|
||
|
|
sparse_X2 = [0 1;-1 0];
|
||
|
|
temp = kron(sparse_X1,reshape(realBase(:,1),Y.dim(1),Y.dim(1)))+ kron(sparse_X2,reshape(imagBase(:,1),Y.dim(1),Y.dim(1)));
|
||
|
|
temp = temp(:);
|
||
|
|
|
||
|
|
Y.basis = temp(:);
|
||
|
|
for i = 1:nv
|
||
|
|
temp1 = kron(sparse_X1,reshape(realBase(:,i+1),Y.dim(1),Y.dim(1)));
|
||
|
|
temp2 = kron(sparse_X2,reshape(imagBase(:,i+1),Y.dim(1),Y.dim(1)));
|
||
|
|
Y.basis(:,i+1) = temp1(:) + temp2(:);
|
||
|
|
end;
|
||
|
|
|
||
|
|
Y.dim(1) = size(temp1,1);
|
||
|
|
Y.dim(2) = size(temp1,2);
|
||
|
|
Y = clean(Y);
|
||
|
|
% Reset info about conic terms
|
||
|
|
if isa(Y,'sdpvar')
|
||
|
|
Y.conicinfo = [0 0];
|
||
|
|
end
|