I have no idea what your error message means. Do the Chinese message provide any information? Does the error trace pertain to Mosek? Did the Mosek solver produce any output?
The problem was being solved on my machine. But the problem was very taxing for my machine and it overheated. perhaps @Michal_Adamaszek can run it on a better machine and see what happens.
I am not going to re-run it because I already lost some important work, and don’t want to do that again.
Nt = 9;
Nr = 9;
K = 4;
L = 20;
power = 10^(0/10);
fc = 10;
B = 10;
Tp = 2;
rou = 0.3;
H = (randn(Nt,K)+j*randn(Nt,K))/sqrt(2);
N_pbits = 2*K*L;
msg_bits = randi([0,1],1,N_pbits);
QPSK_table = [1+j -1+j 1-j -1-j]/sqrt(2);
for ii=1:length(msg_bits)/2
temp=2*msg_bits(ii*2-1)+msg_bits(ii*2);
QPSK_symbols(ii)=QPSK_table(temp+1);
end
Y = reshape(QPSK_symbols,[K,L]);%产生星座符号矩阵
u = B/Tp;
fs = B;
sp_num = fs*Tp;
t = linspace(0,Tp,sp_num);
for ii = 1:Nt
X0(ii,:) = exp(j*2*pi*10*ii*fc*(t-1)).*exp(j*pi*u*(t-1).^2);
end
p1 = sqrt(rou);%根号rou
p2 = sqrt(1-rou);
at = [1;exp(-j*pi/2);exp(-j*pi);exp(-j*pi*3/2);exp(-j*pi*2);exp(-j*pi*5/2);exp(-j*pi*3);exp(-j*pi*7/2);exp(-j*pi*4)]';
ar = [0,-j*pi*at(2)*sqrt(3)/2,-j*pi*at(3)*sqrt(3),-j*pi*at(4)*3/2*sqrt(3),-j*pi*at(5)*2*sqrt(3),-j*pi*at(6)*5/2*sqrt(3),-j*pi*at(7)*3*sqrt(3),-j*pi*at(8)*7/2*sqrt(3),-j*pi*at(9)*4*sqrt(3)].';
s = j*sqrt((1-rou)*1/3);
aj = ar*at;
B = [p1*H,s*aj].';%eye函数表示对角元素为1,其余全为零的N*N矩阵;.'表示一般转置
C = [p1*sqrt(power)*Y;zeros(Nr,L)];%根号power*Y=S的转置,X_arbi等于参考波形X0的转置
A1 = diag([ones(1,Nt*L),1]);
A3 = zeros(Nt*L+1,Nt*L+1);
A3(Nt*L+1,Nt*L+1)=1;
temp1 = kron(eye(L),B);
F = [temp1'*temp1,-temp1'*vec(C);-vec(C)'*temp1,vec(C)'*vec(C)];
cvx_begin sdp
cvx_solver mosek
variable M(Nt*L+1,Nt*L+1) hermitian
minimize(real(trace(F*M)));
subject to
norm(diag(M),inf) <= power/Nt;
trace(A1*M) == L*power+1;
%trace(A3*M) <= power/Nt;
M == hermitian_semidefinite(Nt*L+1);
cvx_end
[V,D] = eig(M);
[value,num] = max(diag(D));
x = sqrt(value)*V(:,num);
X = reshape(x(1:Nt*L),Nt,L);
but I replace the constraints norm(M,inf) <= power/Nt; with norm(diag(M),inf) <= power/Nt;the solution becomes infeasible.can you run it and help me find the reason?Thank you very much!
I don’t understand this. it should be the case that norm(N,inf) >= norm(diag(M),inf). Therefore, for the same input data,norm(diag(M),inf) <= power/Nt should be a looser constraint than norm(M,inf) <= power/Nt So the former shouldn’t be infeasible while the latter is feasible. On the other hand, my machine crashed before Mosek completed when solving the norm(M,inf) <= power/Nt version, so I am not sure Mosek might not have eventually concluded that was infeasible even though I thought it was headed toward a feasible and perhaps optimal solution.
I solved your small problem (the one with diag(M)) by modifying the objective to
minimize(norm(diag(M),inf));
and removing the corresponding constraint for this norm. Then I see the minimum is found around 0.116… In the original code power/Nt is 0.111… so your constraint is too tight.
(Please try not to use random data, makes reproducible testing harder).
Now, regarding the big problem (with norm(M)). By adding all entries of M to the norm you suddenly have 30k cones instead of 180 and the semidefinite variable appears in 30k constraints instead of 180. Now the memory complexity (and indirectly also time complexity) of the semidefinite algorithm is (roughly) proportional to the square of that number, that is around 1G. So you should expect it to use a lot of RAM. I have gone through 5 iterations now and it looks around 20GB are enough. (Set MSK_IPAR_INTPNT_ORDER_METHOD to MSK_ORDER_METHOD_APPMINLOC to avoid a very long ordering phase after presolve).
I hope when it terminates the answer will be infeasible because of @Mark_L_Stone’s argument. (On the small problem Mosek finds the reason in presolve and on the big one somehow fails to notice it, but then I presume you are more interested in the case when the problem will be feasible, anyway).