cvx_begin sdp
cvx_solver sdpt3
variable W_IRS(M,M,K) hermitian
W_sum=zeros(M,M);
for i=1:K
W_sum=W_sum+W_IRS(:,:,i);
end
C=0;
C1=0;
C2=0;
D1=0;
D1_tr=0;
D21=0;
D22=0;
D2=0;
D2_tr=0;
D2_sum=0;
for i=1:K
Bob_zi=real(trace(H_k(:,:,k)'U_preH_k(:,:,k)W_sum));
C1=(1/log(2))(-log(Bob_zi+noisepow_Bob^2));
for j=1:L
Eve_mu=real(trace(H_l(:,:,j)'U_preH_l(:,:,j)(W_sum-W_IRS(:,:,i))));
C2=C2-1/L(1/log(2))(log(Eve_mu+noisepow_Eve^2));
end
C=C+C1+C2;
C2=0;
end
for i=1:K
for k=[1:i-1,i+1:K]
D1_mu=trace(H_k(:,:,k)'U_preH_k(:,:,k)(W_sum_pre-W_pre(:,:,k)));
D1_zi=H_k(:,:,k)‘U_preH_k(:,:,k);
D1=D1-1/log(2)(D1_zi/(D1_mu+noisepow_Bob^2));
end
D1_tr=D1_tr+real(trace(D1’W_IRS(:,:,i)));
D1=0;
end
for l=1:L
for i=1:K
D21_mu=Ltrace(H_l(:,:,l)'U_preH_l(:,:,l)W_pre(:,:,i))+trace(H_l(:,:,l)'U_preH_l(:,:,l)(W_sum_pre-W_pre(:,:,i)));
D21_zi=LH_l(:,:,l)‘U_preH_l(:,:,l);
D21=D21_zi/(D21_mu+noisepow_Eve^2);
for k=[1:i-1,i+1:K]
D22_mu=Ltrace(H_l(:,:,l)'U_preH_l(:,:,l)W_pre(:,:,k))+trace(H_l(:,:,l)'U_preH_l(:,:,l)(W_sum_pre-W_pre(:,:,k)));
D22_zi=H_l(:,:,l)'U_preH_l(:,:,l);
D22=D22+D22_zi/(D22_mu+noisepow_Eve^2);
end
D2=D21+D22;
D2_tr=D2_tr+real(trace((-1/(Llog(2))*D2)’*W_IRS(:,:,i)));
D22=0;
end
D2_sum=D2_sum+D2_tr;
D2_tr=0;
end
pow=0;
for i=1:K
pow=pow+trace(W_IRS(:,:,i));
end
minimize (C-D1_tr-D2_sum)
subject to
pow <= P;
for i=1:K
W_IRS(:,:,i) == hermitian_semidefinite(M);
end
cvx_end
cvx_status;
if (cvx_optval==inf) || (cvx_optval==-inf)
disp([’%%%%%% CVX SDP SCA error: ‘,num2str(cvx_status),’ %%%%%% ']);
inf_flag = 1;
break
end
W_sum=zeros(M,M);
for i=1:K
W_sum=W_sum+W_IRS(:,:,i);
end
cvx_begin sdp
cvx_solver sdpt3
variable U(N+1,N+1) hermitian
C=0;
C1=0;
C2=0;
D1=0;
D1_tr=0;
D2=0;
D2_tr=0;
D2_sum=0;
for i=1:K
Bob_zi=real(trace(H_k(:,:,k)*W_sum*H_k(:,:,k)'*U));
C1=(1/log(2))*(-log(Bob_zi+noisepow_Bob^2));
for j=1:L
Eve_mu=real(trace(H_l(:,:,j)*(W_sum-W_IRS(:,:,i))*H_l(:,:,j)'*U));
C2=C2-1/L*(1/log(2))*(log(Eve_mu++noisepow_Eve^2));
end
C=C+C1+C2;
C2=0;
end
for i=1:K
D1_mu=trace(H_k(:,:,i)*(W_sum-W_IRS(:,:,i))*H_k(:,:,i)'*U_pre);
D1_zi=H_k(:,:,i)*(W_sum-W_IRS(:,:,i))*H_k(:,:,i)';
D1=D1-1/log(2)*(D1_zi/(D1_mu+noisepow_Bob^2));
end
D1_tr=real(trace(D1'*U));
for l=1:L
for i=1:K
D2_mu=L*trace(H_l(:,:,l)*W_IRS(:,:,i)*H_l(:,:,l)'*U_pre)+trace(H_l(:,:,l)*(W_sum-W_IRS(:,:,i))*H_l(:,:,l)'*U_pre);
D2_zi=L*H_l(:,:,l)*W_IRS(:,:,i)*H_l(:,:,l)'+H_l(:,:,l)*(W_sum-W_IRS(:,:,i))*H_l(:,:,l)';
D2=D2-1/(L*log(2))*(D2_zi/(D2_mu+noisepow_Eve^2));
end
D2_tr=real(trace(D2'*U));
D2_sum=D2_sum+D2_tr;
D2_tr=0;
D2=0;
end
minimize (C-D1_tr-D2_sum)
subject to
for n=1:N+1
U(n,n) == 1;
end
U == hermitian_semidefinite(N+1);
cvx_end
cvx_status;
if (cvx_optval==inf) || (cvx_optval==-inf)
disp(['%%%%%% CVX SDP U error: ',num2str(cvx_status),' %%%%%% ']);
inf_flag = 1;
break
end
[value_IRS]=calvalue(H_k,H_l,W_sum,W_IRS,U,noisepow_Bob,noisepow_Eve,K,L)
W_pre=W_IRS;
U_pre=U;
rate_pre=rate_cur
rate_cur=value_IRS