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.