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)