Syntax for block-sparse minimization objective

I have a complex valued linear equation y=Bc. I want to minimize the sum of the euclidean norms of the block-subvectors within the vector c. I am having difficulty in writing the correct syntax for the objective. c is of dimension Nx1 complex vector and c is made up of nx1 complex subvectors, N=d*n, there are d subvectors in c.

minimize sum(norm(c(i)))
subject to y==Bc

I think this will do just fine. The key is to use the norms function, which we built specifically to do sum-of-norms and max-of-norms work, on a matrix where each column is a subvector.


Hi, thanks for helping, I tried your suggestion but I received the following error

Invalid operation: cvx_linearize( {complex affine} )
Error in cvx_reduce_op (line 82)

Is it due to equations being complex valued or something else?

cvx_begin quiet
variable c(n) complex
minimize sum(norms(reshape(c,Ng,length(freq_search))))
subject to

Ah, you’re using CVX 3.0 beta. That looks like a bug. To save you time you might want to revert to CVX 2.1. I think I know how to fix this in 3.0, but it will take a little while.

Actually, for now you can do this, but it won’t be quite as efficient. Should be good enough for now though:

minimize sum(norms(reshape(abs(c),Ng,length(freq_search))))

ok, sorry I did not inform you of my cvx version. Thank you very much. what is the best way to return to the stable version of cvx? or what is the correct way of removing the beta?

Before you swap versions try my fix above with the abs added. If that works for you, then no need to change. If you do need to change versions, just remove CVX 3.0 completely, and install CVX 2.1 as normal—including re-running cvx_setup.

Build 1155 should fix this. I’ve pushed it out to the web site.