"cvx output isn't monotonous"

here’s my output of cvx toolbox:
Calling SeDuMi 1.34: 48 variables, 27 equality constraints

SeDuMi 1.34 (beta) by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 27, order n = 29, dim = 49, blocks = 15
nnz(A) = 90 + 0, nnz(ADA) = 225, nnz(L) = 126
it : by gap delta rate t/tP t/tD* feas cg cg prec
0 : 4.03E+00 0.000
1 : -1.40E+01 8.53E-01 0.000 0.2116 0.9000 0.9000 0.98 1 1 1.7E+00
2 : -1.32E+01 3.00E-01 0.000 0.3511 0.9000 0.9000 1.58 1 1 4.2E-01
3 : -1.08E+01 1.24E-01 0.000 0.4125 0.9000 0.9000 1.79 1 1 1.2E-01
4 : -9.50E+00 2.42E-02 0.000 0.1958 0.9000 0.9000 1.52 1 1 1.8E-02
5 : -9.27E+00 4.53E-03 0.000 0.1873 0.9000 0.9000 1.17 1 1 3.2E-03
6 : -9.24E+00 8.71E-04 0.000 0.1922 0.9000 0.9000 1.04 1 1 5.9E-04
7 : -9.23E+00 5.65E-06 0.366 0.0065 0.9900 0.9904 1.01 1 1 3.2E-05
8 : -9.23E+00 2.03E-07 0.000 0.0359 0.1283 0.9000 1.00 1 1 2.0E-05
9 : -9.23E+00 8.23E-10 0.000 0.0041 0.9990 0.9937 1.00 1 1 7.8E-08
10 : -9.23E+00 2.77E-11 0.287 0.0337 0.9900 0.9402 1.00 1 1 3.5E-09

iter seconds digits cx by
10 0.2 Inf -9.2289315813e+00 -9.2289315659e+00
|Ax-b| = 1.2e-07, [Ay-c]_+ = 0.0E+00, |x|= 2.4e+01, |y|= 8.1e+00

Detailed timing (sec)
Pre IPM Post
1.400E-02 6.100E-02 3.993E-03
Max-norms: ||b||=20, ||c|| = 1.673583e+00,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 5.26394.

Status: Solved
Optimal value (cvx_optval): +9.22893

1 | 2 | 2 | 18

Calling SeDuMi 1.34: 48 variables, 27 equality constraints

SeDuMi 1.34 (beta) by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 27, order n = 29, dim = 49, blocks = 15
nnz(A) = 90 + 0, nnz(ADA) = 225, nnz(L) = 126
it : by gap delta rate t/tP t/tD* feas cg cg prec
0 : 4.03E+00 0.000
1 : -1.27E+01 8.51E-01 0.000 0.2111 0.9000 0.9000 1.01 1 1 1.7E+00
2 : -1.24E+01 2.97E-01 0.000 0.3496 0.9000 0.9000 1.61 1 1 4.1E-01
3 : -1.01E+01 1.21E-01 0.000 0.4060 0.9000 0.9000 1.75 1 1 1.2E-01
4 : -8.87E+00 2.46E-02 0.000 0.2036 0.9000 0.9000 1.49 1 1 1.9E-02
5 : -8.64E+00 4.59E-03 0.000 0.1865 0.9000 0.9000 1.17 1 1 3.3E-03
6 : -8.61E+00 8.62E-04 0.000 0.1879 0.9000 0.9000 1.05 1 1 6.0E-04
7 : -8.60E+00 4.62E-06 0.306 0.0054 0.9900 0.9904 1.01 1 1 3.0E-05
8 : -8.60E+00 1.68E-07 0.000 0.0364 0.2903 0.9000 1.00 1 1 1.6E-05
9 : -8.60E+00 4.91E-09 0.301 0.0291 0.9900 0.9902 1.00 1 1 4.5E-07
10 : -8.60E+00 8.45E-10 0.285 0.1723 0.9000 0.9107 1.00 1 1 7.6E-08
11 : -8.60E+00 2.42E-10 0.221 0.2860 0.9000 0.0000 1.00 2 2 2.4E-08
12 : -8.60E+00 5.02E-11 0.000 0.2077 0.9000 0.5338 1.00 2 2 5.6E-09

iter seconds digits cx by
12 0.1 Inf -8.5982185760e+00 -8.5982185625e+00
|Ax-b| = 1.7e-07, [Ay-c]_+ = 0.0E+00, |x|= 2.3e+01, |y|= 7.5e+00

Detailed timing (sec)
Pre IPM Post
1.300E-02 6.001E-02 2.997E-03
Max-norms: ||b||=20, ||c|| = 1.563029e+00,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 5.20579.

Status: Solved
Optimal value (cvx_optval): +8.59822

1 | 2 | 2 | 19

Calling SeDuMi 1.34: 48 variables, 27 equality constraints

SeDuMi 1.34 (beta) by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 27, order n = 29, dim = 49, blocks = 15
nnz(A) = 90 + 0, nnz(ADA) = 225, nnz(L) = 126
it : by gap delta rate t/tP t/tD* feas cg cg prec
0 : 4.01E+00 0.000
1 : -1.34E+01 8.48E-01 0.000 0.2112 0.9000 0.9000 0.99 1 1 1.7E+00
2 : -1.28E+01 2.97E-01 0.000 0.3509 0.9000 0.9000 1.59 1 1 4.1E-01
3 : -1.05E+01 1.22E-01 0.000 0.4106 0.9000 0.9000 1.78 1 1 1.2E-01
4 : -9.19E+00 2.41E-02 0.000 0.1977 0.9000 0.9000 1.51 1 1 1.9E-02
5 : -8.97E+00 4.52E-03 0.000 0.1870 0.9000 0.9000 1.17 1 1 3.2E-03
6 : -8.94E+00 8.61E-04 0.000 0.1906 0.9000 0.9000 1.04 1 1 5.9E-04
7 : -8.93E+00 4.59E-06 0.325 0.0053 0.9900 0.9904 1.01 1 1 3.1E-05
8 : -8.93E+00 1.67E-07 0.000 0.0364 0.3097 0.9000 1.00 1 1 1.6E-05
9 : -8.93E+00 4.81E-09 0.276 0.0288 0.9900 0.9902 1.00 1 1 4.5E-07
10 : -8.93E+00 8.00E-10 0.205 0.1661 0.9000 0.9098 1.00 1 1 7.4E-08
11 : -8.93E+00 1.84E-10 0.045 0.2296 0.9000 0.0000 1.00 2 2 1.9E-08
12 : -8.93E+00 3.80E-11 0.000 0.2067 0.9000 0.6328 1.00 2 2 4.3E-09

iter seconds digits cx by
12 0.1 Inf -8.9279161251e+00 -8.9279161137e+00
|Ax-b| = 1.3e-07, [Ay-c]_+ = 0.0E+00, |x|= 2.4e+01, |y|= 7.8e+00

Detailed timing (sec)
Pre IPM Post
1.300E-02 5.801E-02 3.993E-03
Max-norms: ||b||=20, ||c|| = 1.616849e+00,
Cholesky |add|=0, |skip| = 0, ||L.L|| = 5.60639.

Status: Solved
Optimal value (cvx_optval): +8.92792

and my program code is:

function [W,flag] = Generate_ESMS_W(N, M, K, H, G,...  
          W_ini,Fi_ini_ES,noise_maxpower, trans_maxpower)
      
   

cvx_begin %quiet
variable W(N,K) complex
 


%obj_function=polynomial 1-polynomial 2 +polynomial 3 are scalar
Fi=Fi_ini_ES;
%Fi_k=zeros(1,M);
a=0.5;
k=1:1:K;%该两个条件必须并列执行
u=K:-1:1;%k,u的维度必须相同!
for i=1:length(k)
    if k(i)==1||u(i)==1 
    
    %Fi_k=Fi(k,:);
    %Fi_ini_k=Fi_ini(k,:);
    H_eqvi(k(i),:)=H(:,k(i))'+Fi_ini_ES(k(i),:)*G(:,:,k(i));
    H_eqvi(u(i),:)=H(:,u(i))'+Fi_ini_ES(u(i),:)*G(:,:,u(i));%两种fi反射系数两种用户。
    H_eqv(k(i),:)=H(:,k(i))'+Fi(k(i),:)*G(:,:,k(i));
    H_eqv(u(i),:)=H(:,u(i))'+Fi(u(i),:)*G(:,:,u(i));
    B_g1(k(i))=H_eqvi(k(i),:)*W_ini(:,k(i));%四种beamforming组合 for given point.
    B_g2(k(i))=H_eqvi(k(i),:)*W_ini(:,u(i));
    B_g3(k(i))=H_eqvi(u(i),:)*W_ini(:,k(i));
    B_g4(k(i))=H_eqvi(u(i),:)*W_ini(:,u(i));
    B_1(k(i))=H_eqv(k(i),:)*W(:,k(i));%四种beamforming组合 
    B_2(k(i))=H_eqv(k(i),:)*W(:,u(i));
    B_3(k(i))=H_eqv(u(i),:)*W(:,k(i));
    B_4(k(i))=H_eqv(u(i),:)*W(:,u(i));
    %%%%%  Generate  Polynomial 1  %%%%%
    b(k(i))=abs(B_g2(k(i)))^2+noise_maxpower;
    POLY_1(k(i))=2*b(k(i))*real(B_1(k(i))'*B_g1(k(i)));
    
     %%%%%  Generate  Polynomial 2 %%%%%
     c(k(i))=(abs(B_g1(k(i)))^2)/((b(k(i))*(b(k(i))+abs(B_g1(k(i)))^2)));
     POLY_2(k(i))=c(k(i))*(abs(B_2(k(i)))^2+abs(B_1(k(i)))^2);
     %%%%%  Generate  Polynomial 3 %%%%%
     d(k(i))=abs(B_g3(k(i)))^2;
     POLY_3(k(i))=(1/(d(k(i))+noise_maxpower))*abs(B_3(k(i)))^2;
     %%%%%  final polynomial %%%%%
     %POLY(k(i))=a(k(i))*(POLY_1(k(i))- POLY_2(k(i))-POLY_3(k(i)));
     POLY(k(i))=(POLY_1(k(i))- POLY_2(k(i))-POLY_3(k(i)));
     
    end
end 
maximize sum(a.*POLY)

subject to    
norm(W,'fro')^2<=trans_maxpower;
cvx_end

inputdata:
G=val(:,:,1) =

[ -0.0149 - 0.0412i -0.0212 - 0.0137i;
0.0026 + 0.0023i 0.0083 + 0.0059i]

val(:,:,2) =

[0.0328 + 0.0501i 0.0325 + 0.0115i;
-0.0012 - 0.0035i -0.0046 - 0.0100i]

H=[-0.0782938909188111 - 0.186340960863388i 0.213877030996636 + 0.0988720037635830i;
-0.359459915716630 - 0.000253396058294434i 0.423027962367103 - 0.209699860396760i]

N=K=M=2;
trans_maxpower=20;
noise_maxpower=1;
%%%%% Initialize Fi for different mode(ES,MS and TS ) %%%%%%%%%%%%%%%
Fi_temp=randn(2,M) + sqrt(-1)*randn(2,M);
Fi_tamp=rand(1,M);
Fi_ramp=1-Fi_tamp;
Fi_amp=[sqrt(Fi_tamp) ;sqrt(Fi_ramp)];
Angle=rad2deg(angle(Fi_temp));
Angle(Angle<0)=Angle(Angle<0)+360;
Ang=deg2rad(Angle);
Fi_ini_ES=Fi_amp.exp(1jAng);
Fi1(:,:,1)=full(Fi_ini_ES);
%%%%% Initialize W %%%%%%%%%%%%%%%
W_ini=randn(N,K)sqrt(trans_maxpower/(NK));
W1(:,:,1)=full(W_ini);

Could anyone please help me out .

Dear Mark,
I was wondering if you have any editable program of applying line search method in CVX-toolbox.I didn’t find one in github. thanks a lot.

There is a detailed discussion of line search and trust region algorithms in Nocedal and Wright, “Numerical Optimization” .

SCA is a very unreliable method when crudely implemented, as most people do, without safeguards such as use of trust regions or line search. I recommend such people use a high quality off-the-shelf non-convex nonlinear optimization solver, such as available under YALMIP, rather than writing their own SCA solver.

You are free to try to implement a safeguarded SCA using line search or trust regions, but assistance in doing so is out of scope of this forum.