Could anyone tell me how to handle this DCP rule?

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?

1 Like

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.