Syntax for block-sparse minimization objective

Uncategorized
Mar 9, 2015
R

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

M

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.

minimize(sum(norms(reshape(c,n,d))))
R
Replying to #2

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?

R

cvx_begin quiet
variable c(n) complex
minimize sum(norms(reshape(c,Ng,length(freq_search))))
subject to
D*c==R;
cvx_end

M
Replying to #4

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.

M
Replying to #5

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))))
R
Replying to #5

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?

M
Replying to #7

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.

M

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