DCP error/ Expreesion in objective function must be real

Hey I am trying to solve SDP problem
max tr(AZ)
s.t diag(Z)=1
Z is semidefinite matrix

cvx_begin sdp
variable Z(n,n);
maximize real(trace((phi{m-1}*Z)));
subject to
diag(Z)==1;
Z==semidefinite(n); cvx_end

Without word real in objective function it was giving error -"Expressions in objective functions must be real."
So i made keyword real. But I think i might be loosing some information in complex part.
So I used keyword ‘abs’ instead of ‘real’ but now the error is "Disciplined convex programming error:
Cannot maximize a(n) convex expression"
I am trying to maximize SINR which is my real problem and not atall familiar with optimization. This code snippet is just small part and I need this Z to further formulate. Since I think rest of my MATLAB code is fine. I think I might be loosing some information in this real(trace(A*Z))

1 Like

You shouldn’t be getting the real warning unless phi is complex. And if that is complex, in all likelihood, your variable Z should be, too, and you should be using a complex semidefinite constraint. The easiest way to do that is simply to declare

variable Z(n,n) hermitian

and also change the semidefinite constraint to

Z >= 0

Since you are using SDP mode, CVX will automatically convert this to a hermitian_semidefinite constraint.

You are still going to need real in there even if this is the case.

Phi is complex. Does that mean objective function has to be real. Why cant i take absolute value to make it real? that way i can have information from imaginary part as well. By specifying Z to be hermitian final SINR further diverges from correct value.

Further You can see objective funtion with A complex. Is code correct for such statement. As if this part is correct then I can start looking for other parts of my code.

Complex objective functions make no sense. (How do you maximize or minimize a complex value?) As for why you cannot take the absolute value, read the FAQ).