One part of my objective function is \parallel AX \parallel_F^2, A is a constant matrix and X is variable matrix. When I use CVX to solve this problem, I write down norm(AX,‘fro’)^2*, and this code violate DCP rules because of the square term. How can I escape this DCP checking?
square_pos(norm(A*X,‘fro’))
You would benefit from a careful reading of the CVX Users’ Guide http://cvxr.com/cvx/doc/
I doubt that is correct @Mark_L_Stone. Why square_pos of a norm? Or maybe I should read the manual too.
Yes @Erling, perhaps you should read the CVX Users’ Guide.
square_pos
is needed for CVX 1.x and 2.x. Or in any event, something other than ^2
.
Due to the sign-dependent curvature analysis used by CVX 3,.0beta, but not used by CVX 1.x or 2.x , CVX 3.0beta is smart enough to allow squaring of a norm without requiring use of square_pos
. Unfortunately, CVX 3.0beta is riddled with bugs which I doubt will ever be corrected, so I don’t recommend its use.
Here is what happens when ^2
rather than square_pos
is used in CVX 2.2
cvx_begin
variable x
norm(x,'fro')^2
Error using cvx/pow_cvx (line 142)
Disciplined convex programming error:
Illegal operation: {convex} .^ {2}
(Consider POW_P, POW_POS, or POW_ABS instead.)
Error in .^ (line 55)
z = pow_cvx( x, y, ‘power’ );
Error in ^ (line 9)
z = power( x, y );
I should read the manual too.