# 1/x^2 (convex using DCP)

(Thomas) #1

How can I express 1/x^2 as a convex function using DCP rules?

(Let’s say I want to solve the following problem:
cvx_begin
variables x
minimize 1/x
subject to
1<=x<=2
cvx_end)

(Mark L. Stone) #2

You can use `inv_pos(x)` or `pow_p(x,-1)` for 1/x,
or use `pow_p(x,-2)` or `square(inv_pos(x))` for 1/x^2.

This is addressed in the CVX Users Guide http://cvxr.com/cvx/doc/funcref.html#new-functions .

Edit: As discussed below, `square(inv_pos(x))` is valid under CVX 3.0beta, but not under CVX 2.1.

(Thomas) #3

Thanks a lot.
pow_p(x,-2) works fine!
(However square(inv_pos(x)) produces the error Illegal operation: square( {convex} )).

(Mark L. Stone) #4

Sorry about that. `square(inv_pos(x))` works under CVX 3.0beta which is more “lenient” (sophisticated) on sign-dependent matters, but not under CVX 2.1. `square_pos(inv_pos(x)`) should work under both CVX 2.1 and 3.0 beta. As well, of course, as `pow_p(x,-2)` .

(Thomas) #5

I have another question and I would be grateful if you could help:

Even though x/(x+1)^2 is not convex on the whole real line, it can be shown that it is convex for x>=2.

How can i formulate let’s say the following problem in CVX?

‘minimize x/(x+1)^2
subject to 2<=x<=3’

(Mark L. Stone) #6

I don;t see how to do it. Convexity (or concavity) only over a restricted range is often not possible to deal with in CVX. But I’m not saying it definitely can’t be done. So I’ll leave your question at X/(x+1)^2 convex for x>=2 open, so that someone can weigh in more definitively.

Edit: My suspicion is confirmed by mcg’s answer at the linked question.

(Saqib Iqbal) #7

How can we write X\Y? is it correct to write it as inv_pos(X)*Y ???

Disciplined convex programming error help
(Mark L. Stone) #8

No.

Perhaps if you show the entirety of your problem, someone can help.

Are you trying to specify a vector `c` as a solution of `X*c = Y`? If so, and if `X` is an input matrix and not a CVX variable or expression, then include the constraint `X*c == Y`, then use `c` elsewhere in your program however you want, so long as in compliance with CVX’s DCP rules. If `X` and `c` are both CVX variables or expressions, that constraint would be non-convex and not allowed.