Extraction de toutes les diagonales d'une matrice avec Matlab
Dans ce tutoriel, nous abordons une technique pour extraire l'ensemble des diagonales d'une matrice à l'aide de Matlab.
Qu'entend-on par diagonales d'une matrice ? Il s'agit des éléments qui sont alignés en diagonale dans une matrice. Prenons un exemple : la diagonale principale de la matrice suivante comprend les éléments 1, 5, 9, que nous soulignons en rouge. $$ M = \begin{pmatrix} \color{red}1 & 2 & 3 \\ 4 & \color{red}5 & 6 \\ 7 & 8 & \color{red}9 \end{pmatrix} $$ Quant à la diagonale secondaire, elle regroupe les éléments 3, 5, 7, mais dans le sens inverse. $$ M = \begin{pmatrix} 1 & 2 & \color{red}3 \\ 4 & \color{red}5 & 6 \\ \color{red}7 & 8 & 9 \end{pmatrix} $$
Illustrons ceci par un exemple concret.
Commencez par créer une matrice carrée de 3x3, composée de trois lignes et trois colonnes.
>> M=[1 2 3 ; 4 5 6 ; 7 8 9]
M =
1 2 3
4 5 6
7 8 9
Utilisez la commande spdiags() pour extraire toutes les diagonales de cette matrice.
>> spdiags(M)
ans =
7 4 1 0 0
0 8 5 2 0
0 0 9 6 3
Cette fonction permet de récupérer toutes les diagonales de la matrice, y compris la diagonale principale, et les organise sous forme de colonnes.
À titre d'exemple, la colonne centrale du tableau résultant (mise en évidence en rouge) correspond à la diagonale principale de notre matrice.

Les colonnes adjacentes à celle du milieu représentent les diagonales situées au-dessus (en vert) et en dessous (en bleu) de la diagonale principale.
Comment isoler une diagonale spécifique ?
Pour extraire une diagonale particulière de la matrice, il suffit de préciser un second paramètre dans la fonction spdiags().
Par exemple, en tapant spdiags(M,0), vous extrayez exclusivement la diagonale principale de la matrice.
>> spdiags(M,0)
ans =
1
5
9
Dans le tableau produit par la fonction spdiags(), l'index zéro (0) correspond à la diagonale principale.
Les diagonales situées au-dessus et en dessous de la diagonale principale portent respectivement les indices +1 et -1.

Ainsi, pour obtenir la diagonale juste au-dessus de la principale, il faut taper spdiags(M,1).
>> spdiags(M,1)
ans =
0
2
6
Pour accéder à la diagonale située en dessous de la principale, inversez le signe du paramètre : spdiags(M,-1).
>> spdiags(M,-1)
ans =
4
8
0
Et si vous souhaitez extraire d'autres diagonales spécifiques, utilisez les indices -2, +2, etc.

Extraction des diagonales secondaires
Pour récupérer les diagonales secondaires de la matrice M, qui se déploient de droite à gauche, il convient d'associer la fonction spdiags() à la fonction fliplr(), qui permet de renverser la matrice M de gauche à droite.
En tapant spdiags(fliplr(M)), vous extrayez toutes les diagonales secondaires de la matrice.
>> spdiags(fliplr(M))
ans =
9 6 3 0 0
0 8 5 2 0
0 0 7 4 1
Cette fonction retourne les diagonales secondaires de la matrice, organisées en colonnes.
Chaque colonne du tableau représente une diagonale de la matrice, de gauche à droite.

La colonne centrale (en rouge) correspond à la diagonale secondaire de la matrice.
Les colonnes adjacentes (en bleu et vert) représentent respectivement les diagonales situées en dessous et au-dessus de la diagonale secondaire.
Remarque. Tout comme pour la diagonale principale, la diagonale centrale porte l'indice zéro (0), tandis que les diagonales adjacentes ont les indices -1 et +1, -2 et +2, etc.

Ainsi, pour isoler uniquement la diagonale secondaire, il faut saisir spdiags(fliplr(M),0). Pour extraire la diagonale située au-dessus de la diagonale secondaire, entrez spdiags(fliplr(M),1), et ainsi de suite.