Cvx for maximum likelihood estimation

Here’s how you might write this problem in CVX:

cvx_begin
variable z(m)
maximize(log_det(A*diag(z)*A'+Siginv))
subject to
0<=z<=1
sum(z)==k
cvx_end

I tried this with m=4000, k=3, n=10, Siginv=eye(n), and A=randn(n,m). It took less than 15 seconds to run. Your problem can be solved more efficiently by replacing the log_det with det_rootn:

cvx_begin
variable z(m)
maximize(det_rootn(A*diag(z)*A'+Siginv))
subject to
0<=z<=1
sum(z)==k
cvx_end

This takes under 5 seconds on my computer. See mcg’s post on this trick here).