ops = sdpsettings('solver','mosek','verbose',0,'savesolveroutput',1,'cachesolvers',1);
%% G-PDCA
x = sdpvar(1,1); y = sdpvar(1,1); t1 = sdpvar(1,1); t2 = sdpvar(1,1); W = sdpvar(NR,NR,'full','complex');
S = sdpvar(NR+1,NR+1,K,'hermitian','complex'); Psi = sdpvar(NR,NR,'hermitian','complex'); rho = sdpvar(1,K); s = sdpvar(1,1);
F = sdpvar(NR+1,NR+1,K,'hermitian','complex');
Q = 10^4; mu = 10; maxiter = 20; SS = sqrt(min(PS, min(gamma*SE^2./abs(abs(ge1)+sqrt(ep1)).^2)));
qq=1/SS^2; WW=0.99*sqrt(PR/(h1'*h1/qq+SR^2*NR))*eye(NR); tt2=real(SR^2*h2'*WW*WW'*h2+SD^2);
tau=0.01;
for iter = 1:maxiter
Psi = 0;
SINR(iter)=abs(h2'*WW*h1)^2/qq/tt2;
M1 = [qq*eye(NR), W*h1; h1'*W', t3];
Omega = [SR^2*h2'*W*W'*h2+trace(h2*h2'*Psi)+SD^2<=t2; M1>=0;...
t3+SR^2*trace(W*W')+trace(Psi)<=PR; Psi>=0];
Obj = -abs(h2'*WW*h1)^2/tt2-2*real(h2'*(W-WW)*h1*h1'*WW'*h2)/tt2+abs(h2'*WW*h1)^2/tt2^2*(t2-tt2);
%M2 = [x, t2, t1; t2, y, q; t1, q, 1];
C=[t1>=0; t2>=0];
for k=1:K
P = [eye(NR),ge2(:,k)];
Lambda = blkdiag(rho(k)*eye(NR),gamma*SE^2-ep2*rho(k));
M3 = [qq, h1'*W'*P; P'*W*h1, F(:,:,k)]; % Correct
C=[C; M3>=0; F(:,:,k)-Lambda-gamma*P'*Psi*P-gamma*SR^2*P'*(WW*WW'+(W-WW)*WW'+WW*(W-WW)')*P<=S(:,:,k); S(:,:,k)>=0];
Obj=Obj+tau*trace(S(:,:,k));
end
%DC = [x-2*tt1*(t1-tt1)<=0];
C = [C; Omega];
Obj=Obj+5*trace((W-WW)*(W-WW)');
sol=optimize(C,Obj,ops);
tt2=double(t2); WW=double(W);
Phi=dual(C(4));
tau=min(mu*tau,10^4);
sv(iter)=double(trace(S(:,:,1)));
end