 # How to express L0 norm of a vector of norms?

I have a variable defined as A(100\times 5) which is complex

      variable A(100,5) complex


Then I define as expression as

      expressions B(5,1) nonegative

B=[norm(A(:,1)) norm(A(:,2)) norm(A(:,3)) norm(A(:,4)) norm(A(:,5))];


Now my objective is to minimize the L0 norm of vector B, i.e., minimize the number of non-zero elements in vector B

\min ||B||_0

Can it be done in CVX?

Paul Rubin’s answer can be implemented in CVX.

1 Like

Let,

C=5;
U=10;
N=4;
bigM=1000;

I have done the following

  variable Z(C,1) binary
variable A(N*C,U) complex
expressions b(C,1) nonegative

cvx_begin
for c=1:C
b(c)=norm(vec(A((c-1)*N+1:c*N,:)));
end

minimize sum(Z)

subject to

for indx=1:C
b(indx) >= 0;
b(indx) <= bigM*Z(indx);
end


is nor working as we have DCP error!

This

b(indx) >= 0;


is not needed and even cannot be used. A norm is always nonnegative.

Isn’t the whole loop just

b <= bigM*Z


?

This I tried and I do not get any error.