TP 3. Factorisation de matrices

In [2]:
%pylab inline
Populating the interactive namespace from numpy and matplotlib

1. Décompositions LU et de Cholesky d'une matrice

Nous avons vu en cours que la décomposition LU d'une matrice, si elle existe, est donnée par les formules ...

(a) Implémenter une fonction $\texttt{decompoLU(A)}$ qui prend en argument une matrice $A$ et qui retourne les matrices L et U de la décomposition sous le format $\texttt{[L,U]}$.

(b) Trouver la décomposition LU de la matrice $$ A= \begin{pmatrix} 2 & -1 & 0 \\ -1 & 2 & -1 \\ 0 & -1 & 3 \\ \end{pmatrix} $$

(c) Utiliser la décomposition pour résoudre le système $Ax=b$ avec $b=(1,2,3)^T$ et vérifier si l'implémentation est correcte en comparant le résultat à celui renvoyé par $\texttt{solve(A,b)}$.

(d) Trouver la décomposition de Cholesky de $A$ à partir de la décomposition LU.

In [ ]:
 

2. Orthonormalisation de Gram-Schmidt et lien avec la décomposition QR

Soit $\mathcal{B}=\{\vec{x}_j\}_{j=1}^m$ une famille de vecteurs linéairement indépendants dans $\mathbb{R}^n$, avec $1\leq m \leq n$. En partant de $\mathcal{B}$, le procédé d'orthonormalisation de Gram--Schmidt permet de construire une famille $\mathcal{Q}=\{\vec{q}_j\}_{j=1}^m$ de vecteurs orthonormaux définis comme suit. Le premier vecteur est $$ \vec{q}_1=\frac{\vec{x}_1}{\Vert \vec{x}_1 \Vert}. $$ Ensuite, pour $1

(a) Écrire une fonction $\texttt{gramschmidt(B)}$, prenant comme paramètre d'entrée une matrice $B\in\mathbb{R}^{n\times m}$ ayant pour colonnes les $m$ vecteurs de $\mathcal{B}$ et retournant une matrice $Q$ ayant pour colonnes les $m$ vecteurs de la famille $\mathcal{Q}$. Au début de la fonction, penser à tester si la famille $\mathcal{B}$ donnée en entrée est bien libre.

(b) On pose $\varepsilon=1$. Orthonormaliser avec la fonction $\texttt{gramschmidt}$ la famille $$ \mathcal{B}=\left\{\begin{pmatrix}1\\\varepsilon\\0\\0\end{pmatrix},\begin{pmatrix}1\\0\\\varepsilon\\0\end{pmatrix},\begin{pmatrix}1\\0\\0\\\varepsilon\end{pmatrix}\right\}, $$ puis vérifier que les vecteurs obtenus sont bien orthogonaux deux à deux. Que constate-t-on quand $\varepsilon=10^{-8}$?

(c) Les défauts d'orthogonalité observés sont dûs à l'accumulation inévitable d'erreurs d'arrondi dans le calcul. Pour cette raison, il est nécessaire de trouver une version plus robuste de l'algorithme pour face à ce phénomène. Celle-ci consiste à opérer de la manière suivante. Le premier vecteur est $$ q_1=\frac{\vec{x}_1}{\Vert\vec{x}_1\Vert}. $$ Ensuite, pour $1

(d) Mettre en relation la méthode d'orthonormalisation Gram-Schmidt avec la décomposition QR d'une matrice.

In [ ]: