I am trying to implement the following convex program (the simplest two variable instance of equation 34 from this paper):
where h_k\in\mathbb{R}^{2\times 1} and Q_k\in\mathbb{R}^{2\times 2}. h_1 and h_2 are initialized to Gaussian random vectors, then the following code is called:
cvx_begin
variables Q1(2,2) Q2(2,2)
maximize sum_log([1+h1'*Q1*h1 1+h2'*Q2*h2])
h2'*Q1*h2 == 0;
h1'*Q2*h1 == 0;
Q1(1,1) + Q2(1,1) <= P;
Q1(2,2) + Q2(2,2) <= P;
Q1 == hermitian_semidefinite(n);
Q2 == hermitian_semidefinite(n);
cvx_end
However, when comparing the supposedly optimal result of Q_1 and Q_2 to a naive but computationally simpler method, I find that more often than not, the naive method produces a larger objective. The supposedly maximizing values of Q_1 and Q_2 do not achieve the global optimal.
Further, when I make all the variables complex (h_k\in\mathbb{C}^{2\times 1} and Q_k\in\mathbb{C}^{2\times 2}) then I get the error:
Disciplined convex programming error:
Invalid computation: geo_mean( {complex affine} )
Which is similar to this question), though in this instance there is no reason I can think of for the diagonal matrix to not be real. Just to be sure, I tried changing the objective to
maximize sum_log(real([1+h1'*Q1*h1 1+h2'*Q2*h2]))
which eliminated the error, but returned values of Q_1 and Q_2 with entries on the order of 10^{-10}. Is there something obvious that I’m missing here?