bar_r=[10 10 10 10];
variable Fk(N,K) semidefinite;% c7
variable rho_k(K) ;
%variable mu_k(K) nonnegative;
minimize( all_F_k )
total = 0;
for k = 1:K
sumj = 0;
for j = 1:K
if j ~= k
sumj = sumj + h_k(k) * Fk(j) * h_k(k)' ;
%total = total + mu(k) * (h_k(k) * Fk(k) * h_k(k)' - sumj) * inv_pos( bar_r(k) );
total = total + mu(k) * ( ( h_k(k) * Fk(k) * h_k(k)'* inv_pos( bar_r(k) ) )- sumj) ;
sumj_10+(nois_var_ak)*(nois_var_ak) >= P_hat * inv_pos(1- rho_k(k));%c10
So in fact,i want to minimize the F_k,and find the optimal value of F_k and rho_k,but after finishing runing this code,the window just show me one optimal value,and i am not sure that this optimal value is min F_k , F_k or rho_k
Optimal value (cvx_optval): -0.86155
You have declared Fk as a single matrix. There are not K different Fk(j) matrices…
Declare as variable Fk(N,N,K) semidefinite
This will make Fk(:,:,k) be semidefinite for each k from 1 to K; so that takes care of c7.
c3 should be 0 <= rho_k <= 1
Your constraint 0<=rho_k(k)<= 1
only constrains rho_k(K) , because k has the value K when that line of code is executed.
With these hints, hopefully you will go carefully through your code and figure out what needs to be fixed. I think you will benefit by carefully re-reading the CVX Users’ Guide, ans start with simpler example, then perhaps modify them, Then come back to the problem you really want to solve.
Edit: Here is what your code
actually does. Because F_k(k) is the kth element, as stored, of the matrix F_k , all_F_k sums the elements of the first column of F_k , Because F_k is symmetric due to being declared semidefinite, that is the same as the sum of the elements of the first row of F_k , which of course is not what you want.
Maybe you misunderstand my thinking,in fact,j and k are the same,but also not totally the same.let me take an example
If K is 4,and the range of k is 1 to 4,so k can be 1,2,3,4.in fact , j can also be 1,2,3,4.however,if there is one constraint between k and j ,that is if k=1,then j can just be 2,3,4.if k=2,j can just be 1,3,4.in short,the range of k and j are the same,but the value of k and j cannot be the same.that’s why i will write Fk(j)
Given MATLAB’s and CVX’s syntax, your code does not properly implement the model you displayed. I gave you some hints of some of what needs to be fixed. You seem to be trying to impose your own desired syntax onto MATLAB/CVX, but that will not work.