Conditionnement d'une Matrice
Cet article présente ce qu'est le conditionnement d'une matrice inversible et sa norme infinie, illustré par deux exemples.
This article has been written by Robin Pourtaud ([email protected]) and published on April 11, 2020.
The content of this article is licensed under CC BY
NC 4.0 : You can freely share and adapt the content for non-commercial purposes as long as you give
appropriate credit and provide a link to the license. In my case, the link to the original article is enough.
Confidentiality if relevant: https://devmath.fr/page/confidentialite/
Définition
Un système linéaire peut s’écrire sous forme de matrice par une équation du type AX=B. On dit de la matrice A qu’elle est mal conditionnée si une petite variation de B entraîne une grande variation de X.
Pour une matrice inversible A, sa fonction de conditionnement est :
$$\kappa(A)=\Vert A \Vert \Vert A^{-1} \Vert$$
Note : Plus $\kappa$ est élevé, plus la matrice A est mal conditionnée.
Exemple 1
Pour comprendre ce qu’est le conditionnement, prenons un exemple de système linéaire $AX=Y$ :
Matrice A et sa solution
Soit une matrice A :
$$A=\begin{bmatrix} 10 & 7 & 8 & 7 \cr 7 & 5 & 6 & 5 \cr 8 & 6 & 10 & 9 \cr 7 & 5 & 9 & 10 \end{bmatrix}, Y=\begin{bmatrix}32 \cr 23 \cr 33 \cr 31\end{bmatrix}$$
La solution de ce système sera donc :
$$X = \begin{bmatrix}1\cr1\cr1\cr1\end{bmatrix}$$
Exemple de variation
Il est intéressant de remarquer que si on varie faiblement $Y$ :
$$\Delta_Y=\begin{bmatrix}0.1\cr-0.1\cr0.1\cr-0.1\end{bmatrix}$$
Nous obtenons :
$$X=\begin{bmatrix}9.2\cr-12.6\cr4.5\cr-11\end{bmatrix}$$
Une petite variation $\Delta_Y$ sur $Y$ implique une grande variation de $X$.
On dira de la matrice $A$ qu’elle est “mal conditionnée”.
Calcul du conditionnement
La fonction de conditionnement d’une matrice $A$ est $\kappa(A)=\Vert A \Vert \Vert A^{-1} \Vert$, $A$ ayant un déterminant différent de 0 et donc étant inversible. Prenons la norme infini (avec $n = \dim A$)
$$\kappa(A)=\Vert A \Vert_{\infty} \Vert A^{-1} \Vert_{\infty} = \max_{\{1\leq i \leq n\}} \sum^n_{j=1}|A_{i,j}| \times \max_{\{1\leq i \leq n\}} \sum^n_{j=1}|A_{i,j}^{-1}|$$
Dans cet exemple: $\kappa(A)=33 \times 136 = 4488$.
En python
Pour calculer le conditionnement rapidement en python, je vous propose de faire :
import numpy as np
A = np.array([[10,7,8,7],[7,5,6,5],[8,6,10,9],[7,5,9,10]])
print(np.linalg.cond(A,np.inf))
Vous devriez obtenir le même résultat !
Pour en savoir plus sur le conditionnement : Python avec Numpy.
Exemple 2
Pour prendre un autre exemple: La “matrice B” est bien conditionnée:
Soit la matrice inversible B :
$$B=\begin{bmatrix}1&7&2&1\cr7&5&1&5\cr8&6&10&9\cr7&5&9&1\end{bmatrix}$$
Nous avons : $\kappa(B)=33\times 0.4496=14.8368$
Cette matrice est relativement bien conditionnée en comparaison avec la matrice $A$.
Nous pouvons donc affirmer que pour un système linéaire $BX=Y$, une petite variation de $Y$ n’engendra pas une grosse variation $X$.