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.
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 :
=MOD(COLONNE($1:$1);2) va renvoyer :
Il suffit de remplacer ligne par colonne pour obtenir des matrices verticales.
=0*COLONNE(1:1) ou =0*COLONNE(A1:AB1)
=1-0*COLONNE(1:1)
1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
=1*(LIGNE($A$1:$E$5)=COLONNE($A$1:$E$5))
=1*(LIGNE($A$1:$F$3)=COLONNE($A$1:$F$3)-2)
1 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
=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 :
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 |
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
1 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 |
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 !