0

Мне интересно нарисовать штрафную функцию 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 ??

Любая помощь будет очень признательна!

ответ

1

Заменить линию внутри для цикла со следующим:

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

Это назначает наказание в виде лямбды для всех ненулевых значений в векторе х.

+2

Кстати, вы могли бы избежать цикла 'for', используя' штраф = лямбда * (x ~ = 0); 'или' штраф = лямбда * abs (x); '. Это было бы намного более эффективно для высокоразмерных векторов. – Prakhar

+0

Большое вам спасибо! – Christina