0

Ich bin interessiert, die L0-norm Straffunktion in Matlab zu plotten.Plot der L0 Norm Straffunktion in Matlab

Tatsächlich weiß ich, dass die L0-norm eines Vektors x, || x || _0, gibt einen Wert zurück, der die Gesamtzahl der von Null verschiedenen Elemente in x angibt. Mit anderen Worten, || x || _0 = # (i | xi! = 0).

Zum Beispiel für die L1-Norm von x , gibt sie die Summe der absoluten Werte der Elemente in x. Der MATLAB-Code der L_1 Norm Straffunktion zu zeichnen ist:

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'); 

Aber jetzt was über die L_0 Norm ??

Jede Hilfe wird sehr geschätzt!

Antwort

1

Ersetzen der Zeile innerhalb der for-Schleife mit den folgenden:

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

Dieser weist eine Strafe von lambda für alle Nicht-Null-Werte in dem Vektor x.

+2

BTW, könnten Sie 'For' Schleife vermeiden, indem Sie' Straf = Lambda * (X ~ = 0); 'oder 'Straf = Lambda * abs (x);'. Dies wäre für hochdimensionale Vektoren viel effizienter. – Prakhar

+0

Vielen Dank! – Christina