График штрафной функции нормы 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.