# Disciplined convex programming: Transforming SDP constrants

Dear Friends,

first I had the following constraint:

 log( real (  eye(3,3) + h*X*h' ) ) >= u1


where h is a 1 by 3 vector, X is a 3 by 3 hermitian matrix. To change the form of the problem, I replaced X by ww^H where w is 3 by 1 vector. Then, I used anti-log to reach the following constraint as:

  abs(h*w2)>=sqrt(2^u1 - 1);


but I get the following error:

  Disciplined convex programming error:
Illegal operation: sqrt( {convex} ).


Then, I tried to change to

  norm([h*w , 1])>=sqrt(2^u1);


However, I got the same error as:

Disciplined convex programming error:
Illegal operation: sqrt( {convex} ).


I tried to remove the \sqrt() by reforming it as:

 (norm([H_A.'*w2 , 1]))^2>=(2^u1);


But I got another error as:

 Disciplined convex programming error:
Illegal operation: {convex} .^ {2}


Then I tried:

       norm([H_A.'*w2 , 2])>=(2^u1);


There was another error like:

     Disciplined convex programming error:
Invalid constraint: {convex} >= {log-affine}


finally, I could not get a format that falls within the rule set of CVX. Is there any way to solve this issue?

Most importantly, does my approach reduce from the difficulty of the problem? (changing the constraint by taking anti-log) It seems that still the constraint is from the log family and the complexity may remain the same. However, the problem will not be SDP anymore.

I do not mean to cause offense, but you are using CVX incorrectly. Nobody should simply iterate like this, trying different forms of the same constraint to see if CVX will happen to accept it. As stated in the first section of the user’s guide (emphasis mine):

CVX is not meant to be a tool for
checking if your problem is convex.
You need to know a bit about convex
optimization to effectively use CVX;
otherwise you are the proverbial
monkey at the typewriter, hoping to
(accidentally) type in a valid
disciplined convex program. If you are
not certain that your problem is
convex before you enter it into CVX,
you are using the tool improperly, and
In your examples above you have typed numerous expressions into CVX that simply were not convex. It’s not just that they violate the rules of the DCP ruleset; they are not even convex in the first place—except for the original form involving X. Unfortunately, attempting to replace X with w*w' changes the problem in fundamental ways.
The first step to using CVX is to prove that your model is convex before you even type it in. This must be firmly established before typing cvx_begin! If you cannot demonstrate convexity, it really is impossible to use CVX effectively.