01.05.2013 Views

C++ et éléments finis Note de cours de DEA (version provisoire)

C++ et éléments finis Note de cours de DEA (version provisoire)

C++ et éléments finis Note de cours de DEA (version provisoire)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

18 CHAPITRE 3. LES CLASSES TABLEAUX<br />

E(x) = 1<br />

2 (Ax, x)C − (b, x)C,<br />

où (., .)C est le produit scalaire associer à une une matrice C, symétrique définie positive<br />

<strong>de</strong> IR n .<br />

Algorithme 1 Le gradient conjugué preconditionné soient x 0 ∈ IR n , ε, C donnés<br />

G 0 = Ax 0 − b<br />

H 0 = −CG 0<br />

– pour i = 0 à n<br />

ρ = − (Gi , H i )<br />

(H i , AH i )<br />

x i+1 = x i + ρH i<br />

G i+1 = G i + ρAH i<br />

γ = (Gi+1 , G i+1 )C<br />

(G i , G i )C<br />

H i+1 = −CG i+1 + γH i<br />

si (G i+1 , G i+1 )C < ε stop<br />

Voila comment écrire un gradient conjugué avec ces classes.<br />

3.2.1 Gradient conjugué préconditionné<br />

Listing 1 (GC.hpp)<br />

// exemple <strong>de</strong> programmation du gradient conjugue precondiconnée<br />

template<br />

int GradienConjugue(const M & A,const P & C,const KN_ &b,KN_ &x,<br />

int nbitermax,double eps)<br />

{<br />

int n=b.N() ;<br />

assert(n==x.N());<br />

KN g(n), h(n), Ah(n), & Cg(Ah) ; // on utilise Ah pour stocke Cg<br />

g = A*x ;<br />

g -= b ; // g = Ax-b<br />

Cg = C*g ; // gradient preconditionne<br />

h =-Cg ;<br />

R g2 = (Cg,g) ;<br />

R reps2 = eps*eps*g2 ; // epsilon relatif<br />

for (int iter=0 ;iter

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!