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.


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)

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!