
Estrazione di tutte le diagonali di una matrice su Matlab
In questa vediamo come estrarre tutte le diagonali di matrice tramite Matlab.
Cosa sono le diagonali di una matrice? Le diagonali sono gli elementi della matrice presi in trasversale. Ad esempio, la diagonale principale di questa matrice è l'insieme degli elementi 1, 5, 9 colorati in rosso. $$ M = \begin{pmatrix} \color{red}1 & 2 & 3 \\ 4 & \color{red}5 & 6 \\ 7 & 8 & \color{red}9 \end{pmatrix} $$ La diagonale secondaria è, invece, l'insieme degli elementi 3, 5, 7 presi nel verso opposto $$ M = \begin{pmatrix} 1 & 2 & \color{red}3 \\ 4 & \color{red}5 & 6 \\ \color{red}7 & 8 & 9 \end{pmatrix} $$
Ti faccio un esempio pratico.
Crea una matrice quadrato 3x3 con tre righe e tre colonne.
>> M=[1 2 3 ; 4 5 6 ; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
Digita spdiags() per estrarre tutte le diagonali dalla matrice.
>> spdiags(M)
ans =
7 4 1 0 0
0 8 5 2 0
0 0 9 6 3
Questo comando estrae tutte le diagonali della matrice oltre la diagonale principale e le dispone in colonna.
Ad esempio, la colonna centrale della tabella in output (colore rosso) è la diagonale principale della matrice.

Le colonne vicine alla colonna centrale sono le diagonali sopra (verde) e sotto (blu) della diagonale principale.
E per estrarre solo una diagonale?
Se vuoi estrarre soltanto una diagonale dalla matrice indica anche il secondo parametro della funzione spdiags().
Ad esempio, digita spdiags(M,0) per estrarre solo la diagonale principale della matrice.
>> spdiags(M,0)
ans =
1
5
9
Nella tabella in uscita dalla funzione spdiags() la diagonale principale della matrice ha indice zero (0).
Le diagonali sopra e sotto la diagonale principale, invece, hanno rispettivamente indice +1 e -1.

Ad esempio, digita spdiags(M,1) per estrarre la diagonale sopra la diagonale principale.
>> spdiags(M,1)
ans =
0
2
6
Per estrarre la diagonale sotto la diagonale principale, invece, digita spdiags(M,-1)
>> spdiags(M,-1)
ans =
4
8
0
Se vuoi estrarre singolarmente le altre diagonali usa gli indici -2, +2 e via dicendo.

Come estrarre le diagonali secondarie?
Per estrarre le diagonali secondarie della matrice M, quelle che scendono da destra a sinistra, combina la funzione spdiags() con la funzione fliplr() che capovolge la matrice M da sinistra a destra.
Ad esempio, digita spdiags(fliplr(M)) per estrarre tutte le diagonali secondarie della matrice
>> spdiags(fliplr(M))
ans =
9 6 3 0 0
0 8 5 2 0
0 0 7 4 1
La funzione restituisce le diagonali secondarie della matrice disposte in colonna.
Ogni colonna della matrice è una diagonale della matrice da sinistra a destra.

La colonna centrale (rossa) è la diagonale secondaria della matrice.
Le colonne vicine (blu e verde) sono rispettivamente le diagonali sotto e sopra la diagonale secondaria.
Nota. Anche in questo caso la diagonale centrale ha indice zero (0), quelle vicine hanno indice -1 e +1, -2 e +2 ecc.

Quindi, per estrarre solo la diagonale secondaria devi digitare spdiags(fliplr(M),0). Se vuoi estrarre la diagonale sopra la diagonale secondaria digita spdiags(fliplr(M),1) e via dicendo.

