How to resolve the log_det problem

My optimization function is:

variable W(8,8,10);
    expression M 
    expression N
    for m=1:1:2
    maximize log_det(M)
    subject to
    for i = 1:10
        W(:,:,i) == semidefinite(8);       

When I run this code, CVX outputs infeasible solution. However, if I change it to

 maximize det_rootn(M)

Then CVX gives feasible solution. But the optimal value it gives is not the actual optimal value, since I have used det_rootn instead of log_det.

Actually, I see a rather significant problem here: inv(N) and trace(inv(N)) should not be accepted at all. This problem is very likely not convex; and it certainly violates the DCP ruleset. Looks like a bug in CVX that it was even accepted in the first place.

Thanks mcg!! I am following the paper ‘’ Convex Approximation for Precoder Design in MIMO Interference Networks’’ (Please follow the Eq (20)). The authors claim that the function is convex. Anyway, is there any technique to solve the problem I mentioned about det_rootn. May be useful for other pr ?

@mcg :If there is no inv(N) in the above optimization, how to calculate the actual optimal value? That is maximize log_det (M)-trace(N)

You have to use the original formulation with log_det. Try the other solvers (SDPT3 and Mosek). If they don’t work you may be stuck; as the documentation says, log_det is not 100% reliable.

Also try making W symmetric: variable W(8,8,10) symmetric. See if that helps. It probably won’t, but it can’t hurt.

@mcg: Thanks a lot! I tried all your suggested techniques. But still I am stuck. The CVX solves the problem inaccurately and outputs the cvx_optval as NaN. After the successive approximation metho (due to the log_det), the ements of W are NaN. Why the elements are NaN? I should get the non-NaN W!!

I’m afraid it’s just not working correctly for your application. Without a first-class solver that supports the exponential cone, I can’t support logarithms fully. You’re welcome to submit a bug report to and attach your problem data. But I am afraid I cannot promise a fix.

@mcg, I am attaching my problem data in please have a look and try to fix my problem.

For those that may be interested in this: Juan sent us an example model, and while SDPT3 struggles with it, SeDuMi seemed to be able to handle it with less difficulty. So the moral of the story: try different solvers. :slight_smile:

I’ve updated the documentation regarding the successive approximation method that CVX uses to solve problems with log/exp/entropy terms, to help people understand the challenges that CVX (and, therefore, its users) face with these functions.

Thanks to Juan for taking the time to send us some data!