I have the following problem and got stuck in it.
i want to maximize and objective function which is capacity given by
C = log_2(det(I_M+SNR.deltaH*H’))
where I_M is identity matrix of size M. SNR is scalar. delta is a diagonal matrix of size M. H is a random matrix or rayleigh distributed elements of size M.
the constraints are that elements of diagonal matrix must be random and must be always in the range of 0 to 1. The second constraint is that the sum of diagonal elements should be equal to M’ which is integer smaller or equal to M.
I have written the following code for this. i have used log_rootn in instead of log_det. This code gives some values of C but elements of delta matrix always are the same. Please help me in this regards
SNR = .2;
M = 10;
M_sel = 2;
I_M = eye(M);
H = randn(M,M);
variable delta(M,M) diagonal
C = I_M+SNR.deltaH*H’;
for i = 1:M
delta(i,i) <= 1
delta(i,i) >= 0
I believe you are noting that all diagonal elements of the maximizing value of delta are equal to M_sel/M, regardless of the random instantiation of H. This is a mathematical consequence of your model. Essentially, you are maximizing det©, i.e., maximizing the product of the eigenvalues of C. Because delta is psd due to your constraints, C is psd. So for purposes of finding the argmax, we can ignore the additive eigenvalue shift of 1 induced by I_M. So now we’re left with maximizing
det(SNR*delta*H*H'), which equals
Given that SNR is positive and det(H*H’) is non-negative, this is thus equivalent to maximizing det(delta), which, given the constraints, is achieved by setting all diagonal elements of delta to M_sel/M, and is independent of the particular H matrix.
Well it works but the diagonal elements of delta that i get are all the same. i want random values which are less than 1 and greater than 0. and if u sum them they should be = M_sel
I explained why you are getting those results. If they are are not to your liking, then your model is inadequate. I don’t know what you are really trying to do. If you just want your stated result, you can just generate random numbers and normalize them, using acceptance/rejection if necessary.