CVXを使って,L1ノルムとL2ノルムの違いをみてみる.
もっと正確に言うと,L1ノルムでスパースな解が求まっているのかを確かめる.
- >> m=16;n=8;
- >> A=randn(m,n); b=randn(m,1);
% L2 norm
% Minimize |Ax-b|2
% subject to |x|2 - >> cvx_begin
- >> variable x_l2(n);
- >> minimize( norm(Ax_l2-b,2)+norm(x_l2,2));
- >> cvx_end
% L1 norm
% Minimize |Ax-b|2
subject to |x|1 - >> cvx_begin
- >> variable x_l1(n);
- >> minimize( norm(Ax_l1-b,2)+norm(x_l1,1));
- >> cvx_end
>> [x_l2 x_l1]
ans =
-0.1598 -0.1088
-0.0488 -0.0000
0.0380 0.0000
0.1336 0.0000
0.3207 0.2636
-0.0513 -0.0000
0.3794 0.2774
-0.0616 -0.0028
という事で,L1ノルムによってスパースな解が求まっている事が分かる.