There are two convex functions 1/2^m and 1/(2^m-1),
I’m using cvx to make the first convex function less than or equal to a number,this is a convex set. As follow
cvx_begin
variables m n t x positive
minimize(m)
subject to
m>0;
pow_p(2^m,-1)<=10
cvx_end
but But if I put the second convex set in the constraint, I get an error. As follow,
cvx_begin
variables m n t x positive
minimize(m)
subject to
m>0;
pow_p(2^m-1,-1)<=10
cvx_end
output:
Disciplined convex programming error:
Illegal operation: pow_p( {convex}, {-1} )
How to fix it
The normal rules of pow_p are violated in both cases:
help pow_p
pow_p Positive branch of the power function.
pow_p(X,P) computes a convex or concave branch of the power function:
P < 0: pow_p(X,P) = X.^P if X > 0, +Inf otherwise
0 <= P < 1: pow_p(X,P) = X.^P if X >= 0, -Inf otherwise
1 <= P : pow_p(X,P) = X.^P if X >= 0, +Inf otherwise
Both P and X must be real.
Disciplined convex programming information:
The geometry of pow_p(X,P) depends on the precise value of P,
which must be a real constant:
P < 0: convex and nonincreasing; X must be concave.
0 <= P < 1: concave and nondecreasing; X must be concave.
1 <= P : convex and nonmonotonic; X must be affine.
In all cases, X must be real.
However, the first, but not the second, of 1/2^m and 1/(2^m-1) satisfies the special log-affine rules documented in Log of sigmoid function - #3 by mcg (that should be in the CVX Users’ Guide, but isn’t).
So you will have to manually reformulate. 1/(2^m-1) <= 10 can be reformulated as (approximately) m >= 0.1375, which is an affine constraint, and therefore will be accepted by CVX.