4. Gradient Conjugué Creux
Objectifs
- Implémenter le Gradient Conjugué prenant en charge une matrice CSR
- Comparer les temps CPU entre le Gradient Conjugué “Dense” et “CSR”
Gradient Conjugué “Creux”
Implémentation
La méthode du Gradient Conjugué nécessite, à chaque itération, un produit matrice-vecteur et aucune inversion de matrice. Nous pouvons implémenter très facilement une version creuse du Gradient Conjugué. Sous réserve de disposer d’une classe MatriceCSR
fonctionnelle et utilisant le même nom pour le produit matrice vecteur que la classe Matrice
, alors la seule différence entre la version dense et creux du Gradient Conjugué est le type du paramètre const Matrice & A_
qui devient const MatriceCSR &A_
.
Implémenter une nouvelle classe pour résoudre le Gradient Conjugué dont la matrice est au format CSR.
Le templating de votre classe du Gradient Conjugué est possible mais alors il faut fusionner le fichier
.cpp
dans le .hpp
.
Performances
Comparez les performances, en terme de temps CPU, entre la méthode du Gradient Conjugué dense et creux pour une matrice de taille suffisamment importante.
Le nombre d’itérations entre la version Dense et Creuse doit être exactement le même !