Transmit beamforming based on cvx

I write a program about the transmit beamforming by the cvx, but many papers said that the relaxed problem is dual to the original problem, so that the rank of the weight matrix is 1, but my result is not, the next is my codes, is it right?

    variable W(nTx,nTx,mRx) complex semidefinite;
    sum = 0;
    for i = 1:mRx
        sum = sum + trace(W(:,:,i));
    minimize ( sum );
    subject to  
    for i = 1:mRx
        ip = 0;
        sp = trace(R(:,:,i)*W(:,:,i)); 
        for j = 1:i-1
            ip = ip + trace(R(:,:,i)*W(:,:,j));
        for j = i+1:mRx
            ip = ip + trace(R(:,:,i)*W(:,:,j));
        sp - gamma(i)*ip >= gamma(i)*sigma(i);
        %W(:,:,i) == semidefinite(nTx);

It is a rare case when you can guarantee the relaxed problem obtains the same optimal value as the original nonconvex problem. It happens, but not often. I suspect you are reading the papers’ claims incorrectly. Regardless, this really is not a CVX-specific question, so you should ask the authors.

Thank you mcg!
In my opinin,the operateor “trace” should be “normal” ?
By the way,I copy code to Matalb find it doesn’t work——“Disciplined convex programming error: Cannot minimize a(n) complex affine expression.”

No, it should be trace. And you can probably fix your error with minimize(real(sum)). The trace is real anyway for complex semidefinite variables.

The thing is that rank-1 weight matrix is only one of the available solutions. So even if your code is correct you have to find a way to specify the rank of W.

Right, and rank cannot be bounded or fixed in a convex program.

I have implemented the same problem in CVX and it gives almost always the rank one solution.

I implemented the same problem and the solver gives the rank-1 solution almost always.