I have a question about the CVX grammar. Assuming that “x” is a variable vector, or a affine expression. Now I want to square each element of “x”, and I think there are 3 kind of expressions (or more?) to do this:
1: x.^2
2: power(x,2)
3: square(x)
Does these 3 expressions correct in CVX grammar (conforming to the DCP rules )? (If they are not correct, then what expression is correct?)
Does these expressions have difference on accuracy of result and computation time, when running the CVX solvers?
In short, my question is what is the best expressions to realize “square each element of x”.
Thanks. Actually, what makes me confused is Section 5.7 of CVX users’ guide, which says " (x^2 + 1)^2 = x^4 + 2x^2 + 1 is convex. But CVX will reject the expression, because the outer square cannot accept a convex argument.". So CVX users’ guide recommends to use expression “square_pos( square( x ) + 1 )”.
In my opinion, using the CVX-defined function such as “square_pos” and “square” instead of original MATLAB operator such as “^2” and “.^2” solves the problem mentioned above, because those CVX-defined function may do some translation work to make sure the underlying solver works successfully.
Considering the presence of those translation work, I worry that different expressions such as “x.^2”, “power(x,2)”, and “square(x)” may make the underlying solver works in different way. And this may cause difference on accuracy of result and computation time?
I know my worry is probable nothing, but it really bother me. Hope you can help me. Thanks.
Your opinion is not fully correct. square_pos is different than `square’ and the other forms you provided. I stand by my previous reply.
CVX 3.0beta does accept the expression mentioned in the 2nd sentence of your first paragraph. Unfortunately, CVX 3.0beta is riddled with bugs, so I recommend you don’t use it. Rather, use CVX 2.1 with square_pos as needed.