2011-08-26 20 views
18

Quando si chiama norm su una matrice in MATLAB, restituisce quella che è nota come "norma di matrice" (un valore scalare) anziché una matrice di norme vettoriali. Esiste un modo per ottenere la norma di ciascun vettore in una matrice senza il looping e sfruttando la vettorizzazione di MATLAB?Norma vettoriale di una matrice di vettori in MATLAB

+0

che dire di somma? –

risposta

24

È possibile calcolare autonomamente la norma di ogni colonna o riga di una matrice utilizzando element-wise arithmetic operators e le funzioni definite per operare su determinate dimensioni di matrice (come SUM e MAX). Ecco come si potrebbe calcolare alcune norme colonna-saggio per una matrice M:

twoNorm = sqrt(sum(abs(M).^2,1)); %# The two-norm of each column 
pNorm = sum(abs(M).^p,1).^(1/p); %# The p-norm of each column (define p first) 
infNorm = max(M,[],1);   %# The infinity norm (max value) of each column 

Queste norme possono facilmente essere fatto per operare sulle righe invece delle colonne modificando gli argomenti dimensione da ...,1 a ...,2.

+3

forse dovresti specificare in modo esplicito le dimensioni lungo le quali funzionano SUM e MAX, in questo modo sarebbe più semplice passare a regole di riga ... – Amro

+0

@Amro: buon suggerimento. Fatto! – gnovice

+2

Se 'M' consiste solo di numeri reali, è possibile sostituire' abs (M) 'con' M' nel 'dueNorm' poichè il'.^2' cancella efficacemente qualsiasi segno negativo. – kroimon

1

L'implementazione esistente per la due-norma può essere migliorata.

twoNorm = sqrt(sum(abs(M).^2,1)); # The two-norm of each column 

abs(M).^2 sta per essere il calcolo di un intero gruppo di inutili radici quadrate che solo ottenere immediatamente quadrato.

Molto meglio fare:

twoNorm = sqrt( 
       sum(real(M .* conj(M)), 1) 
      ) 

Questo gestisce in modo efficiente reale e complessa M.

Utilizzando real() assicura che sum e sqrt agire su numeri reali (piuttosto che i numeri complessi con 0 componente immaginaria).

0

Dalla versione 2017 in poi, è possibile utilizzare vecnorm.

Problemi correlati