my code is here how to solve xlog2(1+b/x)
x*log2(1+b/x) can be reformulated as
WOW vert helpful Nice Mark
but i meet new problem， your method is useful, but the transformed formula is on the denominator
how to solve it
-rel_ebtr(x,x+b), with b > 0, is positive and concave, Therefore
inv_pos(-rel_entr(x,x+b)) can be used in place of
Dos that cover your situation?
thanks! Mark, but l have another question: how to reformulate x*log2(1+b/(c+dx))
This has been covered in previous posts on this forum. I’ll let you search for them or figure it out yourself, so that you will lean something in the process…
x*log2(1+a/(b+cx)) can reformulate as( (b+cx)log2(1+a/(b+cx)) - blog2(1+a/(b+cx)) )/c,and (b+cx)log2(1+a/(b+cx)) can reformulate as -rel_entr(b+cx,b+cx+a), but blog2(1+a/(b+cx)) I dont know how to reformulate
You can find many relevant posts by searching on this forum for
rel_entr . If you study the reformulations and their derivations, yol should be able to improve your ability to figure things out yourself.
Here is one of several which should help you
You need to divide by
rel_entr uses MATLAB’s
log, which is the natural log.
Thanks Mark， I forgot to divide by log(2).
Why do I use them to calculate different results？It should be equivalent in theory
What “different results” are you referring to? The purpose of the reformulation is to create a mathematically equivalent formulation which CVX will accept. If the optimal solution is not unique, different mathematically equivalent formulations could produce different argmin’s, even though optimal objective value should be the same to within solver tolerance.