Resolution de systeme lineaire par la methode du gradient conjugue

Description

ce post implemente la resolution des systemes lineaires du type Ax = b par la methode du gradient conjugue( A matrice, b et x vecteurs). l'interet de ce post est quadruple

1) implementation de la methode: l'algorithme que j'utilise est disponible a l'adresse web http://www.math-linux.com/spip.php?article5 (en esperant qu'elle soit encore valide.je n'ai pas pris la peine de verifier...)

2) definition complete d'une classe C++ avec tout ce que ca comporte comme constructeur,destructeur, accesseurs, fonctions amies etc...

3) notion d'heritage de classe

4) commentaires de code a l aide de doxygene. ces commentaires peuvent etre deroutants pour ceux qui ne s'y connaissent pas mais ils n'alterent en rien la comprehension du code.

une fonction main est fournie uniquement dans le but de tester les resultats (elle resout le systeme x + y = 1, x - y = 0)
l'utilisateur pourra donc utiliser le code a sa guise.

NB la matrice A doit doit etre symetrique definie positive. le code fourni verifie uniquement le caractere symetrique de la matrice.

Source / Exemple :


/*!

  • \file main.cpp
  • \brief Programme de test.
  • \author Zangul
  • \version 0.1
  • \date 01 juin 2009
*
  • Programme de test pour la resolution de systemes d'équations
linéaires par la méthode du gradient conjugué. *
  • /
#include <iostream> #include "GradConj.h" #include "Erreur.h" int main() { Matrix A (2, 2); Vecteur b(2); std::cout << "entrez 6 valeurs : "<<std::endl; std::cin >> A >> b; std::cout << A << b ; GradConj u(A,b); try { std::cout << u.Solve(); } catch (erreur &e) { std::cout << "exception" << std::endl; switch(e()) { case BAD_ALLOC: std::cout << "Bad alloc" << std::endl; break; case BAD_SIZE: std::cout << "Bad size" << std::endl; break; case BAD_INDEX: std::cout << "Bad index" << std::endl; break; case NON_SYM: std::cout << "Non sym" << std::endl; break; case NON_DEF: std::cout << "Non def" << std::endl; break; } return -1; } catch (...) { std::cout << "erreur non repertoriée"; } return 0; };

Conclusion :


vos remarques et suggestions sont attendues.
merci

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.