How to implement following function $\sum\limits_i {\sum\limits_k {{y_i}\log (1 + \frac{{x_i^k}}{{{y_i}}})} } $

Uncategorized
Aug 22, 2013
A

hi.
I’m trying to use cvx to realize the following function \sum\limits_i {\sum\limits_k {{y_i}\log (1 + \frac{{x_i^k}}{{{y_i}}})} } .
Because the dimension of x and y is mismatched, it seems difficult for me. Any help??

M

Using mcg’s “trick” from x\log(1+1/x) using CVX , each term of the double summation can be expressed as -rel_entr(y(i)+x(i)^k,y(i)) , which is DCP-compliant and convex. So the entire double summation is a sum of DCP-compliant convex terms, and hence is DCP-compliant convex.

Edit: each term should be -rel_entr(y(i),y(i)+x(i)^k)

A

though each term can be describe as -rel_entr( y(i), x(i)^k+y(i) ), yet the double summation is hard to realize how to realize the double summation is the main obstacle due to this function being the objective function.

M

A brute force, though inelegant way is to declare S an expression (which is automatically initialized to 0), and then incrementally sum the terms in a nested for loop (outer over i, inner over k) into S. Then minimize(S). Alternatively, use sum as appropriate, depending on your data structures.

A

thank you very much, the original problem is in large scale, a brute search may be inappropriate.

M

In that case, CVX is probably not your tool anyway, since logarithms and entropy are implemented using the successive approximation approach. For large-scale problems, it’s just not feasible.