I am solving a SOCP problem via SDP, but CVX keeps saying that the constraints are infeasible. However, I can prove that it is feasible because I have a closed form answer that can satisfy all the constraints.
The problem is formulated as
where w_k are the columns of a matrix W, h_k columns of a matrix H. The only variable is W, while H, sigma_k and gamma_k are all given parameters.
The problem can be written in the form of a SDP problem:
where T is the matrix W in the previous picture. This is a problem of finding the scheme with least energy to satisfy the SINR requirements.
Apparently W = a·inv(H) can satisfy all the constraints as H·W = a·I, if a is large enough. But CVX outputs INFEASIBLE when gamma_k grows larger than zero. Does anyone knows why this occurs? I have been confused for several days and I would appreciate it if anyone can help.
My code is as follows.
clc;
K = 4;
M = 4;
H = (randn(K, M) + 1i.*randn(K, M));
noiseVar = 10^(-11);
gamma = ones(K, 1) .* 10;
cvx_begin sdp
variable W(M, K)
variable p
minimize(p)
bfpower = norm(W(:));
R = H * W;
subject to
bfpower <= p;
for k = 1:K
side = [R(k, :)'; sqrt(noiseVar)];
mat = [sqrt(1 + 1/gamma(k)) * (R(k, k)), side'; side, sqrt(1 + 1/gamma(k)) * real(R(k, k)) .* eye(K + 1, K + 1)];
mat == hermitian_semidefinite(K + 1 + 1);
end
cvx_end
display(W)
display(p)