График штрафной функции нормы L0 в Matlab

Я заинтересован в сюжете L0-norm функция штрафа в Matlab.

На самом деле, я знаю, что L0-norm вектора x, ||x|| _0, возвращает значение, которое обозначает общее количество ненулевых элементов в x. Другими словами, ||x|| _0 = # (i | xi! = 0).

Например, для L1-нормы x он возвращает сумму абсолютных значений элементов в x. Код 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 ответ

Решение

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

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

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

Другие вопросы по тегам