# How to express 1/(x(x+1)) in CVX, where x is a variable?

how to express 1/(x(x+1)) in CVX, where x is a variable?

1/x(x+1)<=y is equivalent to -logx -log(x+1) <= logy

1 Like

I see CVX has `prod_inv` so maybe `prod_inv([x x+1])` should work. (Or whatever the correct Matlab syntax to make that list).

The formulation and syntax in @Michal_Adamaszek 's post is correct.

help prod_inv

prod_inv inverse of the product of a positive vector.
For a real vector, matrix, or X, prod_inv(X) returns 1.0 ./ PROD(X) if
the elements of X are all positive, and +Inf otherwise.

``````For matrices, prod_inv(X) is a row vector containing the inverse
product of each column of X. For N-D arrays, prod_inv(X) is an array of
inverse products taken along the first non-singleton dimension of X.

prod_inv(X,DIM) takes inverse products along the dimension DIM of X.

prod_inv(X,DIM,P), where P is a positive real constant, computes
prod_inv(X).^P. This is slightly more efficient than the equivalent
POW_POS(prod_inv(X),P).

Disciplined convex programming information:
prod_inv(X) is convex and nonincreasing in X; therefore, when used
in CVX specifications, its argument must be concave or affine.``````

The inequality to be modelled can be rewritten as

(y*(x)(x+1))^1/3 >= 1

The left hand side is the geometric mean of [y x x+1].

Most likely this is the idea used to implement prod_inv.

Yes, `prod_inv` uses `geo_mean` .