# Convergence rate is slow, and finally failed

My optimization problem is to maximize the minimum rate of the user under the transmit power constraint. I put the transmit power very small, for example -10dBm, the objective function value is convergent. However, when I amplified the transmission power, the value of the objective function increased slowly, and the result was failed. I’ve used different solvers, mosek/sedumi, and this problem comes up. How to solve this problem?

Here’s my code

``````cvx_begin
cvx_quiet true

variable z_opt(para.Ne, para.Na) 'complex'
variable MM2

expression r

z_opt_vec = vec(z_opt.');

for k = 1:para.K
r(k) = real(a(k)) + 2 * real(b{k} * z_opt_vec) - pow_pos(norm(sqrtm(C{k}) * z_opt_vec, 'fro'), 2);
MM2 <= r(k);
end

maximize MM2

subject to
pow_pos(norm(sqrtm(delta) * z_opt_vec, 'fro'), 2) <= 4 * para.P;

cvx_end
cvx_status
``````

Remove `cvx_quiet`, and show us all the CVX and (Mosek) solver output for both the case which worked and the case which failed. It would be better if you can also show is the input data and make them into complete reproducible examples.

Perhaps you can improve things numerically by not squaring the LHS of the constraint, and instead taking the square root of the RHS.

Thank you for your reply. Now I can solve my problem correctly

I changed my optimization problem and my code is as follows

``````cvx_begin
variable z_opt(para.Ne, para.Na) 'complex'
variable lambda_r

expression r
expression penalty_term
expression obj_fun

z_opt_vec = vec(z_opt.');
penalty_term = pow_pos(norm(z_opt_vec - J - exp(complex(0,1) * vec(theta.')),'fro'), 2);

obj_fun = gamma * penalty_term - lambda_r;

minimize obj_fun

subject to
quad_form(z_opt_vec, delta) <= 4 * para.P;
for k = 1:para.K
r(k) = real(a(k)) + 2 * real(b{k} * z_opt_vec) - quad_form(z_opt_vec, C{k});
lambda_r <= r(k);
end

cvx_end
cvx_status
``````

My results are as follows

Due to numerical problems Mosek cannot solve the problem to high accuracy. It seems to find a decent primal solution.

Why do you square in the above penalty term.

You could do

and then adjust the gamma. That leads to a better conditioned problem.

Thank you for your reply. I tried as you suggested, the initial value of gamma is 10^(-4), increasing gamma->1.2gamma, but I still failed.

When both SeDuMi and Mosek fails then it is a good indication that your problem is broken numerically.

Mosek even tells you

MSK_RES_ERR_HUGE_AIJ

which is a nice way of telling you that your problem is most likely garbage.

Thank you very much for your answer, so is there any effective way to solve this problem in the cvx toolbox?

My guess is you do SCA: