Matrices



Il est souvent utile, pour manipuler des matrices, de disposer de matrices simples constituées de chiffres qui se suivent ou bien de 1 et de 0.

12345
Pour obtenir une suite de nombres régulièrement espacé, il suffit d'utiliser la numérotation des lignes d'une plage de cellules :
1) Sélectionnez une plage horizontale de cinq cellules adjacentes, taper =COLONNE($A1:$E1) et validez par CTRL+MAJ+Entrée.
2) Sélectionnez une plage horizontale d'un nombre quelconque de cellules adjacentes, taper =COLONNE($1:$1) et validez par CTRL+MAJ+Entrée.
3) Pour augmenter la taille de la matrice, on peut utiliser le nombre de lignes : =TRANSPOSE(LIGNE($A:$A))
4) Enfin, on peut se contenter de taper les chiffres un par un :
Sélectionnez une plage horizontale de cinq cellules adjacentes, taper ={1\2\3\4\5} et validez par CTRL+MAJ+Entrée.

La même technique permet évidemment de créer des matrices un peu plus compliquées :
=2*COLONNE($1:$1) va renvoyer :
246810...

=MOD(COLONNE($1:$1);2) va renvoyer :
01010...

Il suffit de remplacer ligne par colonne pour obtenir des matrices verticales.

00000...
=0*COLONNE(1:1) ou =0*COLONNE(A1:AB1)

11111...
=1-0*COLONNE(1:1)

10000
01000
00100
00010
00001
=1*(LIGNE($A$1:$E$5)=COLONNE($A$1:$E$5))

001000
000100
000010
=1*(LIGNE($A$1:$F$3)=COLONNE($A$1:$F$3)-2)

10000
11000
11100
11110
11111
=1*(LIGNE($A$1:$E$5)>=COLONNE($A$1:$E$5))


A partir de ces matrices de base, on peut réaliser de nombreuses opérations intéressantes :

Faire la somme de chaque colonne d'une matrice rectangulaire
Pour calculer le vecteur contenant la somme de toutes les colonnes de C5:E9, on peut sélectionner trois cellules en ligne, écrire la formule matricielle =PRODUITMAT({1\1\1\1\1};C5:E9) et valider par CTRL+MAJ+Entrée
On écrira de même =PRODUITMAT(C5:E9;{1;1;1}) en matriciel dans un vecteur de trois cellules en colonne pour faire la somme des lignes.
Si les matrices sont grandes, on pourra utilement mettre à profit les matrices de 1 décrites ci-dessus. Pour calculer la matrice verticale somme des lignes d'une plage nommée "plage" :
=PRODUITMAT(plage;1-0*TRANSPOSE(COLONNE(plage)))

Allonger la taille d'une matrice en lui ajoutant des zéros.
Quand une matrice est une plage de cellule, on utilise DECALER pour modifier ses dimensions.
DECALER ne peut par contre pas être utilisé directement sur une matrice du type mat1={7;2;5;8;3}.
On peut dans ce cas utiliser le produit matriciel :
Le produit matriciel entre une matrice mat0 rectangulaire contenant des zéros et une ligne de 1 en diagonale bien placée permet d'allonger la matrice.
Par exemple, si mat0 est la matrice suivante :
00000
10000
01000
00100
00010
00001
00000
00000
00000
00000
il suffit d'écrire =PRODUITMAT(mat0;{7;2;5;8;3})
pour obtenir la matrice verticale : {0;7;2;5;8;3;0;0;0;0}
On a vu que la matrice mat0 pouvait se calculer par
=1*(LIGNE($A$1:$E$10)=COLONNE($A$1:$E$10)+1)
Notre matrice {0;7;2;5;8;3;0;0;0;0} se calculera donc par :
=PRODUITMAT(1*(LIGNE($A$1:$E$10)=COLONNE($A$1:$E$10)+1);{7;2;5;8;3})

Rabouter deux matrices
Si on part d'une matrice mat1 = {7;2;5;8;3} et d'une matrice mat2 = {1;3;5} et que l'on souhaite obtenir la matrice mat = {7;2;5;8;3;1;3;5}, on peut utiliser la méthode présentée dans le paragraphe précédent pour calculer les matrices {7;2;5;8;3;0;0;0} et {0;0;0;0;0;1;3;5}, puis faire la somme de ces deux matrices.
On calculera donc la matrice raboutée par : =PRODUITMAT(1*(LIGNE($A$1:$E$11)=COLONNE($A$1:$E$11));{7;2;5;8;3})+ +PRODUITMAT(1*(LIGNE($A$1:$C$11)=COLONNE($A$1:$C$11)+5);{1;3;5})
Ou bien, en utilisant des matrices nommées (rien n'empeche de définir le nom mat1 et de l'affecter à une matrice, il suffit de faire insertion / nom et d'affecter à mat1 la formule ={7;2;5;8;3}):
=PRODUITMAT(1*(LIGNE(DECALER($A$1;0;0;NB(mat1)+NB(mat2);NB(mat1)))=COLONNE(DECALER($A$1;0;0;NB(mat1)+NB(mat2);NB(mat1))));mat1)+PRODUITMAT(1*(LIGNE(DECALER($A$1;0;0;NB(mat1)+NB(mat2);NB(mat2)))=COLONNE(DECALER($A$1;0;0;NB(mat1)+NB(mat2);NB(mat2)))+NB(mat1));mat2)

Matrice cumul
A partir d'une matrice vecteur verticale , pour calculer une matrice dont l'élément n soit la somme des éléments 1 à n de la première matrice, on peut encore utiliser PRODUITMAT.
Si mat1 = {7;2;5;8;3} et mat0 est la matrice
10000
11000
11100
11110
11111
Alors, le produit =PRODUITMAT(mat0;mat1) va renvoyer {7;9;14;22;25}
On peut l'écrire
=PRODUITMAT(1*(LIGNE($A$1:$E$5)>=COLONNE($A$1:$E$5));mat1)
ou bien :
=PRODUITMAT(1*(LIGNE(DECALER($A$1;;;NB(mat1);NB(mat1)))>=COLONNE(DECALER($A$1;;;NB(mat1);NB(mat1))));mat1)


Pour tous les exemples, n'oubliez pas de valider les formules matricielles par CTRL+MAJ+Entrée !