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)
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