function [p_m_out, fval_4, flag_4] = p_m_calc_CVX(alpha, S_m_r, p_m_r, q_m_r_x, q_m_r_y)
global P_charge;
global H;
global d_min;
global V_max;
global S;
global P_max;
global freq;
global light_speed;
global B;
global yeta_los;
global delta2;
global K;
global M;
global N;
global R_th;
global P_user;
%%constants initialize
D_I = round(N/M);
alpha_m_n = sum(alpha,3);
O = 1/(yeta_los * (4*pi*freq/light_speed)^2);
alpha1 = reshape(alpha(:,:,1), N, M);
alpha2 = reshape(alpha(:,:,2), N, M);
A11_mk_1 = O./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2); %p_m[n]的系数
A11_mk_2 = O./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2);
A33_mk_r1 = log(repmat(sum((O.*p_m_r./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2)), 2), 1, M) - O.*p_m_r./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2) + B*delta2) ./ log(2);
A33_mk_r2 = log(repmat(sum((O.*p_m_r./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2)), 2), 1, M) - O.*p_m_r./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2) + B*delta2) ./ log(2);
%coefficients of (p_j[n]-p_j^r[n] in c^lb3
F_jk_r1 = O./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2) ./ (repmat(sum((O.*p_m_r./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2)), 2), 1, M) - O.*p_m_r./(H*H + (q_m_r_x - P_user(1,1)).^2 + (q_m_r_y - P_user(2,1)).^2) + B*delta2);
F_jk_r2 = O./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2) ./ (repmat(sum((O.*p_m_r./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2)), 2), 1, M) - O.*p_m_r./(H*H + (q_m_r_x - P_user(1,2)).^2 + (q_m_r_y - P_user(2,2)).^2) + B*delta2);
cvx_begin
% cvx_solver mosek
variable p_m(N, M)
R_mk1 = zeros(N,1);
R_mk2 = zeros(N,1);
sum_B22_1 = zeros(N,M);
sum_B22_2 = zeros(N,M);
sum_C22_1 = zeros(N,M);
sum_C22_2 = zeros(N,M);
expression sum_B22_1(N,M)
expression sum_B22_2(N,M)
expression sum_C22_1(N,M)
expression sum_C22_2(N,M)
expression R_mk1(N,1)
expression R_mk2(N,1)
for m=1:1:M
for m1=1:1:M
if(m1~=m)
sum_B22_1(:,m) = sum_B22_1(:,m) + A11_mk_1(:,m1) .* p_m(:,m1);
sum_B22_2(:,m) = sum_B22_2(:,m) + A11_mk_2(:,m1) .* p_m(:,m1);
sum_C22_1(:,m) = sum_C22_1(:,m) + F_jk_r1(:,m1) .* (p_m(:,m1) - p_m_r(:,m1));
sum_C22_2(:,m) = sum_C22_2(:,m) + F_jk_r2(:,m1) .* (p_m(:,m1) - p_m_r(:,m1));
end
end
R_mk1 = R_mk1 + alpha1(:,m) .* B .* (log(A11_mk_1(:,m) .* p_m(:,m) .* (1./ S_m_r(:,m)) + sum_B22_1(:,m) + B*delta2) ./ log(2) - A33_mk_r1(:,m) - sum_C22_1(:,m) );
R_mk2 = R_mk2 + alpha2(:,m) .* B .* (log(A11_mk_2(:,m) .* p_m(:,m) .* (1./ S_m_r(:,m)) + sum_B22_2(:,m) + B*delta2) ./ log(2) - A33_mk_r2(:,m) - sum_C22_2(:,m) );
end
R_nk1 = sum(R_mk1) ./N;
R_nk2 = sum(R_mk2) ./N;
maximize((R_nk1 + R_nk2) ./M )
subject to
p_m >= 0;
p_m <= P_max;
cvx_end
p_m_out = p_m;
fval_4 = cvx_optval;
flag_4 = cvx_status;
The outputs of CVX are shown as follows:
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: 100 variables, 40 equality constraints
20 exponentials add 160 variables, 100 equality constraints
-----------------------------------------------------------------
Cones | Errors |
Mov/Act | Centering Exp cone Poly cone | Status
--------+---------------------------------+---------
20/ 20 | 8.000e+00 1.098e+02 0.000e+00 | Solved
20/ 20 | 8.000e+00s 2.309e+01 0.000e+00 | Solved
20/ 20 | 5.485e+00 1.660e+00 0.000e+00 | Solved
20/ 20 | 8.000e+00s 8.875e+00s 0.000e+00 | Failed
20/ 20 | 6.444e+00 2.838e+00 0.000e+00 | Failed
20/ 20 | 1.294e+00 7.061e-02 0.000e+00 | Failed
20/ 20 | 2.844e+00s 4.402e-01s 0.000e+00 | Failed
20/ 20 | 1.403e+00 8.735e-02 0.000e+00 | Failed
0/ 0 | 0.000e+00 0.000e+00 0.000e+00 | Failed
-----------------------------------------------------------------
Status: Failed
Optimal value (cvx_optval): NaN
Please help me. Thanks in advance.