 # Xlog( 1+ Y/(X+Y) ): DCP rules, and build-in functions in cvx

Hi everyone,

I have a function which is exprssed as f = xlog( 1+ y/(x+y) ). I have verified that function f is jointly concave over x and y, but this form is not accepted by CVX. How can I tconvert into a built-in function of CVX?

I have tried to use the -rel_entr( , ) in cvx, but I did not succeed.
Who can provide me any suggestions or hints?

Your help would be highly appreciated.

edit:

We have : xlog( 1+ y/(x+y) ) = xlog( 1+ z/(1+z) ) for z=y/x. and

-rel_entr( x, x+y)= xlog( 1+y/x )

What else can we do?

This can be entered into CVX as
`-2*rel_entr(x+y,x+2*y) - rel_entr(x+2*y,x+y)`

Derivation:
`x*log(1+y/(x+y)) = (x+y)*log(1+y/(x+y)) - y*log(1+y/(x+y))`

The first term is `-rel_entr(x+y,x+2*y)`.

The second term can be handled with the result from the wizard of conic reformulation @Michal_Adamaszek in Writing x*log(1+x/y) , that
`x*log(1+x/y) = rel_entr(x+y,y) + rel_entr(y,x+y)` , which in this case becomes
`-(rel_entr(x+2*y,x+y) + rel_entr(x+y,x+2*y)))`

Nice solution. Thanks!