0

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

事实上,我知道L0-norm向量x的 || 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 范数呢?

任何帮助将不胜感激!

4

1 回答 1

1

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

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

这为向量x中的所有非零值分配了lambda的惩罚。

于 2016-07-18T21:53:02.190 回答