3. Comparaison des Performances
Objectifs
Pour les différentes méthodes itératives standards, nous souhaitons comparer :
- Les historiques de convergence
- Le temps CPU (time to solution)
Problème modèle
Nous utilisons toujours la matrice du Laplacien, de taille N⨉N.
Temps CPU
Adaptez les fonctions membres Solve()
de chaque classe de méthode itérative pour pouvoir calculer le temps d’exécution de la résolution. Vous pouvez bien entendu ajouter des paramètres/méthodes si vous le désirez.
Naturellement, vous pouvez réutiliser le code minimaliste proposé dans ces tps.
Historiques de Convergence
Nous considérons une matrice de taille 200 et un vecteur membre de droite b
rempli de 1. Dans cet exercice, nous fixons de plus la tolérance à 0.1 et le nombre d’itérations maximal de 20000.
Sur une même figure, affichez les courbes de la norme du résidu relatif (‖r‖/‖b‖) en fonction du numéro de l’itération pour chaque méthode itérative. Cette figure s’appelle l’historique de convergence.
Quelle méthode itérative est la plus rapide (en terme de nombre d’itérations) ?
Vous devriez obtenir une courbe ressemblant à celle ci-dessous :
Avec les résultats suivants (le temps CPU dépend bien évidemment de l’ordinateur et de l’implémentation !) :
Méthode | Jacobi | Gauss-Seidel | Relaxation (optimal) |
---|---|---|---|
Nombre d’itérations | |||
Temps CPU (s) |
Temps CPU
Pour N=10 à 200, avec un pas de 10, calculez le temps CPU (en secondes) pour chaque méthode itérative. Affichez sur une même figure chaque courbe “temps CPU (s)" en fonction du “numéro de l’itération”.
Quelle méthode itérative est la plus rapide (en terme de secondes) ?