Мне интересно нарисовать штрафную функцию L0-norm
в мат-лабе.Сюжет о норме штрафной функции L0 в matlab
Фактически, я знаю, что L0-norm
вектора x, || x || _0, возвращает значение, которое обозначает общее число ненулевых элементов в x. Другими словами, || x || _0 = # (i | xi! = 0).
Например, для L1-нормы х, он возвращает сумму абсолютных значений элементов в х. Код MATLAB для построения функции штрафа L_1:
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', используя' штраф = лямбда * (x ~ = 0); 'или' штраф = лямбда * abs (x); '. Это было бы намного более эффективно для высокоразмерных векторов. – Prakhar
Большое вам спасибо! – Christina