Bonjour � tous, je vais pr�senter un peu ce que je compte faire.

Il me faut calculer � partir de la matrice (bande), trouver la solution x par la m�thode du gradient conjugu� sous l'�quation Mx=B (M la matrice, B le second membre un vecteur et x aussi).

Par l'algorithme que je trouve sur le net, j'aimerais savoir si parmi vous qui ont cod� cet algo me dire si mon code est bon.

(Pour ceux ou celles qui veulent l'int�gralit� des fichiers et codes je les ai laiss� ici http://www.faceweb.fr/Laplace2D.rar)



Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Vecteur MatriceBande::GradientConjugue(const Vecteur &B, double epsilon)
{
    MatriceBande &M = (*this);
    Vecteur r0(N), r1(N), x0(N), p0(N);
 
    double a, b;
    int n = 0, Nmax=100000;
 
    r0 = B - M*x0;
    p0 = r0;
    b = 0;
 
    while (r0.NormeCarree() >= epsilon*epsilon)
    {
        n++;
 
        if (n>Nmax)
        {
            cout << " Le gradient conjugue n'a pas converge en moins de "<< Nmax <<" iterations." << endl;
            cout << " (||r||^2 = " << r0.NormeCarree()<< " )" << endl;
            break;
        }
 
        a = r0.NormeCarree() / (M*p0*p0);
 
        x0 = x0 + a*p0;
        r1 = r0;
        r0 = r0 - a*(M*p0);
        p0 = r0 + b*p0;
 
        b = r0.NormeCarree() / r1.NormeCarree();
    }
 
    return x0;
}