我有兴趣在matlab中绘制L0-norm
惩罚函数。
事实上,我知道向量 x 的L0-norm
,|| x || _0,返回一个指定总数的值 x 中的非零元素。换句话说,|| x || _0 =#(i | xi!= 0)。
例如,对于 x 的L1范数,它返回 x 中元素的绝对值之和。用于绘制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规范呢?
非常感谢任何帮助!
答案 0 :(得分:1)
使用以下内容替换for循环内的行:
penal(ii) = lambda*(x(ii) ~= 0);
这会为向量 x 中的所有非零值指定 lambda 的惩罚。