All the inequality constraints are satisfied, but CVX outputs "Failed"

I am working on maximizing the minimum user rate. During the process, I encountered a situation where all the inequality constraints are satisfied, but CVX outputs “Failed”. Could you help me take a look? The optimization variables wck and wpk are too small in magnitude, so I used scaling.

the result:The first few iterations were solved, but all subsequent ones failed.

Successive approximation method to be employed.
   For improved efficiency, SDPT3 is solving the dual problem.
   SDPT3 will be called several times to refine the solution.
   Original size: 93 variables, 35 equality constraints
   4 exponentials add 32 variables, 20 equality constraints
-----------------------------------------------------------------
 Cones  |             Errors              |
Mov/Act | Centering  Exp cone   Poly cone | Status
--------+---------------------------------+---------
  4/  4 | 5.380e+00  5.554e+00  0.000e+00 | Failed
  2/  2 | 3.671e+00  1.743e+00  0.000e+00 | Failed
  4/  4 | 1.522e+00  2.211e-01  0.000e+00 | Failed
  2/  2 | 2.624e-01  3.604e-03  0.000e+00 | Failed
  0/  0 | 0.000e+00  0.000e+00  0.000e+00 | Failed
  0/  0 | 0.000e+00  0.000e+00  0.000e+00 | Failed
-----------------------------------------------------------------
Status: Failed
Optimal value (cvx_optval): NaN
 

========== 不等式检查 ==========

----- 用户 1 -----
2^omega(1,1) = 1.405069e+05, rho(1,1) = 1.409150e+05, 违反 = 0.000000e+00, 满足? 是
2^omega(1,2) = 3.231066e+00, rho(1,2) = 3.241189e+00, 违反 = 0.000000e+00, 满足? 是
wck(1) = 3.134295e-13, 需要 >= 3.131795e-13, 违反 = 0.000000e+00, 满足? 是
wpk(1) = 2.053137e-13, 需要 >= 2.051741e-13, 违反 = 0.000000e+00, 满足? 是
(rho(1,1)-1)/sf2^2 = 1.409140e+03, <= 1.410054e+03, 违反 = 0.000000e+00, 满足? 是
(rho(1,2)-1)/sf2^2 = 2.241189e-02, <= 2.242450e-02, 违反 = 0.000000e+00, 满足? 是

----- 用户 2 -----
2^omega(2,1) = 1.405069e+05, rho(2,1) = 1.409150e+05, 违反 = 0.000000e+00, 满足? 是
2^omega(2,2) = 3.231066e+00, rho(2,2) = 3.241190e+00, 违反 = 0.000000e+00, 满足? 是
wck(2) = 3.134295e-13, 需要 >= 3.131795e-13, 违反 = 0.000000e+00, 满足? 是
wpk(2) = 2.053137e-13, 需要 >= 2.051741e-13, 违反 = 0.000000e+00, 满足? 是
(rho(2,1)-1)/sf2^2 = 1.409140e+03, <= 1.410054e+03, 违反 = 0.000000e+00, 满足? 是
(rho(2,2)-1)/sf2^2 = 2.241190e-02, <= 2.242450e-02, 违反 = 0.000000e+00, 满足? 是

总体判断:所有不等式满足 (违反 ≤ 1.000000e-06)
===============================

MAX-MIN-RSK:
   10.2416

My CVX code:

noise = 10^(-13);

load('tur1_50.mat')

k_lam=0.1514;

lamda=530*10^-9;

rho=0.9*1.6*10^-19/(6.626*10^-34*3*10^8/lamda);

const = (exp(1) / 2 * pi);

% const = 1;

sf = 10^8;

sf2 = 10;

K=2;

N=2;

Pt = 1;

pc_pre = rand(N,1);

p_pre = rand(N,K);

% 计算总功率

total = sum(pc_pre.^2) + sum(p_pre(:).^2);

pc_pre = ones(N,1) * 0.1;

p_pre  = ones(N,K) * 0.1;

pathl_r = zeros(N, K);

var_d = zeros(1, K);

tolerance = 1e-4;

tPrevious = -inf;

for k =1 : K

    dist_d = 13;

    var_d(k) = tur1_30(dist_d,2);

    pathl_r(:,k) = 0.01*0.9*0.9/2/pi/(1-cos(10/180*pi))/cos(10/180*pi)*exp(-k_lam*dist_d)/dist_d.^2;

end

c_pre = [1;1];

maxIter = 20;

for iter = 1:maxIter

    cvx_begin

    cvx_solver sdpt3

    variable p(N,K) nonnegative;

    variable pc(N,1) nonnegative;

    variable c(K) nonnegative;

    variable omega(K,2) nonnegative;

    variable rho(K,2) nonnegative;

    variable wck(k) nonnegative;

    variable wpk(k) nonnegative;

    variable t;

    expression akc(K);

    expression bkc(K);

    expression akp(K);

    expression bkp(K);

    maximize(t)

    subject to

    rth = 0;

for k = 1 : K

        hk = pathl_r(:, k);

        akc_pre(k) = sum_square_abs(hk' * p_pre);

        bkc_pre(k) = square_abs(hk' * pc_pre);

        bkp_pre(k) = square_abs(hk' * p_pre(:, k));

        p_no_k = p_pre(:, [1:k-1, k+1:K]);

        akp_pre(k) = sum_square_abs(hk' * p_no_k);

if iter == 1

            wck_pre(k) = exp(4 * var_d(k)) * akc_pre(k) + noise;

            wpk_pre(k) = exp(4 * var_d(k)) * akp_pre(k) + noise;

end

        wck_pre(k) = max(wck_pre(k), exp(4 * var_d(k)) * akc_pre(k) + noise);

        wpk_pre(k) = max(wpk_pre(k), exp(4 * var_d(k)) * akp_pre(k) + noise);

end

for k = 1 : K

        hk = pathl_r(:, k);

        akc(k) = sum_square_abs(hk' * p);

        bkc(k) = square_abs(hk' * pc);

        bkp(k) = square_abs(hk' * p(:, k));

        p_no_k = p(:, [1:k-1, k+1:K]); % 删除第 k 列

        akp(k) = sum_square_abs(hk' * p_no_k);

end



for  k = 1 : K

        hk = pathl_r(:, k);

        exp4_vard = exp(4 * var_d(k));

        arfa = c_pre(k)/sum(c_pre);

        t <= c(k) + omega(k,2);

        c(k) >= rth;

        omega(k,2) >= rth;

        sum(c) <= omega(k,1);

        2^omega(k,1) <= rho(k,1);

        2^omega(k,2) <= rho(k,2);

        wck(k) * sf >= sf * (exp(4 * var_d(k)) * akc(k) + noise);

        wpk(k) * sf >= sf * (exp(4 * var_d(k)) * akp(k) + noise);

        (rho(k,1) - 1) / (sf2.^2) <= const * exp4_vard * (2 * real( pc_pre' * hk * hk' * pc) / (wck_pre(k) * sf2.^2) - ...

            wck(k) * square_abs(hk' * pc_pre / (wck_pre(k) * sf2)));

        (rho(k,2) - 1) / (sf2.^2) <= const * exp4_vard * (2 * real(p_pre(:, k)' * hk * hk' * p(:, k)) / (wpk_pre(k) * sf2.^2) - ...

            wpk(k) * square_abs(hk' * p_pre(:, k) / (wpk_pre(k) * sf2)));

end

    sum(pc.^2) + sum(sum(p.^2)) <= Pt;

    cvx_end

% 在每次迭代的打印部分添加以下代码

    fprintf('\n========== 不等式检查 ==========\n');

    violation_flag = false;

    tol = 1e-6; % 容差

for k = 1:K

        hk = pathl_r(:, k);

        exp4_vard = exp(4 * var_d(k));

        fprintf('\n----- 用户 %d -----\n', k);

% 检查 2^omega <= rho

        lhs1 = 2^omega(k,1);

        rhs1 = rho(k,1);

        viol1 = max(0, lhs1 - rhs1);

if viol1 <= tol

            status1 = '是';

else

            status1 = '否';

end

        fprintf('2^omega(%d,1) = %e, rho(%d,1) = %e, 违反 = %e, 满足? %s\n', ...

            k, lhs1, k, rhs1, viol1, status1);

        lhs2 = 2^omega(k,2);

        rhs2 = rho(k,2);

        viol2 = max(0, lhs2 - rhs2);

if viol2 <= tol

            status2 = '是';

else

            status2 = '否';

end

        fprintf('2^omega(%d,2) = %e, rho(%d,2) = %e, 违反 = %e, 满足? %s\n', ...

            k, lhs2, k, rhs2, viol2, status2);

% 检查 wck >= 约束

        lhs_wck = wck(k);

        rhs_wck = exp(4 * var_d(k)) * akc(k) + noise;

        viol_wck = max(0, rhs_wck - lhs_wck);

if viol_wck <= tol

            status_wck = '是';

else

            status_wck = '否';

end

        fprintf('wck(%d) = %e, 需要 >= %e, 违反 = %e, 满足? %s\n', ...

            k, lhs_wck, rhs_wck, viol_wck, status_wck);

% 检查 wpk >= 约束

        lhs_wpk = wpk(k);

        rhs_wpk = exp(4 * var_d(k)) * akp(k) + noise;

        viol_wpk = max(0, rhs_wpk - lhs_wpk);

if viol_wpk <= tol

            status_wpk = '是';

else

            status_wpk = '否';

end

        fprintf('wpk(%d) = %e, 需要 >= %e, 违反 = %e, 满足? %s\n', ...

            k, lhs_wpk, rhs_wpk, viol_wpk, status_wpk);

% 检查 rho 的不等式

        term1 = const * exp4_vard * (2 * real( pc_pre' * hk * hk' * pc) / (wck_pre(k) * sf2.^2) - ...

            wck(k) * square_abs(hk' * pc_pre / (wck_pre(k) * sf2)));

        lhs_rho1 = (rho(k,1) - 1) / (sf2.^2);

        rhs_rho1 = term1;

        viol_rho1 = max(0, lhs_rho1 - rhs_rho1);

if viol_rho1 <= tol

            status_rho1 = '是';

else

            status_rho1 = '否';

end

        fprintf('(rho(%d,1)-1)/sf2^2 = %e, <= %e, 违反 = %e, 满足? %s\n', ...

            k, lhs_rho1, rhs_rho1, viol_rho1, status_rho1);

        term2 = const * exp4_vard * (2 * real(p_pre(:, k)' * hk * hk' * p(:, k)) / (wpk_pre(k) * sf2.^2) - ...

            wpk(k) * square_abs(hk' * p_pre(:, k) / (wpk_pre(k) * sf2)));

        lhs_rho2 = (rho(k,2) - 1) / (sf2.^2);

        rhs_rho2 = term2;

        viol_rho2 = max(0, lhs_rho2 - rhs_rho2);

if viol_rho2 <= tol

            status_rho2 = '是';

else

            status_rho2 = '否';

end

        fprintf('(rho(%d,2)-1)/sf2^2 = %e, <= %e, 违反 = %e, 满足? %s\n', ...

            k, lhs_rho2, rhs_rho2, viol_rho2, status_rho2);


if viol1 > tol || viol2 > tol || viol_wck > tol || viol_wpk > tol || viol_rho1 > tol || viol_rho2 > tol

            violation_flag = true;

end

end

% 总体判断

if ~violation_flag

        fprintf('\n总体判断:所有不等式满足 (违反 ≤ %e)\n', tol);

else

        fprintf('\n总体判断:存在不等式违反 (违反 > %e)\n', tol);

end

    fprintf('===============================\n\n');

    t_history(iter) = t;

if(abs(t - tPrevious) <= tolerance)

break;

end

    c_pre = c;

    tPrevious = t;

    p_pre = p;

    pc_pre = pc;

    wck_pre = wck;

    wpk_pre = wpk;

end

disp('MAX-MIN-RSK:');