Problem on L1 SVD minimization via SOC programming

63 views
Skip to first unread message

Qian Rongrong

unread,
Feb 3, 2015, 7:41:45 AM2/3/15
to yal...@googlegroups.com
Dear all,

I wat to solve the L1 SVD minimization problem via SOC programming as the following unconstrained optimization problem

min ||Ysv-A*Ssv||_F + \lambda ||s||_1 

where s is the vector storing l2-norm of rows in Ssv.

My YALMIP code is 

lamda=0.3;

Ssv=sdpvar(N_theta,k,'full','complex');

Z=Ysv-A*Ssv; % Ysv (M-by-k) and A (M-by-N_theta) are known matrix

s=sdpvar(N_theta,1,'full','complex');

opts=sdpsettings('solver','sdpt3');

F=[];

for i=1:1:N_theta

    F=[F s(i)==norm(Ssv(i,:))];

end

solvesdp(Constraints,norm(Z,'fro')+lamda*norm(s,1),opts);


sp=double(s);


But I always get the error as following
solvertime: 0
       problem: 14
          info: 'Convexity check failed (Model not available in constraint #1 at level 1)'
    yalmiptime: 0.4295

Could any one help me to fix this problem.

Thanks in advance!!!

RQ

Johan Löfberg

unread,
Feb 3, 2015, 7:49:55 AM2/3/15
to
norm == value is not a convex set (draw the set ||x||==1 by hand in R^2).

However, I suspect you don't mean equality, but assignment.

Some weird things though: You define a complex variable, and want it to be equal to a trivially real number (norms are always real)

Since you place the norms in s, it is redundant (and convexity-destroying) to take the norm on that vector.

A cleaned up version would be

lamda=0.3;

Ssv=sdpvar(N_theta,k,'full','complex');

Z=Ysv-A*Ssv; % Ysv (M-by-k) and A (M-by-N_theta) are known matrix


opts=sdpsettings('solver','sdpt3');


s = []


for i=1:1:N_theta

  s = [s;norm(Ssv(i,:))];

end


optimize(Constraints,norm(Z,'fro')+lamda*sum(s),opts);






Reply all
Reply to author
Forward
0 new messages