# When i solve this problem, something wrong, can you help me

``````clc,clear;
close all;
N=2;
delta=rand(1);
h=rand(N,1)+1i*rand(N,1);
cvx_begin
variable W(N,N) hermitian semidefinite
variables eta a b
minimize (real(trace(W)))
subject to
A=[eye(N),zeros(N,1);
zeros(1,N), -delta^2];
%     B=[-W,-W*h;
%         -h'*W,square_pos(norm(a))/2+square_pos(norm(b))/2-h'*W*h];
B=[-W,-W*h;
-h'*W,a*a/2+b*b/2-h'*W*h];
eta*A-B==hermitian_semidefinite(N+1)
cvx_end
``````

The error is because the matrix constrained to be `hermitian_semidefinite` is not linear (affine) in he CVX variables. Specifically, `a*a` and `b*b`.

Change the program to declare variables `a_squared b_squared`, because the SDP constraint is linear (affine) in those variables.

``````cvx_begin
variable W(N,N) hermitian semidefinite
variables eta a_squared b_squared
minimize (real(trace(W)))
subject to
A=[eye(N),zeros(N,1);
zeros(1,N), -delta^2];
B=[-W,-W*h;
-h'*W,a_squared/2+b_squared/2-h'*W*h];
eta*A-B==hermitian_semidefinite(N+1)
cvx_end
``````

Edit: Inserted missing `/2` after `b_squared`.

thank you, but the change the variables a to a_squared can not guarantee the equivalence, can you help me?

I don’t understand why my formulation is not adequate for you. My formulation is “equivalent”: to your formulation. But unlike your formulation, it is a linear SDP, compliant with CVX’s rules.

The well known “trick” I used (it is so simple and obvious, it is not much of a trick) is very standard for linear SDP (LMI). It works provided there is no separate need for the unsquared original variables `a` and `b` elsewhere in the problem formulation.

If you need the values of `a` and `b`, place these statements after `cvx_end` .

``````a = sqrt(a_squared);
b = sqrt(b_squared);
``````

Or you could just as well insert `-` before `sqrt`.

Note that I ignored the commented out version of `B` in your program.

ok， i have got it, thank you very much.