0

L0-normmatlab でペナルティ関数をプロットすることに興味があります。

実際、L0-normベクトルx , ||の x ||_0 は、 x内の非ゼロ要素の総数を指定する値を返します。言い換えれば、|| x ||_0 = #(i | xi !=0)。

たとえば、 x の L1 ノルムの場合、 xの要素の絶対値の合計を返します。L_1 ノルム ペナルティ関数をプロットする matlab コードは次のとおりです。

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ノルムはどうですか??

どんな助けでも大歓迎です!

4

1 に答える 1

1

for ループ内の行を次のように置き換えます。

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

これにより、ベクトルxのゼロ以外のすべての値にラムダのペナルティが割り当てられます。

于 2016-07-18T21:53:02.190 に答える