Transposition

Plan du chapitre "Calcul matriciel"

Propriétés de la transposition

Définition (transposée d'une matrice)
Soit {A} une matrice de {\mathcal{M}_{n,p}(\mathbb{K})}, de terme général {a_{i,j}}.
On appelle transposée de {A} et on note {A^{\top}} la matrice {B} de {\mathcal{M}_{p,n}(\mathbb{K})} de terme général {b_{i,j}=a_{j,i}}.

Remarque : on peut utiliser les deux notations {A^{\top}} ou {{}^{\text{t}}A}.
Si par exemple {A=\begin{pmatrix}1&4&2&3\cr8&4&3&6\cr7&1&0&5\end{pmatrix}}, alors {A^{\top}=\begin{pmatrix}1&8&7\cr4&4&1\cr2&3&0\cr3&6&5\end{pmatrix}}.
Voici comment on peut transposer une matrice avec Python. On notera les deux syntaxes possibles.

>>> A = np.array([[1,4,2,3],[8,4,3,6],[7,1,0,5]])
>>> A
array([[1, 4, 2, 3],
[8, 4, 3, 6],
[7, 1, 0, 5]])
>>> A.transpose() # ou A.T
array([[1, 8, 7],
[4, 4, 1],
[2, 3, 0],
[3, 6, 5]])

Proposition (linéarité et bijectivité de la transposition)
La transposition des matrices induit un isomorphisme de {\mathcal{M}_{n,p}(\mathbb{K})} sur {\mathcal{M}_{p,n}(\mathbb{K})}.
Plus précisément, si {n=p}, la transposition est un automorphisme involutif de {\mathcal{M}_{n}(\mathbb{K})}.

On retiendra que si {A,B} ont même format, on a : {\begin{cases}{(\lambda A+\mu B)}^{\top}=\lambda A^{\top}+\mu B^{\top}\cr {(A^{\top})}^{\top}=A\end{cases}}

Proposition (transposée d'un produit de deux matrices)
Pour {A\in\mathcal{M}_{n,p}(\mathbb{K})}, et {B\in\mathcal{M}_{p,q}(\mathbb{K})}, on a : {(AB)^{\top}=B^{\top}A^{\top}} (attention à l’ordre!)

On généralise à un produit de {k} matrices : {(A_{1}A_{2}\cdots A_{k})^{\top}=A_{k}^{\top}\,A_{k-1}^{\top}\cdots\,A_{2}^{\top}\,A_{1}^{\top}}.

Proposition (transposition de l'inverse d'une matrice carrée)
Si {A} est une matrice carrée inversible, alors {A^{\top}} est inversible et {(A^{\top})^{-1}={(A^{-1})}^{\top}}.

On peut retenir que l’inverse de la transposée, c’est la transposée de l’inverse.

Proposition
Pour toute matrice {A} de {\mathcal{M}_{n}(\mathbb{K})} et tout entier naturel {k}, on a : {{(A^k)}^{\top}=(A^{\top})^k}.
Si {A} est inversible, cette égalité s’étend aux entiers strictement négatifs.

Matrices symétriques ou antisymétriques

Définition (matrices carrées symétriques)
Une matrice {A=(a_{i,j})} de {\mathcal{M}_n(\mathbb{K})} est dite symétrique si elle vérifie {A^{\top}=A}.
Cela équivaut donc à dire que {a_{j,i}=a_{i,j}} pour tous indices {i} et {j}.

Dire que {A} est symétrique, c’est donc dire qu’elle est “symétrique par rapport à sa diagonale”.

Une matrice symétrique {A} est définie de façon unique par la donnée de ses coefficients {a_{i,j}} avec {j\ge i} (c’est-à-dire qui sont “sur” ou “au-dessus” de la diagonale).

Définition (matrices carrées antisymétriques)
Une matrice {A=(a_{i,j})} de {\mathcal{M}_n(\mathbb{K})} est dite antisymétrique si {A^{\top}=-A}.
Cela équivaut donc à dire que {a_{j,i}=-a_{i,j}} pour tous indices {i} et {j}.

Si {A} est antisymétrique, alors ses coefficients diagonaux sont nuls.

Une matrice antisymétrique {A} est définie de façon unique par la donnée de ses coefficients {a_{i,j}} avec {j>i} (c’est-à-dire qui sont “strictement au-dessus” de la diagonale).

Exemple : {A=\begin{pmatrix}4&1&0&8\cr1&3&2&5\cr0&2&7&6\cr8&5&6&3\end{pmatrix}} est symétrique et {B=\begin{pmatrix}0&-1&3&6\cr1&0&2&-4\cr-3&-2&0&7\cr-6&4&-7&0\end{pmatrix}}est antisymétrique.

Cela n’a pas de sens de parler de symétrie ou d’antisymétrie pour une matrice qui n’est pas carrée!

Quelques propriétés

  • si {A} est inversible et symétrique alors {A^{-1}} est symétrique.
    si {A} est inversible et antisymétrique alors {A^{-1}} est antisymétrique.
  • si {A} est symétrique alors {A^k} est symétrique pour tout {k} de {\mathbb{N}} (et {k} dans {\mathbb{Z}} si {A} est inversible).
  • si {A} est antisymétrique, alors {A^{k}} est symétrique si {k} est pair et antisymétrique si {k} est impair.

Notation

On note {{\mathcal S}_n(\mathbb{K})} l’ensemble des matrices de {\mathcal{M}_n(\mathbb{K})} qui sont symétriques.
On note {{\mathcal A}_n(\mathbb{K})} l’ensemble des matrices de {\mathcal{M}_n(\mathbb{K})} qui sont antisymétriques.

Proposition (sous-espaces des matrices symétriques ou antisymétriques)
Les ensembles {{\mathcal S}_n(\mathbb{K})} et {{\mathcal A}_n(\mathbb{K})} sont deux sous-espaces supplémentaires de {\mathcal{M}_n(\mathbb{K})}.
La dimension de {{\mathcal S}_n(\mathbb{K})} est {\dfrac12\,n(n+1)} et celle de {{\mathcal A}_n(\mathbb{K})} est {\dfrac12\,n(n-1)}.
Toute matrice {M\in\mathcal{M}_n(\mathbb{K})} s’écrit de façon unique {M=S+A}{S\in{\mathcal S}_n(\mathbb{K})} et {A\in{\mathcal A}_n(\mathbb{K})}.
Les matrices {S} et {A} sont données par : {S=\dfrac12\,(M+M^{\top})} et {A=\dfrac12\,(M-M^{\top})}.

Les fonctions sym et asym renvoient les composantes symétrique et antisymétrique de {M} :

>>> def sym(M) : return (M+M.T)/2
>>> def asym(M) : return (M-M.T)/2
>>> M=np.array([[1,3,4],[2,7,6],[4,1,2]])
>>> print(M)
[[1 3 4] 
[2 7 6] 
[4 1 2]] 
>>> S = sym(M)
>>> print(S)
[[ 1. 2.5 4. ] 
[ 2.5 7. 3.5] 
[ 4. 3.5 2. ]] 
>>> A = asym(M)
>>> print(A)
[[ 0. 0.5 0. ] 
[-0.5 0. 2.5] 
[ 0. -2.5 0. ]]

Les deux fonctions suivantes (randsym et randasym) permettent de fabriquer des matrices symétriques ou antisymétriques aléatoires d’ordre {n} (avec {n=4} par défaut).

Elles forment en fait, respectivement, la composante symétrique ou antisymétrique d’une matrice aléatoire d’ordre {n} à coefficients entiers dans un intervalle donné {[a,b]} (avec {[a,b]=[-5,5]} par défaut).

Ici les matrices renvoyées sont dans le type int.

Attention à la “division par 2” qu’il faut forcer dans le type float (on utilise donc / et non pas //) avant de revenir dans le type int avec la fonction astype :

def randsym(n=4, a=-5, b=5):
m = np.random.randint(a, b+1, size=(n,n))
return ((m+m.T)/2).astype(‘int’)
def randasym(n=4, a=-5, b=5):
m = np.random.randint(a, b+1, size=(n,n))
return ((m-m.T)/2).astype(‘int’)

Voici quelques exemples :

>>> randsym()
array([[-1, -2, 0, 0],
[-2, -5, 4, -1],
[ 0, 4, 5, 1],
[ 0, -1, 1, -1]])
>>> randasym()
array([[ 0, 2, 3, 1],
[-2, 0, 1, 0],
[-3, -1, 0, 3],
[-1, 0, -3, 0]])
>>> randsym(a=0,b=1)
array([[0, 0, 1, 0],
[0, 1, 1, 0],
[1, 1, 0, 1],
[0, 0, 1, 0]])
>>> randsym(6,-9,9)
array([[ 7, 2, 5, 5, -1, 0],
[ 2, 1, -3, -1, 0, -4],
[ 5, -3, 6, -2, -6, -1],
[ 5, -1, -2, -3, -6, -5],
[-1, 0, -6, -6, -9, -1],
[ 0, -4, -1, -5, -1, -2]])
>>> randasym(6,-99,99)
array([[ 0, 4, -62, -5, -45, 27],
[ -4, 0, -30, -70, 24, 38],
[ 62, 30, 0, -33, 15, -61],
[ 5, 70, 33, 0, 8, -60],
[ 45, -24, -15, -8, 0, 28],
[-27, -38, 61, 60, -28, 0]])

Page précédente : matrices inversibles
Page suivante : calculs par blocs