Calculs sur les matrices carrées

Plan du chapitre "Calcul matriciel"

L’anneau {(\mathcal{M}_{n}(\mathbb{K}),+,\times)}

Proposition (l'anneau M_{n}())
Muni de la somme et du produit des matrices, l’ensemble {\mathcal{M}_n(\mathbb{K})} possède une structure d’anneau.
L’anneau {(\mathcal{M}_n(\mathbb{K}),+,\times)} est non commutatif dès que {n\ge2}.
  • Le neutre additif de l’anneau {\mathcal{M}_n(\mathbb{K})} est la matrice nulle, notée {0} (ou éventuellement {0_{n}}).
    Le neutre multiplicatif de l’anneau {\mathcal{M}_n(\mathbb{K})} est la matrice identité {\text{I}_n}.
  • Si {n=1}, on identifie une matrice {A=(a)} avec l’unique scalaire qu’elle contient.
    Dans ce cas, {\mathcal{M}_{1}(\mathbb{K})} s’identifie donc au corps (commutatif) {\mathbb{K}}.
  • Il est facile de former des matrices qui ne commutent pas dans {\mathcal{M}_{2}(\mathbb{K})}.
    Par exemple si {A=\begin{pmatrix}0&1\\ 1&0\end{pmatrix}} et {B=\begin{pmatrix}0&2\\1&0 \end{pmatrix}}, alors {AB=\begin{pmatrix}1&0\\0&2 \end{pmatrix}} et {BA=\begin{pmatrix}2&0\\ 0&1 \end{pmatrix}}.

    Si {n\ge2}, l’anneau {\mathcal{M}_{n}(\mathbb{K})} est non commutatif.
    Il suffit pour le voir d’étendre l’exemple précédent.
    Prenons en effet {A=\begin{pmatrix}0&1&0&\cdots\\ 1&0&0&\cdots\\0&0&0&\ldots\\\vdots&\vdots&\vdots&\ddots\end{pmatrix}}et {B=\begin{pmatrix}0&2&0&\cdots\\ 1&0&0&\cdots\\0&0&0&\ldots\\\vdots&\vdots&\vdots&\ddots\end{pmatrix}}.

    Alors {AB=\begin{pmatrix}1&0&0&\cdots\\ 0&2&0&\cdots\\0&0&0&\ldots\\\vdots&\vdots&\vdots&\ddots\end{pmatrix}}et {BA=\begin{pmatrix}2&0&0&\cdots\\ 0&1&0&\cdots\\0&0&0&\ldots\\\vdots&\vdots&\vdots&\ddots\end{pmatrix}}

Proposition (produits de matrices diagonales ou triangulaires)
Soit {A} et {B} deux matrices de {\mathcal{M}_{n}(\mathbb{K})}.
On suppose que {A} et {B} sont diagonales (resp. triangulaires supérieures, triangulaires inférieures).
Alors {C=AB} est encore diagonale (resp. triangulaire supérieure, triangulaire inférieure).
De plus les coefficients diagonaux {c_{ii}} de {C} vérifient {c_{ii}=a_{ii}b_{ii}}.

Propriétés diverses

  • Les matrices triangulaires supérieures forment un sous-espace vectoriel de {\mathcal{M}_{n}(\mathbb{R})}.
    La dimension de ce sous-espaces est {\dfrac{n(n+1)}{2}}.
    Le résultat précédent nous dit que c’est aussi un sous-anneau de {\mathcal{M}_{n}(\mathbb{R})}.
    Il en est bien sûr de même pour les matrices triangulaires inférieures.
    Les matrices diagonales forment un sous-espace de {\mathcal{M}_{n}(\mathbb{R})} (et un sous-anneau) de dimension {n}.
  • La proposition précédente s’étend (récurrence facile) à un nombre quelconque de matrices carrées (toutes diagonales, ou toutes triangulaires supérieures, ou toutes triangulaires inférieures).
    Cela s’applique donc aux puissances {A^{p}} (avec {p} dans {\mathbb{N}^{*}}) d’une matrice diagonale ou triangulaire.
  • Si deux matrices {A} et {B} sont triangulaires (disons supérieurement) et si l’une d’elle est strictement triangulaire, alors leur produit {AB} est strictement triangulaire.
  • On ne peut rien dire du produit de deux matrices triangulaires, l’une inférieure et l’autre supérieure.
    Par exemple, si {A=\begin{pmatrix}1&2\\0&3 \end{pmatrix}} et {B=\begin{pmatrix}4&0\\5&6 \end{pmatrix}} : {AB=\begin{pmatrix}14&12\\15&18 \end{pmatrix}} et {BA=\begin{pmatrix}4&8\\5&28 \end{pmatrix}}.

En Python, on voit ici une matrice {A} de {\mathcal{M}_{4}(\mathbb{R})}, ainsi que son carré {A^{2}} et son cube {A^{3}} : si un calcul est nécessaire pour les coefficients “sur-diagonaux”, les coefficients diagonaux sont immédiats :

>>> print(A)
[[ 2 3 -2 4] 
[ 0 -1 1 0] 
[ 0 0 1 5] 
[ 0 0 0 3]] 
>>> A2 = A.dot(A); print(A2)
[[ 4 3 -3 10] 
[ 0 1 0 5] 
[ 0 0 1 20] 
[ 0 0 0 9]] 
>>> A3 = A.dot(A2); print(A3)
[[ 8 9 -8 31] 
[ 0 -1 1 15] 
[ 0 0 1 65] 
[ 0 0 0 27]]

Une matrice triangulaire très particulière

On note ici {T_{n}} la matrice strictement triangulaire dont tous les coefficients sont nuls, sauf ceux situés immédiatement au-dessus de la diagonale et qui valent {1}.

Voici une fonction Python pour définir une telle matrice :

def T(n):
return np.array([[1 if j==i+1 else 0 for j in range(n)] for i in range(n)])

Voici par exemple la matrice {J=T_{4}}, ainsi que {J^{2}} et {J^{3}}. On voit très bien comment la “sur-diagonale” de coefficients égaux à {1} “remonte” quand l’exposant augmente (la prochaine étape est {J^{4}=0}).
Remarque : en mode Python interactif, on désigne par _ le résultat du calcul précédent.

>>> J = T(4); J
array([[0, 1, 0, 0], 
[0, 0, 1, 0], 
[0, 0, 0, 1], 
[0, 0, 0, 0]])
>>> J.dot(_)
array([[0, 0, 1, 0], 
[0, 0, 0, 1], 
[0, 0, 0, 0], 
[0, 0, 0, 0]])
>>> J.dot(_)
array([[0, 0, 0, 1], 
[0, 0, 0, 0], 
[0, 0, 0, 0], 
[0, 0, 0, 0]])

Les matrices triangulaires {J=T_{n}} reviennent souvent.
Le passage de {A} au produit {JA} revient à “décaler vers le haut” les lignes de {A}.
Le passage de {A} au produit {AJ} revient à “décaler vers la droite” les parallèles à la diagonale de {A}.
Pour l’exemple ci-dessous, on a fabriqué la matrice {A} de la manière suivante :

A = np.arange(16).reshape(4,4)

On multiplie ensuite {A} sur sa gauche, puis sur sa droite, par la matrice {J} de l’exemple précédent :

>>> A
array([[ 1, 2, 3, 4], 
[ 5, 6, 7, 8], 
[ 9, 10, 11, 12], 
[13, 14, 15, 16]])
>>> J.dot(A)
array([[ 5, 6, 7, 8], 
[ 9, 10, 11, 12], 
[13, 14, 15, 16], 
[ 0, 0, 0, 0]]
>>> A.dot(J)
array([[ 0, 1, 2, 3], 
[ 0, 5, 6, 7], 
[ 0, 9, 10, 11], 
[ 0, 13, 14, 15]])

La formule du binôme

Le résultat suivant est un cas particulier d’une situation rencontrée dans la section “Structure de corps” du chapitre “Structures algébriques” :

Proposition (formule du binôme pour deux matrices carrées qui commutent)
Soit {A} et {B} deux matrices de {\mathcal{M}_{n}(\mathbb{K})}. On suppose que {A} et {B} commutent.
Alors, pour tout entier naturel {p}, on a : {(A+B)^{p}=\displaystyle\sum_{k=0}^{p}\binom{p}{k}A^{k}B^{p-k}=\displaystyle\sum_{k=0}^{p}\binom{p}{k}A^{p-k}B^{k}}.

Remarques

  • L’hypothèse selon laquelle {AB=BA} est essentielle. Si elle n’est pas réalisée, alors le développement de {(A+B)^{p}} est totalement différent (et beaucoup plus compliqué).
    Par exemple, si {AB\ne BA}, on a : {\begin{cases}(A+B)^{2}=A^{2}+AB+BA+B^{2}\cr (A+B)^{3}=A^{3}+A^{2}B+ABA+AB^{2}+BA^{2}+BAB+B^{2}A+B^{3}\end{cases}}
    Toujours si {AB\ne BA} on a : {(A+B)(A-B)=A^{2}-AB+BA-B^{2}\ne A^{2}-B^{2}}
  • Les matrices scalaires {\lambda \text{I}_n} commutent avec toutes les matrices de {\mathcal{M}_n(\mathbb{K})}.
    Pour tout {A} de {\mathcal{M}_{n}(\mathbb{K})}, on peut donc écrire : {(A+\lambda I_{n})^{p}=\displaystyle\sum_{k=0}^{p}\binom{p}{k}\lambda^{p-k}A^{k}=\displaystyle\sum_{k=0}^{p}\binom{p}{k}\lambda^{k}A^{p-k}}
  • Si {A_{1},\ldots,A_{m}} commutent deux à deux dans {\mathcal{M}_{n}(\mathbb{K})}, alors {\Bigl(\displaystyle\sum_{k=1}^{m}A_{k}\Bigr)^{2}=\displaystyle\sum_{k=1}^{m}A_{k}^{2}\;+\;2\displaystyle\sum_{1\le i \lt j\le m}A_{i}A_{j} }
  • Si {A} et {B} commutent et si {p\ge1}, alors {(AB)^{p}=A^{p}B^{p}}.
    Si elles ne commutent pas, on peut seulement écrire : {(AB)^{p}=ABAB\cdots AB} ({p} fois).

Matrices nilpotentes ou diviseurs de zéro

On définit la matrice {J=\begin{pmatrix}0&1&0&0\\0&0&1&0\\0&0&0&1\\0&0&0&0 \end{pmatrix}}.

On constate que {J^{2}=\begin{pmatrix}0&0&1&0\\0&0&0&1\\0&0&0&0\\0&0&0&0 \end{pmatrix}}, {J^{3}=\begin{pmatrix}0&0&0&1\\0&0&0&0\\0&0&0&0\\0&0&0&0 \end{pmatrix}}, puis {J^{p}=0} pour {p\ge4}.

On exprime cette propriété en disant que {J} est nilpotente, et que son indice de nilpotence est {4}.

Définition (matrices nilpotentes)
Soit {A} une matrice de {\mathcal{M}_{n}(\mathbb{K})}.
On dit que la matrice {A} est nilpotente s’il existe un entier {p\ge1} tel que {A^{p}=0}.
Le plus petit entier {p\ge1} tel que {A^{p}=0} est appelé indice de nilpotence de {A}.

Avec cette définition, on convient que la matrice nulle est nilpotente d’indice {1}.

Proposition (condition suffisante pour qu'une matrice soit nilpotente)
Toute matrice strictement triangulaire est nilpotente (la réciproque est fausse).

L’exemple de {A=\begin{pmatrix}1&1\\-1&-1 \end{pmatrix}}, qui vérifie {A^{2}=0}, montre effectivement que la réciproque est fausse.
En revanche : si {A} est triangulaire, elle est nilpotente si et seulement si elle est strictement triangulaire.

Proposition (condition nécessaire sur l'indice de nilpotence)
Soit {A} une matrice nilpotente de {\mathcal{M}_{n}(\mathbb{K})}.
Alors l’indice de nilpotence de {A} est inférieur ou égal à {n}. On est donc certain que {A^{n}=0}.

Par la contraposée : si {A} est dans {\mathcal{M}_{n}(\mathbb{K})} et si {A^{n}\ne0}, il est certain que {A} n’est pas nilpotente!

Proposition (somme ou produit de deux matrices nilpotentes)
Soit {A} et {B} deux matrices nilpotentes de {\mathcal{M}_{n}(\mathbb{K})}.
Si {A} et {B} commutent, alors {AB} et {A+B} sont nilpotentes.

L’hypothèse selon laquelle {AB=BA} est essentielle.
Considérons par exemple si {A=\begin{pmatrix}1&1\\-1&-1\end{pmatrix}}et {B=\begin{pmatrix}0&1\\0&0\end{pmatrix}}.
Alors {AB=\begin{pmatrix}0&1\\0&-1 \end{pmatrix}} et {BA=\begin{pmatrix}-1&-1\\0&0 \end{pmatrix}}.
Ensuite {(AB)^{2}=\begin{pmatrix}0&1\\0&-1 \end{pmatrix}=AB} et {A+B=\begin{pmatrix}1&0\\-1&-1 \end{pmatrix}}.
Bien que {A} et {B} soient nilpotentes, ni {AB} ni {A+B} ne le sont.

Définition (matrices diviseurs de zéro)
Soit {A} une matrice de {\mathcal{M}_{n}(\mathbb{K})}. On dit que {A} est un diviseur de zéro s’il existe une matrice {B} non nulle dans {\mathcal{M}_{n}(\mathbb{K})} telle que {AB=0} ou {BA=0}.

Avec la définition précédente, on convient que la matrice nulle est un diviseur de {0}.
Par exemple, si {A=\begin{pmatrix}1&1\\ 1&1\end{pmatrix}}, {B=\begin{pmatrix}1&-1\\ 1&-1\end{pmatrix}}, {C=\begin{pmatrix}1&1\\ -1&-1\end{pmatrix}}, alors {BA=AC=0}.
La matrice {A} est donc un diviseur de zéro (l’une des deux égalités {BA=0} ou {AC=0} suffisait).

En revanche, on notera que {BA=0} mais que {AB=\begin{pmatrix}2&-2\\2&-2 \end{pmatrix}} n’est pas la matrice nulle.

On montrera que s’il existe {B\ne0} telle que {AB=0} alors, il existe {C\ne0} telle que {CA=0} (et réciproquement). Il n’y a donc pas de matrice qui soit diviseur de zéro “d’un seul coté”.

Proposition (nilpotent implique diviseur de zéro)
Soit {A} une matrice de {\mathcal{M}_{n}(\mathbb{K})}.
Si {A} est nilpotente, alors {A} est un diviseur de zéro. La réciproque est fausse.

Bien sûr si {A} est nilpotente d’indice {p\ge1}, il suffit d’écrire {0=A^{p}=A A^{p-1}} (avec {A^{p-1}\ne0}) pour réaliser que {A} est un diviseur de zéro.
La matrice {A=\begin{pmatrix}1&1\\ 1&1\end{pmatrix}} est un diviseur de zéro mais elle n’est pas nilpotente.

Non simplifiabilité pour le produit, pour une matrice diviseur de zéro

Si {A} est un diviseur de zéro, les implications {\begin{cases}AM=AN\Rightarrow M=N\cr MA=NA\Rightarrow M=N\end{cases}} sont fausses.

En effet, si {AB=0} avec {B\ne 0}, et si {N=M+B}, alors {AM=AN} (bien que {M\ne N}).
On exprime cela en disant qu’une matrice diviseur de zéro n’est pas simplifiable pour le produit.

Calcul des puissances d’une matrice carrée

On présente ici quelques méthodes usuelles de calcul de {A^{p}} avec {A} dans {\mathcal{M}_{n}(\mathbb{K})} et {p} dans {\mathbb{N}}.

{\vartriangleright} Utilisation de la formule du binôme

Pour calculer {A^p}, il est parfois possible d’écrire {A=B+C}, et d’utiliser la formule du binôme.
La condition indispensable est bien sûr l’égalité {BC=CB}.

Il faut que le calcul des puissances de {B} et {C} soit beaucoup plus facile que celui de {A} !

Un cas fréquent est celui où {B=\lambda I_{n}} (matrice scalaire) et où {C} est nilpotente.

Si {C^{m}=0}, alors, pour tout {p} : {\begin{array}{rl}A^p&=\displaystyle\sum_{k=0}^p\dbinom pk\,C^k\,B^{p-k}=\displaystyle\sum_{k=0}^p\dbinom pk\,\lambda^{p-k}C^k\\\\&=\displaystyle\sum_{k=0}^{m-1}\dbinom pk\,\lambda^{p-k}C^k\end{array}}
Par exemple si {C^{3}=0}, alors pour {p\ge3} on a : {(I+C)^{p}=I+pC+\dfrac{p(p-1)}{2}C^{2}+\dfrac{p(p-1)(p-2)}{6}C^{3}}
NB : cette formule reste vraie si {0\le p\le 2} (car les termes “excédentaires” sont nuls).

Premier exemple

Soit {A=\begin{pmatrix}1&1&0&0\\0&1&1&0\\ 0&0&1&1\\ 0&0&0&1\end{pmatrix}}. Alors {A=I_{4}+T} avec {T=\begin{pmatrix}0&1&0&0\\0&0&1&0\\ 0&0&0&1\\ 0&0&0&0\end{pmatrix}}.

On a : {T^{2}=\begin{pmatrix}0&0&1&0\\ 0&0&0&1 \\ 0&0&0&0 \\ 0&0&0&0\end{pmatrix},T^{3}=\begin{pmatrix}0&0&0&1\\0&0&0&0\\ 0&0&0&0\\ 0&0&0&0\end{pmatrix}} puis {T^{k}=0} si {k\ge4}.

On en déduit : {\begin{array}{rl}A^{p}&=I+pT+\dfrac{p(p-1)}{2}T^{2}+\dfrac{p(p-1)(p-2)}{6}T^{3}\\\\&=\begin{pmatrix}1&p&\dfrac{p(p-1)}{2}&\dfrac{p(p-1)(p-2)}{6}\\0&1&p&\dfrac{p(p-1)}{2}\\0&0&1&p\\0&0&0&1 \end{pmatrix}\end{array}}

Deuxième exemple

Voici un autre d’exemple d’utilisation de la formule du binôme.

La matrice {A=\begin{pmatrix}2&1&1&1\\1&2&1&1\\ 1&1&2&1\\ 1&1&1&2\end{pmatrix}} s’écrit {A=I_{4}+J} avec {J=\begin{pmatrix}1&1&1&1\\1&1&1&1\\ 1&1&1&1\\ 1&1&1&1\end{pmatrix}}.

On trouve {J^{2}=4J}, donc {J^{k}=4^{k-1}J} pour {k\ge1} (attention, c’est faux si {k=0}).

On obtient finalement (bien vérifier toutes les étapes du calcul) : {\begin{array}{rl}A^p&=\displaystyle\sum_{k=0}^p\dbinom pk\,T^k=I_{4}+\dfrac{1}{4}\Big(\displaystyle\sum_{k=1}^p\dbinom pk\,4^{k}\Bigr)J=I_{4}+\dfrac{5^{p}-1}{4}J\\\\&=\dfrac{1}{4}\begin{pmatrix}5^{p}+3&5^{p}-1&5^{p}-1&5^{p}-1\\5^{p}-1&5^{p}+3&5^{p}-1&5^{p}-1\\5^{p}-1&5^{p}-1&5^{p}+3&5^{p}-1\\5^{p}-1&5^{p}-1&5^{p}-1&5^{p}+3\end{pmatrix}\end{array}}

{\vartriangleright} Utilisation d’une récurrence

Il arrive que les coefficients des premières puissances de {A} satisfassent à une formule simple.
Il reste à établir si cette formule est vraie pour toutes les puissances de {A}, à l’aide d’une récurrence.

Par exemple, si {R(\,\theta)=\begin{pmatrix}\cos(\,\theta)&-\sin(\,\theta)\\ \sin(\,\theta)&\cos(\,\theta) \end{pmatrix}} (rotation d’angle {\,\theta}), on trouve {R(\,\theta)R(\varphi)=R(\,\theta+\varphi)}.

Une récurrence évidente donne alors {R(\,\theta)^{p}=R(p\,\,\theta)=\begin{pmatrix}\cos(p\,\,\theta)&-\sin(p\,\,\theta)\\ \sin(p\,\,\theta)&\cos(p\,\,\theta) \end{pmatrix}\text{\ pour tout\ }p}

{\vartriangleright} Utilisation d’un polynôme annulateur

Supposons par exemple qu’une matrice {A} vérifie {A^3-2A^2-A+2I_{n}=0\ (1)}.

On dit alors que {P=X^3-2X^2-X+2} est un polynôme annulateur de {A}.

Avec cette notation, l’égalité {(1)} s’écrit {P(A)=0}.

Mais le polynôme {P} se factorise en {P=(X-1)(X+1)(X-2)}.

Pour calculer {A^{p}}, on écrit la division {X^{p}=Q(X)P(X)+a_{p}X^{2}+b_{p}X+c_{p}\quad\text{(2)}}.

Dans cette division, on remplace {X} par {1,-1} et {2} et on trouve {\begin{cases}a_{p}+b_{p}+c_{p}=1\\ a_{p}-b_{p}+c_{p}=(-1)^{p}\\ 4a_{p}+2b_{p}+c_{p}=2^{p}\end{cases}}

On trouve alors, après calculs : {a_{p}=-\dfrac12+\dfrac{(-1)^{p}}6+\dfrac{2^{p}}3,\ b_{p}=\dfrac12-\dfrac{(-1)^{p}}2,\ c_{p}=1+\dfrac{(-1)^{p}}3-\dfrac{2^{p}}3}

Dans la division (2), on remplace {X} par {A} et on trouve : {A^{p}=Q(A)P(A)+a_{p}A^{2}+b_{p}A+c_{p}I_{n}}

Du fait que {P(A)=0}, cela se simplifie en {A^{p}=a_{p}A^{2}+b_{p}A+c_{p}I_{n}}.
On a ainsi obtenu {A^{p}} en fonction de {A^{2}}, de {A} et de la matrice identité.

{\vartriangleright} Puissances entières avec Python

La fonction (rudimentaire) suivante calcule les puissances {A^{k}} d’une matrice {A}, avec {k\ge1}.

def powmat(A, k):
B = A
for i in range(1, k) : B = B.dot(A)
return B

>>> A = np.tri(4,dtype=’int’)>>> A
array([[1, 0, 0, 0],
[1, 1, 0, 0],
[1, 1, 1, 0],
[1, 1, 1, 1]])
>>> powmat(A,2)
array([[1, 0, 0, 0],
[2, 1, 0, 0],
[3, 2, 1, 0],
[4, 3, 2, 1]])
>>> powmat(A,10)
array([[ 1, 0, 0, 0],
[ 10, 1, 0, 0],
[ 55, 10, 1, 0],
[220, 55, 10, 1]])

Page précédente : produit matriciel
Page suivante : matrices inversibles