\begin{center}{\bf{\Large Travaux Pratiques~-~S\'erie 6}}\end{center}
\bigskip
\paragraph{Exercice 1 : Le pivot de Gauss.}
On aimerait utiliser l'algorithme d'\'elimination de Gauss
avec recherche partielle de pivot
pour r\'esoudre le syst\`eme lin\'eaire
\begin{equation}\label{eq:linsys}
Ax=b,
\end{equation}
o\`u $A$ est une matrice carr\'ee.
\begin{enumerate}
\item D'abord, il faut écrire des ``solvers'' pour résoudre des systèmes
triangulaires. Pour un système $Ux = b$, où $U$ est une matrice triangulaire supérieure,
utiliser l'en-tête suivante:
{\small
\begin{verbatim}
function y = usol(U,b)
% USOL solves the system Ux = b for upper triangular U
% y = usol(U,b) solves the system Ux = b, where U is a
% upper triangular matrix.
\end{verbatim}
}
Voici l'en-tête pour $Lx=b$, où $L$ est une matrice triangulaire inférieure:
{\small
\begin{verbatim}
function y = lsol(L,b)
% LSOL solves the system Lx = b for lower triangular L
% y = lsol(L,b) solves the system Lx = b, where L is an
% lower triangular matrix.
\end{verbatim}
}
Pour vérifier vos programmes, créer d'abord des matrices triangulaires
aléatoires $L$ et $U$. (Les commandes {\tt rand}, {\tt tril} et {\tt triu}
peuvent être utiles.) Ensuite, créer la solution exacte
{\tt x\_exact} et calculer {\tt b = L*x\_exact} et {\tt c = U*x\_exact}. Quelle est la
différence entre {\tt x\_exact} et les résultats de {\tt lsol}/{\tt usol}?
\item Ensuite, écrire un programme qui calcule la factorisation LU sans
recherche partielle de pivot:
{\small
\begin{verbatim}
function [L,U] = LUNoPivot(A)
% LUNOPIVOT computes LU factorization of A without pivoting
% [L,U] = LUNoPivot(A) computes the LU factorization of A using
% Gaussian elimination without pivoting. L is a unit lower triangular
% matrix and U is an upper triangular matrix.
\end{verbatim}
}
Appliquer à la matrice
\[
A=\begin{bmatrix}
4&-3&-1\\
0.5&3&-1\\
0&1&0
\end{bmatrix},
\]
puis comparer avec les matrices $L$ et $U$ données par la commande Matlab {\tt lu(A)}. Pour la matrice $A$ proposée, la matrice de permutation $P$ est simplement l'identité (Pourquoi?). Ensuite, utiliser {\tt lsol} et {\tt usol} pour résoudre $Ax = b$ avec un vecteur $b$ aléatoire.
\item Rajouter la recherche partielle de pivot en modifiant le programme
\item Comparer les résultats obtenus en résolvant $Ax=b$ en utilisant d'abord {\tt LUPivot} puis la commande matlab " \textbackslash ". Qu'observez-vous ? Choisissez n'importe quels matrices $A$ et $b$.
\item V\'erifier que le pivot trouvé par {\tt LUPivot} est le même que celui utilisé
par l'algorithme {\tt LUNoPivot} pour la matrice suivante de taille $n\times
n$ (matrice impliquée dans le calcul de splines). Comment expliquer cela ?
\[
A=\frac{1}{h}\begin{bmatrix}
4&1&&&&\\
1&4&1&&&\\
&\ddots&\ddots&\ddots&&\\
&&1&4&1&\\
&&&1&4&\\
\end{bmatrix}
\]
o\`u $h=\frac{1}{n}$, pour certains $n$ grand.
\end{enumerate}
\paragraph{Exercice 2 : La règle de Cramer, une méthode peu efficace
numériquement.}
On souhaite maintenant résoudre le système linéaire (\ref{eq:linsys}) en utilisant la règle de Cramer
$$
x_i =\frac{\det(A_i)}{\det(A)}, \quad i=1\ldots n,
$$
où $A_i$ est la matrice obtenue en remplaçant la $i$ème colonne de $A$ par le vecteur $b$.
La fonction déterminant $\det$ sera calculée récursivement en utilisant le développement de Laplace:
où $M_{1,j}$ est la matrice obtenue à partir de la matrice $A$ en supprimant la ligne $i$ et la colonne $j$
(par convention, le déterminant de la matrice vide est égal à $1$).
\begin{enumerate}
\item
\emph{Coût des calculs.}
\begin{enumerate}
\item
Écrivez un programme pour calculer le déterminant par la formule de Laplace
%What is the number of arithmetic operations of the algorithm?
et testez-le en utilisant des matrices aléatoires (\texttt{rand} en \textsc{Matlab}) de dimension $n=3,5,7,9$.
\item
Écrivez un programme pour calculer $\det(A)$ pour une matrice $A$ raisonnablement grande, par exemple $n \geq100$, sans utiliser la formule de Laplace.
\item
Estimer le coût des calculs pour résoudre un système linéaire en utilisant la règle de Cramer.
\end{enumerate}
\item
\emph{Stabilité numérique.}
Pour une matrice donnée $A$, vous pouvez suivre les instructions ci-dessous pour tester la stabilité numérique de la résolution de systèmes linéaires.
\begin{enumerate}
\item[(1)]
Générer une solution ``exacte'' $x=\mathtt{randn}(n,1)$, et le membre de droite correspondant $b:=Ax$.
\item[(2)]
On appelle $\widehat x$ la solution numérique de $Ax=b$
par la règle de Cramer. Calculer l'erreur forward et les normes des résidus:
\[
\mathtt{err} :=\frac{\|\widehat x - x\|_2}{\|x\|_2},\qquad
Observer les erreurs $\texttt{err}$ et $\texttt{res}$ pour la règle de Cramer, et comparer le résultat avec l'algorithme de l'élimination de Gauss de l'Exercice~1, ainsi qu'avec la fonction de \uppercase{MATLAB} backslash
$\backslash$.
\end{enumerate}
\paragraph{Exercice 3 : Inversion-et-multiplication.} Dans cet exercice on examine l'idée de résolution d'un système linéaire $Ax=b$ par inversion directe: d'abord calculer la matrice inverse $M=A^{-1}$, puis appliquer la multiplication matrice-vecteur $x=Mb$.
\begin{enumerate}
\item
Écrire un programme pour résoudre efficacement
$x^{(1)},x^{(2)},\dots,x^{(k)}$ d'un ensemble de $k$ systèmes linéaires
où $b^{(i)}\in\mathbb R^n$ sont des membres de droite donnés.
\emph{Indice : Comme $A$ est la même pour tout les systèmes linéaires, on peut réutiliser sa factorisation LU.}
\item
Modifier votre programme pour calculer la matrice inverse d'une matrice $A$.
\emph{Indice: $A^{-1}$ est la solution de $AX = I$, où $I$ est une matrice identité.}
\item
%Solve the linear system by invert-and-multiply: $x=A^{-1}b$.
Étudier la stabilité de l'algorithme inversion-et-multiplication comme dans l'Exercice 2.2, en utilisant des matrices de dimension $n=100$ et condition
$\kappa=10^2,10^6,10^{10},10^{18}$.
\end{enumerate}
\paragraph{Exercice 4 : Équation de Poisson en dimension 1}
Prenons une fine barre métallique homogène de longueur $L$ et de section constante. On suppose que la barre est thermiquement isolée, de telle manière que la chaleur se propage uniquement suivant la barre. On applique une source thermique extérieure $H(x)$ tout au long de la barre. On pose $u(x,t)$ la température au point $x$ de la barre et au temps $t$. Alors en appliquant le principe de conservation de l'énergie, on obtient l'équation suivante, dite de la chaleur 1D:
À présent, on s'intéresse aux solutions stationnaires de cette équation, c'est à dire les solutions vérifiant $\frac{\partial u(x,t)}{\partial t}=0$. L'équation de la chaleur stationnaire ainsi obtenue est appelée équation de Poisson. À présent, la température ne dépend plus du temps $t$. Si l'on appelle la température $\phi(x)$ et la source de chaleur extérieure $F(x)$, l'équation de Poisson est
Pour résoudre numériquement \eqref{PE}, on divise l'intervalle $[0,L]$ en $n$ sous-intervalles de longueur $h=L/n$ avec $0=x_{0}<x_{1}<...<x_{n}<x_{n}=L$. On utilise alors un schéma de différences finies pour approcher $\phi_{xx}:=\frac{\partial^2\phi(x)}{\partial^2 x}$, et on obtient finalement
\item Résoudre le système d'équations tridiagonal précédent en utilisant l'opération Matlab $"\textbackslash$" pour $F(x)=-2$, $L=1$ et $n=10,20,50,100$. Comparer avec la solution exacte.
\item Utiliser votre fonction {\tt LUNoPivot} pour observer la structure des matrices de la décomposition LU de la matrice de Poisson vue ci-dessus. Modifier votre fonction {\tt LUNoPivot.m} pour le rendre plus rapide pour ce système d'équations tridiagonal.
\end{enumerate}
\begin{figure}[ht]
\centering
\includegraphics[scale =0.6]{n10}
\label{fig1}
\end{figure}
\hspace{1cm}
\begin{figure}[ht]
\centering
\includegraphics[scale =0.6]{n100}
\label{fig2}
\caption{Solutions de l'équation de Poisson avec $F(x)=-2$ pour $n=10$ et $100$.}