Here is my cvx code piece. The optimization variable in this equation is vk.
cvx_begin
variable vk(nTX,d(k))
expression part2
expression Nj
for j=1:K
if j~=k
Nj = 0;
for i=1:K
if i~=j && i~=k
Nj = Nj + norm(h{j,i}'*V{i})^2 + sigma_n2 * norm(U(j))^2;
end
end
part2 = part2 + w(j) * norm(h{j,k}'*vk)^2 / Nj;
end
end
maximize(2*w(k)*log2(norm(h{k,k}'*vk)) - part2)
(vk).^2 <= P(k);
h{k,k}'*vk > 0;
cvx_end
I get the following error:
??? Error using ==> cvx.pow_cvx at 142
Disciplined convex programming error:
Illegal operation: {convex} .^ {2}
(Consider POW_P, POW_POS, or POW_ABS instead.)
Error in ==> cvx.power at 55
z = pow_cvx( x, y, ‘power’ );
Error in ==> cvx.mpower at 9
z = power( x, y );
Error in ==> z_run_cvxopprecoder_randomchannel at 290
part2 = part2 + w(j) * norm(h{j,k}’*vk)^2 / Nj;
I tried to use other functions but I didn’t help. I think the problem needs to be formulated in a different way. The function I am trying to optimize can be found in the following paper:
http://www.ee.ucla.edu/~yuezhao/ZDGP_Allerton12.pdf - The equation number is (14).
Any help would be appreciated.
Use sum_square_abs instead of norm()^2.
Thanks for your useful answer, I tried your suggestion and it works. However I encountered another problem with using “log” function. The new version of the code is as below:
cvx_begin
variable vk(nTX,d(k))
expression part2
expression Nj
for j=1:K
if j~=k
Nj = 0;
for i=1:K
if i~=j && i~=k
Nj = Nj + sum_square_abs(h{j,i}'*V{i}) + sigma_n2 * sum_square_abs(U{j});
end
end
part2 = part2 + w(j) * sum_square_abs(h{j,k}'*vk) / Nj;
end
end
maximize(2*w(k)*log(h{k,k}’*vk)/log(2) - part2)
sum_square_abs(vk) <= P(k);
((h{k,k}’*vk))) > 0;
cvx_end
I get the following error:
??? Error using ==> cvx.log at 64
Disciplined convex programming error: Illegal operation: log( {complex affine} ).
Is there an equivalent formulation for the objective function?
Thanks in advance.
What are you expecting here? Taking the logarithm of a complex value isn’t just non-convex, it is not well defined. Solve your modeling problem and you will likely have your answer.
how can i write the expression
(x1)^p+(x2)^p+(x3)^p+…+(xn)^p where p is a positive coefficient .
Depending on the values of xi’s and p, look at whether pow_abs, pow_pos, or pow_p would be appropriate in your situation.
thnks,pow_p works fine.
i have one more doubt .i have an equation b=(aij)./(1-aij) inside cvx block , where b and aij are symmetric variable matrix ,while i was trying to implement that equation i am getting below mentioned error
Cannot perform the operation: {real affine} ./ {real affine}. i understand why i am getting that error but don’t know how to solve it .
thanks
chakravarthy
i tried to solve it by b==inv_pos(inv_pos(aij)-1) (equivalent form of aij./(1-aij)). then i am getting errors
Illegal operation: pow_p( {convex}, {-1} ) and
Error in cvx/inv_pos (line 5) ; y = pow_cvx( x, -1, ‘pow_p’ );
yes,that was posted by my friend only …we have to solve a convex equation in which a/(1-a) is a part to calculate
How to write this expression in cvx?
is there any method to convert a/(1-a ) to convex or can we find dual for that?!!
I am new at cvx and I am actually facing the same challenge in my codes.
My optimization problem is very long, but the problem is at line 142 , => i.e, for i = 1:N
power(h_cvx ,2) + power(x_cvx - position(i,1) ,2) + power (y_cvx(3) - position(i,2) ,2) - u_cvx<= 0;
Here is the error I got:
Error using cvx/pow_cvx (line 142)
Disciplined convex programming error:
Illegal operation: {convex} .^ {2}
(Consider POW_P, POW_POS, or POW_ABS instead.),
I tried the above expression and none of them worked out. Any help would be appreciated.
Do you know that the cvx_expression you are squaring is always nonnegative? if so, you can use square_pos(cvx_expression)). If not, have you proven the problem is convex?
Thanks for your kind attention to this matter. By mathematical proof, I am sure my problem is convex and it is in GP mode. However, using "square_pos (cvx_expression) " as you suggested couldn’t fix the error. May be, I should try to find another way that can meet cvx solver’s rule sets. Many thanks.