Log(1+x/(A+Bx))for channel capacity maximization

Hi, everyone, here I encounter a maximization problem, the function log(1+x/(A+Bx)) I believe is concave. But it is hard to write a expression based on the DCP rules for me. I tried many build-in functions.
Anyone help me out? Thanks a lot.

n = 16; %
% g = eye(n)randn(n,n); %
10^-1; %
B=110^-1; %
Pnoise=abs(rand(n,1)/5); %
SNR=Hn./Pnoise; %
Ptx = 1; % Power budget
C = ones(1,n);
variable p(n)
maximize( sum(log((Pnoise’+B
% maximize( sum(log(Pnoise’+B
p == Ptx


I think your objective function is neither concave nor convex. Take for example, f(x) = log((1+x)/(1+1.1*x)) . Its second derivative can be positive or negative depending on the value of x. That holds true for log(1+x/(A+Bx)) as well.

Dear Mark, thanks a lot. But my function is constrained p>0, which means it is concave in this range, the same as your function. So I cannot maximize the function by using CVX in this case? Thanks in advance.

Given that Pnoise >= 0 due to use of abs, then your objective function is concave for p >= 0. However, I don’t see how to enter this is a way which CVX will accept. Dealing with a function which is not convex (or concave as appropriate) over its whole domain, but which is convex (concave) over a restricted region specified by the constraints, can often not be formulated so that CVX can accept it.

I do not rule out that someone else can figure out a way to formulate your problem so that CVX can accept it.

Thanks. It seems a hard problem now although the log function is commonly used.

Dear Xiong,

I’m also interested in the problem. I’m working in a group trying to maximise the sum of loglog(1+SINR), where SINR=Sp/Ip+sigma. This is a problem from Boyd & Vandenberghe’s most excellent additional exercises, Q12.11. (https://web.stanford.edu/~boyd/cvxbook/bv_cvxbook_extra_exercises.pdf) Although this is not an answer maybe the problem stated in a different way may give a hint?
We’re finding it impossible to write in DCP in cvxpy. DDCP (only available in cvxpy not MATLAB) seemed promising as one could write log(x/y)=log(x)-log(y) but cvxpy did not seem to like a log nested within a log for the loglog function. The MATLAB program was attractive as one could write a custom loglog function outside the cvx environment and include it in the objective function but I haven’t got further here yet as it doesn’t support DDCP.

What is DDCP (presuming that’s not a typo)? I didn’t see that acronym associated with cvxpy. If there is a DDCP, how does it differ from DCP?

Hello Mark, apologies that was a typo, I meant DCCP (https://github.com/cvxgrp/dccp), an extension that only seems available in cvxpy at the moment for ‘difference of convex programming’.

Xiong: You may find this article I found today useful. Liang Zheng has maximised the ‘sum of weighted log (1+SINR)’ already (paper). On Fig 1 (p670), she says the above problem isn’t convex but with some assumptions can be made convex. Her MATLAB code uses cvx with a branch-and-bound algorithm.

Perhaps the method she has used is applicable to Boyd’s similar problem i.e. maximising the sum of log log (1+SINR)?

The link for the paper is broken. Would you please tell me the paper title? It could be helpful in my work. Thanks

See https://github.com/cvxgrp/dccp and the link https://stanford.edu/~boyd/papers/dccp.html provided there. . The links in that latter link have the actual paper and all work.

  • Hello, have you solved this problem yet?