cvx_begin
variable C2(2K,1);
variable q(2,1);
expression R_UAV_K(1,2K);
expression R_K_UAV(1,2K);
expression R_min(2K,1);
……
maximize (sum(R_min))
subject to
for k=1:1:2K
for i=1:1:2K
if A(k,i)==1
C2(k)<=C2(i);
end
end
end
cvx_end
The snippet you have shown is not sufficient to show why CVX would have issued that message. Perhaps in the omitted part of the program in the …, , you have something like C2 = <something>
, which by virtue of =
(assignment) rater than ==
is overwriting (superseding) C2
rather than constraining it. Or there is a declaration expression C2
Please provide a complete reproducible problem, including all of the CVX output.
Thank you for your help.the complete code is as follows:
cvx_begin
variable C2(2K,1);
variable q(2,1);
expression R_UAV_K(1,2K);
expression R_K_UAV(1,2K);
expression R_min(2K,1);
for k=1:1:2*K
P(k)=1;
U(: , k)=[x_user(k);y_user(k)];
coor_L(k)=norm(U(:,k)-qL(: ,1));
XL(k)=norm(U(:,k)-qL(:,1))^2;
d(k)=(H^2+XL(k));
h(k)= p0./sqrt(d(k));
C2(k)=pow_pos(norms(U(:,k)-q(:,1)),2);
end
fai=sigma./(P_UAV*(p0^2));
delta=zeros(2K,2K);
z1=0;
for k=1:1:2K
for i=1:1:2K
z1=z1+b_down(i)B(k,i);
end
delta(k,i)=fai(H^2)+z1;
R_UAV_K(k)= log2(1+b_down(k)./(delta(k,i)+faiXL(k)))-b_down(k)fai(C2(k)-XL(k))./((log(2))(delta(k,i)+b_down(k)+faiXL(k))(delta(k,i)+fai*XL(k)))
end
z2=0;
tao=zeros(1,2K);
for k=1:1:2K
for i=1:1:2K
z2= z2+A(k,i)p0^2./d(i);
end
tao(k)=z2;
R_K_UAV(k)=log2(1+P(k)p0^2./((tao(k)+sigma)(H^2+XL(k))))-p0^2P(k)(C2(k)-XL(k))./(log(2)(H^2+XL(k))(H^2+XL(k)+p0^2P(k)));
R_min(k)=min( R_K_UAV(2K-k+1),R_UAV_K(k));
end
maximize (sum(R_min))
subject to
for k=1:1:2*K
for i=1:1:2*K
if A(k,i)==1
C2(k)<=C2(i);
end
end
end
cvx_end
Owing to the version ,the multiplication sign * in the code is omitted
Instead of declaring it as
variable C2(2*K,1);
,
use
expression C2(2*K,1);
or equivalently,
expression C2(2*K)
Read the material on expression holders at
I have a question that in my code,I ought to define a variable like C2(2*K,1),but the same expression like variable also exists in the constraints,so how should I to avoid this conflict?
And if I choose to declare C2(2*K,1) as expression ,there exists no variable longer
if it is a variable, why did you define it as C2(k)=pow_pos(norms(U(:,k)-q(:,1)),2);
? this means it is not a variable, but an expression. pls read the cvx uses’ guide.
Oh,I found it.But I change it into C2(k)=pow_pos(norm(U(:,k)-q(:,1)),2) again.
I take the whole so-called expression C2(k)=pow_pos(norm(U(:,k)-q(:,1)),2) as a variable in which U(:,k) we have known its value ,just q(:,1) is a variable .Based on it ,do you think I should define a q(:,1) as a variable rather than C2(k)=pow_pos(norm(U(:,k)-q(:,1)),2)? I would appreciate if you could help
I have tried change variable C2(2K,1) into expression C2(2K,1)
But there still exists a fault as follows
Disciplined convex programming error:
Invalid constraint: {convex} <= {convex}
出错 <= (line 21)
b = newcnstr( evalin( ‘caller’, ‘cvx_problem’, ‘[]’ ), x, y, ‘<=’ );
出错 test (line 145)
C2(k)<=C2(i);