When I try to run the program, Matlab reports the error “Unable to perform assignment because value of type ‘cvx’ is not convertible to ‘double’.”
I tried to define U as ‘expression’ to avoid it, but actually U needs to be used in the iterative process. And when I did that, the program will report another error “An objective has already been supplied for this problem.”
I can’t understand what happened, and don’t know how should I do next.
Hope for your solutions! Thank you faithfully.
The problem needs to solve is:
And W with ‘~’ is the maximum value of the absolute value of matrix W’s elements.
The following is part of my program:
cvx_begin sdp % cvx_solver sdpt3 variable W(L,N) complex; expression U(N,N); expression vector(N,1); for l = 1:L wl = W(l,:); s_judge(l) = L - length(find(wl)); % s_judge(l) = sum(wl ~= 0); end while (s_judge ~= P) mu = 1/2*(mu_min + mu_max); total = 0; total_s = 0; for l = 1:L wl = W(l,:); W_l = toeplitz(wl,conj(wl)); % W_l = wl*wl'; W_aux = max(abs(wl)) * ones(N,N); for p = 1:N for q = 1:N R_l(p,q) = Rl(l,p,q); Rs_l(p,q) = Rl_s(l,p,q); end end total = total + real(trace(R_l*W_l)) + mu * real(trace(U*W_aux)); total_s = total_s + trace(Rs_l*W_l); end minimize total; subject to real(trace(total_s)) >= 1; for l = 1:L wl = W(l,:); W_l = toeplitz(wl,conj(wl)); lambda_p = lambda_max(W_l); W_l * vector == lambda_p * vector; prc_vector(:,l) = vector; % prc_vector(:,l) = V_Wl(1,:); % prc_vector --- principal vector of W^(l) W_aux = max(abs(wl)) * ones(N,N); W_l >= 0; W_aux = W_aux.'; % triu(W_aux) >= triu(W_l); end y = 1/L * sum(prc_vector,2); Y = toeplitz(y,y); for m = 1:N for n = 1:N tmp = Y(m,n) + epsilon; U(m,n) = inv_pos(tmp); end end if s_judge > P mu_min = mu; else s_judge < P; mu_max = mu; end end cvx_end