matlab中L0范数惩罚函数的绘图

Plot of the L0 norm penalty function in matlab

我有兴趣在 matlab 中绘制 L0-norm 惩罚函数。

其实我知道一个向量xL0-norm,||x||_0,returns 一个值,指定 x 中非零元素的总数。换句话说,||x||_0 = #(i | xi !=0).

例如x[=29=的L1-范数],它returnsx[=中元素的绝对值之和29=]。绘制 L_1 范数惩罚函数的 matlab 代码是:

clear all;
clc;

x = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5];
penal = zeros (length(x),1);
lambda = 2; % the tuning parameter
for ii = 1 : length(x)
penal(ii) = lambda*abs(x(ii));
end
figure
plot(x(:), penal(:), 'r');

但是现在 L_0 规范呢??

非常感谢任何帮助!

将 for 循环内的行替换为以下内容:

penal(ii) = lambda*(x(ii) ~= 0);

这为向量 x.

中的所有非零值分配 lambda 的惩罚