%pylab inline
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.
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.