# ERROR:Disciplined convex programming error: Only scalar quadratic forms can be specified in CVX

``````Nr_set=2;
K_set=6;
T0=1e-3;
sigma = 1e-11;
sigma_h = 1e-11;
P_tx=2;
%%
Nt = Nt_set;
Nr = Nr_set;
K = K_set;
Variable=num2cell([Nt,Nr,K,T0,sigma,0,P_tx]);
[H_nomi]=system_channel(Variable);
%%
b = ones(Nt,K);
cvx_begin sdp
variable lambda(1,K) nonnegative
variable t(1,K) nonnegative
variable a(Nr,1) complex
expression phi(Nr*Nt,K);
expression vk(1,K);
minimize sum(t)+sigma*pow_pos(norm(a'),2)
subject to
for k=1:K
phi(:,k) = vec(a*b(:,k)');
vk(k) = a'*H_nomi(:,:,k)*b(:,k)-1;
[lambda(k)*eye(Nt*Nr)-phi(:,k)*phi(:,k)',-1*phi(:,k)*vk(k)';-1*vk(k)*phi(:,k)',t(k)-pow_pos(norm(vk(k)),2)-lambda(k)*sigma_h]==semidefinite(Nt*Nr+1);
end
cvx_end
``````

%%%%%%%%%%%%%%%%
The problem is shown as follow
Error using * (line 126)
Disciplined convex programming error:
Only scalar quadratic forms can be specified in CVX

There is something wrong in
[lambda(k)eye(NtNr)-phi(:,k)phi(:,k)’,-1phi(:,k)vk(k)’;-1vk(k)*phi(:,k)’,t(k)-pow_pos(norm(vk(k)),2)-lambda(k)sigma_h]==semidefinite(NtNr+1);
but I don’t know the reason. How can I solve it? Thinks!!

The matrix constrained to being semidefinite must be affine (linear) in the optimization variables. The matrix which you constraining to be senidefinite is not affine in the CVX variables; therefore it is a Nonlinear SDP and is non-convex. If am not mistaken, your SDP is the easiest special case of Nonlinear SDP, namely a Bilinear SDP, which in general is difficult to solve, even to local optimality. You can try PENLAB, PENNON, or PENBMI as solver, called by YALMIP.

Before doing that, you might want to check whether this problem can be reformulated as a Linear SDP, which CVX could handle. I don’t see any obvious way of doing this, for instance by Schur Complement.