I1 Alogorithmique Numerique
I1 Alogorithmique Numerique
Généralités
Normes et rayon spectral:
= ∑x =
2
- Norme 2 : X 2 i X,X
i
- Norme ∞ : X ∞
= Sup xi
i
Proposition : En dimension finie, toutes ces normes sont équivalentes ; en pratique, on choisit celle qui nous
arrange.
Propriétés :
- AX ≤ A . X et AB ≤ A . B
- Cas de A symétrique : A
2
= ρ ( A) = max λi
i
∆X ∆b
Théorème : AX = B et A( X + ∆X ) = b + ∆b . On a ≤ Cond ( A) .
X b
∆X ∆A
Théorème : AX = B et ( A + ∆A)( X + ∆X ) = b . On a ≤ Cond ( A) .
X + ∆X A
Remarque : Le conditionnement traduit l'amplification des grandeurs relatives.
Calcul de l’inverse
−1
Une idée pour résoudre le sytème Ax=b serait de calculer l’inverse de A. En effet, on a x = A b .
{
X Y
α k ,iα j ,l
Notons A
−1
[
= (α k , j )1≤ k ,l ≤ n . Alors on trouve (A + ε .Ei , j )
−1
]
k ,l
= α k ,l −ε
1 + ε .α j ,i
.
Elimination de Gauss
On applique la stratégie du pivot partiel maximum, au calcul de l’inverse.
On considère une matrice A inversible, de dimension n
−1
On résout Ax = el pour 1 ≤ l ≤ n , ce qui revient à écrire A. A = I . On procède par élimination de Gauss,
3
ce qui donne une matrice triangulaire supérieure (complexité en n ). Ensuite, on réalise n remontées, une par
vecteur el (complexité en n 2).
En résumé, on a Ax = el et U .x = M .el avec U = MA une matrice triangulaire supérieure.
Esnard Aurélien Algorithmique Numérique
On veut traiter tous les seconds membres en une seule passe ; pour cela on considère la matrice n x 2n suivante :
⎛ ⎞ ⎛ ⎞
⎜ ⎟ ⎜ ⎟
⎜ ⎟ ⎜ ⎟
⎜ ⎟ qui après calculs donne ⎜ ⎟.
⎜ ⎟ ⎜ ⎟
⎜ ⎟ ⎜ ⎟
⎝ ⎠ ⎝ ⎠
On donne ici un exemple d’écriture en langage de description algorithmique :
Début
Initialiser A et lire ε ;
/* triangularisation */
Pour k := 1 à n faire
Début
Pivot (k , l , OK ) ;
Si non(OK)
Alors
Début
Ecrire « matrice non inversible » ;
Exit echec ;
Fin ;
Permuter ( k , l ) ;
Pour j := k+1 à 2n faire
A(k , j ):= A(k , j ) / A(k , k ) ;
Pour i := k+1 à n faire
Pour j := k+1 à 2n faire
Esnard Aurélien Algorithmique Numérique
/* n remontées */
Pour k := 1 à n faire
Pour i := n-1 à 1 par pas de -1 faire
Début
s := 0 ;
Pour j := i+1 à n faire
s := s + A(i, j ) * A( j , n + k ) ;
A(i, n + k ):= A(i, n + k ) − s ;
Fin ;
Fin ;
Remarques :
- Choix du pivot : pour des raisons de stabilité numérique, on divise toujours par le terme de la colonne k qui
a la plus grande valeur absolue (Cf. Pivot partiel maximum).
- Recherche du pivot : si la plus grande valeur absolue est inférieure à la précision machine ε, alors on arrête
en disant que la matrice n’est pas inversible à ε près (test d’inversibilité informatique). Cependant, elle peut
très bien être inversible du point de vue mathématique !
Factorisation A=LU
Soit A une matrice régulière, de dimension n.
⎛1 ⎞
⎜ ⎟
⎜ 1 ⎟
On donne la définition des matrices J k = ⎜ α k +1,k 1 ⎟ avec α = − al ,k pour l > k .
⎜ ⎟ l ,k
a k ,k
⎜ M O ⎟
⎜ α n ,k 1 ⎟⎠
⎝
On démontre que l’inverse des Jk existe et que L = ∏ J k est une matrice triangulaire inférieure, avec des 1
−1
k =1, n
⎛1 ⎞
⎜ ⎟
⎜ 1 ⎟
sur la diagonale. En fait, on a J k
−1
= ⎜ − α k +1,k 1 ⎟.
⎜ ⎟
⎜ M O ⎟
⎜ − α n,k 1 ⎟⎠
⎝
Pour i := 1 à n faire
Début
Pour j := 1 à i-1 faire
Esnard Aurélien Algorithmique Numérique
⎛ j −1
⎞
li , j := ⎜⎜ ai , j − ∑ li ,k .u k , j ⎟⎟ a j , j ;
⎝ k =1 ⎠
/* avec l i ,i = 1 */
Pour j := i à n faire
i −1
u i , j := ai , j − ∑ li ,k .u k , j ;
k =1
Fin ;
⎛O O ⎞
⎜ ⎟
⎜ O O ⎟
⎜O O O ⎟
⎜ ⎟
⎜ O O O ⎟
⎜ O O O⎟⎟
⎜
⎜ O O ⎟
⎜ ⎟
⎝ O O⎠
- La largeur de la bande est W = P+Q+1
- On ne stocke dans une structure de donnée appropriée que la bande, soit un O(W.N), ce qui est intéressant si
W << N.
Propriété fondamentale :
La bande se conserve par factorisation LU. On parle de structure de données statique. En revanche, si on utilise
des techniques de pivotage au cours d’une factorisation LU sur une matrice bande, alors la structure bande n’est
pas conservée.
On utilise la méthode uniquement dans le cas, où à priori on ne pivote pas. La condition suffisante la plus connue
est « A matrice à diagonale strictement dominante », c’est à dire ∀i ∈ 1, n a i ,i > ∑a
j =1, n
i, j .
j ≠i
Factorisation PA=LU
P est la matrice des permutations.
L est une matrice triangulaire inférieure dont la diagonale se compose de 1.
U est une matrice triangulaire supérieure.
Esnard Aurélien Algorithmique Numérique
⎛1 ⎞
⎜ ⎟
⎜ O ⎟
Matrice de permutation élémentaire i ↔ j : ⎜ ⎟
⎜ 1 ⎟
⎜ 0 1 ⎟ → ligne i
⎜ ⎟
⎜ 1 ⎟
Pi , j = ⎜ O ⎟
⎜ ⎟
⎜ 1 ⎟
⎜ 1 0 ⎟ → ligne j
⎜ ⎟
⎜ 1 ⎟
⎜ ⎟
⎜ O ⎟
⎜ 1 ⎟⎠
⎝
Le produit PA permute les lignes i et j de la matrice A. Le produit AP permute les colonnes i et j de la matrice A.
L est en fait la matrice B pour laquelle les termes d'une colonne sont divisés par les coefficients bii. D est la
matrice dont les coefficients diagonaux sont les bii².
On établit un algorithme par ligne : Pour la 1ère ligne, on écrit d1 = a1,1 . Supposons maintenant le calcul
j −1
∑ (l ik d k l jk )
effectué jusqu'à la ligne i-1 ; le calcul de la ligne i est donné par l i , j = a i , j − k =1
pour j ≤ i − 1 et
dj
∑ (l )
j −1
par d i = a i ,i −
2
ik d k . Ainsi une CNS pour cette factorisation est que les di ne soient pas nuls.
k =1
Pour i de 1 à n faire
Début
Pour j de 1 à i-1 faire
j −1
li , j := ai , j − ∑ (l ik d k l jk ) / d j ;
k =1
/* l i ,i := 1 */
( )
j −1
d i := ai ,i − ∑ l ik d k ;
2
k =1
Fin ;
Esnard Aurélien Algorithmique Numérique
On veut maintenant apporter une amélioration à cet algorithme en diminuant les nombres de calcul ; on
économise les produits l i ,k .d k , que l’on stocke pour un i fixé dans le vecteur C[k].
Pour i de 1 à n faire
Début
Pour j de 1 à i-1 faire
Début
j −1
C[ j] := a i , j − ∑l k =1
jk .C[k ] ;
C[ j ]
li , j := ;
dj
Fin ;
j −1
d i := ai ,i − ∑ lik .C[k ] ;
k =1
Fin ;
On pose L1 =
⎜ ⎟ , A2 = ⎜ ⎟ , avec B1′ = B1 − .
⎜ ⎟ d1
⎜⎜ 1
v I n −1 ⎟⎟ ⎝O B1′ ⎠
⎝ d1 ⎠
Ainsi, on a : A = A1 = L1 A2 L1 . Puis, en réitérant n-1 fois, il vient : A = A1 = (L1 L Ln −1 ) An (L1 L Ln −1 ) .
t t
14243 { 14243
L D Lt
⎛1 ⎞
⎜ ⎟
⎜ O ⎟
⎜ 1 ⎟
Le produit des matrices Lk = ⎜ ⎟ donnent la matrice finale
⎜ O ⎟
⎜ vk ⎟
⎜ 1⎟
⎝ dk ⎠
⎛ 1 ⎞
⎜ ⎟
⎜ 1 ⎟
L=⎜ O ⎟.
⎜ ⎟
⎜ v1 v2 L 1⎟
⎝ d1 d2 ⎠
Esnard Aurélien Algorithmique Numérique
Ce qui correspond en effet à une factorisation de Crout, car la matrice D = (d i ) est bien diagonale et la matrice
L est bien triangulaire inférieure, par construction.
On donne l’algorithme de calcul de L et de D par colonne, qui procède en écrasant la partie triangulaire
inférieure de A, (les 1 de la diagonale de L ne sont pas stockés, car on préfère y stocker D) :
Début
Pour k de 1 à n-1 faire
Pour j de k+1 à n faire
Début
d := a j ,k a k ,k ;
Pour i de j à n faire ai , j := a i , j − ai ,k .d ;
a j ,k := d ;
Fin ;
Fin ;
La structure donnée d’implémentation serait un vecteur à une dimension stockant consécutivement les colonnes
de la partie triangulaire inférieure de A.
Définitions :
- Un terme de remplissage apparaît en (i,j) au cours de la factorisation si et seulement si ai , j = 0 et
li , j ≠ 0 . On reformule le problème comme la conservation du creux initial de la matrice.
- li,j est logiquement non nul si ai , j ≠ 0 ou ∃k ,1 ≤ k ≤ j − 1 tel que l i ,k l j , k ≠ 0 . C’est à dire, à la kéme
itération (1 ≤ k ≤ n − 1) un terme ai , j de la matrice A qui est nul, devient non nul ssi
≠0
6
47 48
ai ,k .a j ,k
a j ,k ≠ 0 et ai ,k ≠ 0 avec k ≤ j − 1 . Preuve (algorithme par colonne): ai , j := ai , j − .
{ { a k ,k
≠0 =0
- Les li,j logiquement non nuls se trouvent à l'intérieur du profil de A.
⎛x ⎞ ⎛x ⎞
⎜ ⎟ ⎜ ⎟
⎜x x ⎟ ⎜x x ⎟
⎜
Exemple de remplissage total : E1 = x 0 x ⎟ → E2 = ⎜ x x x ⎟
⎜ ⎟ ⎜ ⎟
⎜x 0 0 x ⎟ ⎜x x x x ⎟
⎜ x 0 0 0 x⎟ ⎜x x ⎟⎠
⎝ ⎠ ⎝ x x x
Le coefficient (3,2) dépend uniquement des coefficients (3,1) et (2,1) qui sont non nuls, par conséquent le
coefficient (3,2) devient logiquement non nul : effet de remplissage. Ensuite, le coefficient (4,2) qui dépend des
coefficients (4,1) et (2,1) devient logiquement non nul. (…) Le coefficient (5,3) dépend des coefficients (5,k) et
(3,k) pour k variant de 1 à 3-1=2, etc.
Remarque : Ainsi, on voit que le phénomène dépend de l’ordre selon lequel on exécute les itérations, c’est à dire
de la numérotation des inconnues du système ! Si l’on permute les indices 5 et 1 dans l’exemple précédent, on
Esnard Aurélien Algorithmique Numérique
⎛x ⎞
⎜ ⎟
⎜0 x ⎟
obtient la matrice suivante : E 3 = ⎜ 0 0 x ⎟ qui ne produit pas de remplissage !
⎜ ⎟
⎜0 0 0 x ⎟
⎜x x ⎟⎠
⎝ x x x
La question qui se pose maintenant est de savoir si l’on peut trouver une matrice de permutation P, telle que la
factorisation de la matrice PAPt crée le moins de remplissage possible ? Il n’existe pas de méthode exacte en
temps raisonnable et on va utiliser des méthodes approchées (heuristiques).
Considérons une permutation donnée telle que σ ( xi ) = i et plaçons nous à la kéme itération :
- trouver le monotone adjacent de x k qui est l’ensemble de tous les sommets liés à x k avec un numéro plus
{ ( )
grand, Madj ( x k ) = x j , j > k et tel que x j , x k soit une arête possible }
- rajouter une arête de remplissage pour tout couple de tels sommets non liés entre eux.
- On fait cela dans l’ordre des k croissants de 1 à n-1. A la fin, on obtient le graphe dit d’élimination.
Exemple :
- Madj ( x1 ) = {x 2 , x3 , x 4 , x5 } Æ remplissage total
- Madj ( x 2 ) = { } Æ pas de remplissage
- Madj ( x3 ) = { } Æ pas de remplissage
- Madj ( x 4 ) = { } Æ pas de remplissage
Profil ligne
Considérons une matrice SDP A de dimension n.
Définition : Pour chaque ligne, on considère la colonne ci correspondant au premier terme non nul sur la ligne.
{ }
La contribution de la ligne i au profil est Pi = ai , j , ci ≤ j ≤ i qui sera effectivement stockée par ordre
croissant de colonne (soit i − ci + 1 coefficients). Le profil ligne est l’union des Pi pour i variant de 1 à n. On a
besoin d’un vecteur de dimension n donnant pour tout i la valeur de ci .
n
La taille du profil est m = ∑i − c + 1.
i =1
i
Propriété fondamentale : Le profil ligne se conserve par factorisation (statique). Le remplissage est inclus dans
le profil ligne. Par conséquent, on va chercher à trouver des numérotations qui tendent à minimiser la taille du
profil ligne.
Esnard Aurélien Algorithmique Numérique
j −1
On adapte l’algorithme de factorisation : li , j := ai , j − ∑( (l ik
k = max ci , c j
d k l jk )/ d j , ainsi on diminue le volume de
)
calcul.
Le problème en terme de numérotation sur Gσ est le suivant : « numéroter ses voisins avec des numéros les plus
proches possibles de i ».
Numérotation en couches :
On partitionne l’ensemble des sommets du graphe par rapport à leur distance à un sommet de départ x. On
numérote continûment selon les couches et le plus grand écart varie comme un O(longueur d’une couche). Le
nombre de sommets étant fixé, on cherche le sommet x de départ de telle manière que le nombre de couche
h( x ) générés à partir de x soit maximum ; ceci aura tendance à minimiser la longueur des couches.
Algorithme :
- Choisir x quelconque
- Construire la structure en couche à partir de x
- Choisir un sommet y de la couche terminale ayant le moins de voisins et construire les couches à partir de ce
nouveau sommet, nécessairement h( y ) ≤ h( x )
- Si h(x) > h(y) Alors réitérer, Sinon, on est dans le cas où h(x) = h(y), et y est le point de départ.
⎛x ⎞ ⎛x ⎞
⎜ ⎟ ⎜ ⎟
⎜x x ⎟ ⎜x x ⎟
Ce qui donne la transformation suivante : E1 = ⎜ x 0 x ⎟ → E = ⎜0 x x ⎟.
⎜ ⎟ 4
⎜ ⎟
⎜x 0 0 x ⎟ ⎜0 x 0 x ⎟
⎜ x 0 0 0 x⎟ ⎜0 x 0 0 x⎟
⎝ ⎠ ⎝ ⎠
Esnard Aurélien Algorithmique Numérique
Limitation du remplissage
Théorème : CNS de création d’une arête de remplissage
Soit Gσ le graphe numéroté associé à la matrice A.
( )
Une arête de remplissage xi , x j est créée si et seulement si :
- l’arête est déjà présente dans Gσ ;
- il existe un chemin allant de xi à x j tel que les numéros intermédiaires soient plus petits que ceux des
extrémités.
Idée de numérotation : Pour mettre en défaut ce théorème, on utilise des séparateurs topologiques. Cette
méthode consiste à séparer deux sous-ensembles A et B par un ensemble C, appelé séparateur ; de sorte que tout
chemin allant d’un élément de A vers un élément de B passe au moins par un sommet de C. Si on numérote les
sommets de C avec des numéros plus grands que ceux affectés à A et B, alors il n’y aura pas d’arête de
remplissage créées entre les éléments de A et ceux de B.
A B
C
On applique ce principe de numérotation récursivement par bloc, jusqu’à tomber sur une grille qui n’est plus
séparable. Ce faisant on limite excellemment le remplissage, mais le profil risque d’être mauvais.
Remarque : Il faut une autre structure de donnée que celle du profil non adapté. Par ailleurs, il y a aussi une
indépendance des calculs exploitable sur une machine à architecture parallèle.
Exemple :
On reprend l’exemple précédent…
A
B
⎛x C ⎞ ⎛x ⎞
⎜ ⎟ ⎜ ⎟
⎜x x ⎟ ⎜0 x ⎟
On effectue le changement de numérotation : E1 = ⎜ x 0 x ⎟ → E = ⎜0 0 x ⎟ et
⎜ ⎟ 5
⎜ ⎟
⎜x 0 0 x ⎟ ⎜0 0 0 x ⎟
⎜x 0 0 0 ⎟ ⎜x x x x x ⎟⎠
⎝ x⎠ ⎝
l’on peut vérifier que cette dernière matrice ne se remplie pas du tout !
en trois étapes.
n2
Descente : Posons y = DL x et résolvons Ly = b , dont la complexité est en
t
- (matrice triangulaire).
2
On écrit un algorithme utilisant un accès par ligne dans la matrice L.
y1 := b1 ;
i −1
Pour i de 2 à n faire yi = bi − ∑l
j =1
i, j yj ;
yi
Pour i de 1 à n faire z i = ;
di
n2
Montée : Résolvons finalement L x = z , dont la complexité est en
t
- .
2
On écrit un algorithme utilisant un accès par ligne dans Lt, ce qui revient à un accès par colonne dans L.
xn := yn ;
n
Pour i de n-1 à 1 faire xi := zi − ∑l
t
i, j xj ;
j = i +1
On veut exploiter la symétrie. On ne stocke que L et D ; et on ne stocke pas les 1 de la diagonale de L, qui sont
pris en compte directement dans le calcul.
Considérons le fait que l’on stocke les données en mémoire de façon mono-dimensionnelle. On va donc être
obligé de choisir une organisation ligne par ligne, ou colonne par colonne des données.
Si l’on choisit une organisation ligne par ligne, on s’aperçoit que l’algorithme de descente est bien adapté à la
structure de données par ligne, tandis que l’algorithme de montée, qui pratique un accès aux données par colonne
ne l’est pas. C’est pourquoi, il faut écrire un algorithme de montée accédant aux données par ligne et non plus
par colonne.
Pour i de 1 à n faire xi := zi ;
Pour i de n à 2 par pas de -1 faire
Pour j de i-1 à 1 par pas de -1 faire
x j := x j − li , j xi ;
Esnard Aurélien Algorithmique Numérique
Remarque : Le cadre normale de convergence des méthodes itératives classiques est : « A matrice symétrique
définie positive ».
Vitesse de convergence :
Théorème : B ( ) n
n → 0 ssi ρ (B ) < 1 .
Méthode Jacobi
⎛ −F⎞
⎜ ⎟
Notation : A = ⎜ D ⎟
⎜− E ⎟
⎝ ⎠
On pose A = M − N avec M = D et N = E + F selon le schéma ci-dessus. Ce qui donne la formule de
récurrence suivante : X n +1 = D (E + F ) X n + D b .
−1 −1
( )
Soit x k = x k
i
i =1, n
le vecteur itéré, on donne l’algorithme donnant x k +1 en fonction de x k .
Pour i de 1 à n faire
− 1 ⎡ i −1 n ⎤
x ki +1 = ⎢∑ a i , j x k + ∑a x kj − bi ⎥
j
i, j
ai ,i ⎣ j =1 j =i +1 ⎦
Théorème : Soit A une matrice symétrique, à diagonale strictement dominante, c'est à dire a i ,i > ∑a
i≠ j
i, j
Méthode Gauss-Seidel
Boucle directe
On reprend le schéma de matrice précédent et on pose M = D − E et N = F . La formule de récurrence
s'écrit : (D − E )X n +1 = FX n + b .
i −1 n
On calcule x k +1 , l'ième composante du vecteur X k +1 : a i ,i x k +1 = −
i i
∑ ai, j xkj+1 −
j =1
∑a
j =i +1
i, j x kj + bi .
Pour i de 1 à n faire
1 ⎡ i −1 n ⎤
x ki +1 = ⎢− ∑ ai , j x k +1 − ∑a x kj + bi ⎥
j
i, j
a i ,i ⎣ j =1 j =i +1 ⎦
t
⎛ ⎞
⎜ j
On procède par écrasement du vecteur X k : x k +1 , 1 ≤ j ≤ i − 1 x ki +1 x kj , i + 1 ≤ j ≤ n ⎟ .
⎜ 1442443 { ⎟
⎝ déjà calculés calcul en cours ⎠
Boucle rétrograde
Cette fois, on pose M = D − F et N = E .
On propose l’algorithme suivant :
Pour i de n à 1 faire
1 ⎡ i −1 n ⎤
x ki +1 = ⎢− ∑ ai , j x k − ∑a x kj+1 + bi ⎥
j
i, j
a i ,i ⎣ j =1 j =i +1 ⎦
Conclusion
Théorème : Soit A une matrice symétrique définie positive, alors la méthode est convergente
(
car ρ (D − E ) F < 1 .
−1
)
Comparaison : Si A est SDP les méthodes de Jacobi et de Gauss-Seidel convergent, et Gauss-Seidel converge
plus vite que Jacobi car ρ ( J ) = ρ (L )2 avec J = D −1 (E + F ) et L1 = (D − E )−1 F ou (D − F )−1 E .
Méthode de relaxation
D ⎛1− w ⎞
Pour cette méthode, on pose M = − E et N = M − A = ⎜ ⎟ D + F , avec w ≠ 0 . On donne la
w ⎝ w ⎠
−1
⎛D ⎞ ⎡⎛ 1 − w ⎞ ⎤
matrice d’itération : Lw = ⎜ − E ⎟ ⎢⎜ ⎟ D + F ⎥ . Ainsi pour w = 1 , on se ramène à la méthode de
⎝w ⎠ ⎣⎝ w ⎠ ⎦
Gauss-Seidel.
Théorème : Soit A une matrice SDP. Il y a convergence si et seulement si ρ (Lw ) < 1 . On démontre que ceci est
vrai si et seulement si w ∈ 0,2 . ] [
Remarque :
- w = 1 : Gauss-Seidel
- w < 1 : Sous-relaxation
- w > 1 : Sur-relaxation
Esnard Aurélien Algorithmique Numérique
Boucle directe
i −1
a i ,i n
⎛1 ⎞
i
On veut calculer x k +1 : x ki +1 = −∑ ai , j x kj+1 − ∑a i, j x kj + ⎜ − 1⎟ai ,i x ki + bi . Comme dans Gauss-
w j =1 j =i +1 ⎝w ⎠
Seidel, on note que l'algorithme procède par écrasement.
Pour i de 1 à n faire
w ⎡ i −1 n ⎤ w
x ki +1 = (1 − w)x ki − ⎢∑ ai , j x k +1 +
j
∑a i, j x kj ⎥ + bi
ai ,i ⎣ j =1 j =i +1 ⎦ a i ,i
Choix de w :
⎛ O⎞
⎜ ⎟
⎜ ⎟
Soit A une matrice symétrique définie positive, et tridiagonale par blocs : A = ⎜ ⎟.
⎜ ⎟
⎜O ⎟
⎝ ⎠
On cherche un w optimal, c'est à dire qui rend ρ (M N ) minimum. On établit dans le cas des matrices
−1
tridiagonales : woptimal =
2
(
et ρ Lwoptimal = woptimal − 1 . )
1 + 1 − ρ (L1 )
2
Note : On utilise aussi cette méthode de façon heuristique pour des matrices qui ne sont pas tridiagonale.
Dichotomie : Si l’on cherche woptimal par dichotomie, l’expérience montre qu’il faut obligatoirement procédé
par valeurs supérieures (la fonction w a ρ (Lw ) possède pour w > woptimal une pente de 1).
Schéma d’implémentation :
- Soit x0 donné
- On réalise p itérations avec Gauss-Seidel, on obtient la suite des itérées jusqu’à xp à partir de laquelle on
évalue de manière approchée ρ (L1 ) et woptimal .
- Puis on applique la méthode de relaxation avec w = woptimal .
- On s’arrête lorsque l’on a atteint la précision désirée.
Remarque : Toute la difficulté réside dans la choix de p. Il faut que le nombre total d’itérations soit << n pour
être compétitif avec Cholesky. Le choix de p se fait au cas par cas.
Esnard Aurélien Algorithmique Numérique
Méthodes du gradient1
Formule de récurrence : Prenons un X0 quelconque, et supposons que nous ayons obtenu par itération Xk.
Considérons la courbe de niveau k {X tel que J ( X ) = J ( X k )} , pour calculer Xk+1, on se déplace du point Xk,
1
appartenant là a courbe de niveau k, dans la direction de son gradient : g k = grad = AX k − b . On donne
2
ainsi la formule de récurrence : X k +1 = X k − θ k g k . Il reste maintenant à choisir la valeur de θ k , de sorte que
J soit le plus petit possible. On montre que J ( X k +1 ) = θ k Ag k , g k − 2θ k g k , g k + J ( X k ) , donc il faut
2
gk , gk
prendre θ k = .
Ag k , g k
Dans cette méthode, on va utiliser un ensemble de directions conjugués. g k est la meilleure direction locale,
mais pas à long terme, sinon l'algorithme convergerait d'un coup! D'où l'idée, d'apporter une correction pour le
choix de la direction.
On pose X k +1 = X k + α k d k avec d k = − g k + β k −1 d k −1 . En résolvant le système obtenu, par annulation des
dérivées partielles pour la fonction J (qui doit être minimum), on calcule les valeurs des coefficients α k et β k −1 .
1
Cette partie a été rédigée en privilégiant les notes de cours plutôt que celle de TD, où les notations et les
méthodes diffèrent sur quelques points.
Esnard Aurélien Algorithmique Numérique
g k +1 , g k +1
- On prépare la suite en calculant : g k +1 = g k + α k Ad k ou AX k +1 − b ; βk = et
gk , gk
d k +1 = − g k +1 + β k d k .
Remarque : On démontre que la correction apportée dans cette méthode est optimale.
Formule par récurrence : On démontre après coup que cette méthode donne la solution de l'équation linéaire au
bout de N itérations ! Par conséquent, on pourrait la considérer comme une méthode directe, mais on préfère la
prendre comme une méthode itérative, et s'arrêter pour k ≤ N quand la précision est satisfaisante.
Préconditionnement :
Convergence de la formule :
⎛ Cond ( A) − 1 ⎞
k
convergence est rapide. En particulier, si Cond ( A) = 1 , alors on converge d'un coup, c'est à dire X0 est déjà
solution ! Rappelons : Cond ( A) ≥ 1 . Ici, on voit que la vitesse de convergence va dépendre de la matrice A, et
plus particulièrement de son conditionnement. On va alors introduire la notion de préconditionnement.
Transformation :
~ ~ ~
On cherche à résoudre un autre système A Y = b ayant même solution, mais pour lequel la matrice A possède
un meilleur conditionnement.
~ −1 −t ~ −1 ~ ~
On considère C = E.E . On pose A = E . A.E et b = E b . Ainsi AX = b ⇔ A Y = b pour
t
Y = Et X .
Remaque : Les algorithmes passant par l'intermédiaire de Y sont dits non transformés. Lorsque Y n'apparaît plus
dans le calcul l'algorithme est dit transformé.
⎟ X0 − X
A
⎝ Cond
~
A + ()
1 ⎟
⎠
A
. Il faut à présent
−1 ~
travailler pour que le conditionnement de à soit meilleur que celui de A. Or, nous avons posé A = E
AE t ,
~
()
−1
( )
par où nous pouvons déduire que Cond A = Cond C A , car ces deux matrices ont les mêmes valeurs
propres.
matrice E que les l i , j tels que ai , j ≠ 0 , pour lesquels donc on évite le phénomène de remplissage.
−1
Si l'on pose C = BB = A , on obtient un conditionnement de 1 (le meilleur) car C A = Id ; cependant il
t
Voici deux conditions suffisantes chaques à l’existence : A est une matrice SDP à diagonale dominante, ou
A est une matrice SDP avec ai , j ≤ 0 pour i ≠ j .
suivant X n +1 − X n ≤ 2ε , dont on considère en pratique qu'il est équivalent au premier, même si cela n'est
qu'à demi vrai en théorie (la réciproque est fausse). Il peut y avoir de rare cas où l'algorithme s'arrête, alors que
l'on est loin de la solution !!! Mais faute de mieux…
Finalement, on prend comme test d'arrêt : X n +1 − X n ≤ ε et /ou AX n − X n = g n ≤ ε .
Remarque : La méthode du gradient conjugué préconditionné est plus performant en nombre d’itération que la
méthode de relaxation avec woptimal .
Esnard Aurélien Algorithmique Numérique
= ∑ ei avec ei = y i − (axi + b ) .
2 2
b qui minimise l'erreur erreur
M
Cas général
On étudie un cas plus général f (t i ) ≅ ∑ x .φ (t ) , avec N inconnues x
j j i j . On a M équations avec M >> N .
N
On pose A = (φ (t ))
j i M ×N
et b = ( f (t i ))M . L'erreur est Ax − b . On cherche les x j qui minimise cette
2
⎛ ⎞
erreur Ax − b = ∑ ⎜⎜ ∑ aij x j − bi ⎟⎟ .
2
2
i =1KM ⎝ j =1KN ⎠
Théorème
Le vecteur x réalise le minimum de Ax − b 2
( )
si et seulement si x est solution de A A x = A b (équation
t t
normale). Il existe toujours au moins une solution. La solution est unique si et seulement si le rang de A est N.
Défauts numériques
On appliquera la méthode des équations normales pour un nombre faible d'inconnues 2, 3, 4 ou 5. Un premier
t
défaut est l'imprécision du calcul engendré par le produit matriciel A A . Par ailleurs, si la matrice A est creuse,
t
A A peut très bien ne pas l'être…
Méthode de la factorisation QR (rectangulaire)
Définition (M > N)
⎛ R N×N ⎞
AM × N = QM ×M R N × N , avec Q une matrice orthogonale et R = ⎜⎜ ⎟ , avec R une matrice triangulaire
⎟
⎝ O ⎠
supérieure.
Théorème : minimiser Ax − b 2
pour N supérieur à 3 ou 4
⎛ c1 ⎞
Soit Q b = ⎜⎜ ⎟⎟ avec c1 de dimension N. Le vecteur x minimise Ax − b
t
2
si et seulement si x est
⎝ c2 ⎠ M
solution de Rx = c1 .
Esnard Aurélien Algorithmique Numérique
Preuve :
α2 = a
2
- 2
- On choisit le signe de α : le signe opposé à a1.
- On pose β = α 2 − α .a1 > 0 .
⎛ a1 − α ⎞
- On choisit v = ⎜⎜ ⎟⎟ .
⎝ ai ⎠m
~
- On s'intéresse maintenant à la 2ème colonne. Il existe une matrice de Householder H 2 de dimension m-1
⎛1 0 ⎞
telle que H 2 × A1 = A2 , avec H 2 = ⎜⎜ ~ ⎟⎟ . Ainsi la première colonne de A2 reste inchangée par
⎝0 H2 ⎠
⎛ x⎞
⎜ ⎟
⎜α 2 ⎟
rapport à A1 et l'on a fabriqué la deuxième colonne ⎜ 0 ⎟ .
⎜ ⎟
⎜ M ⎟
⎜0⎟
⎝ ⎠
- Il vient A = A0 = H 1 × A1 = H 1 × H 2 × A2 = K On itère la méthode N fois et il l'on obtient la
factorisation A = (H 1 L H n ) An avec Q = H 1 L H n et R = An .
Généralités
∂φ i (c )
k = sup φ ′(c ) = sup .
c c ,i , j ∂x j
Esnard Aurélien Algorithmique Numérique
Variante si m grand
La complexité globale passe en n2 après la première utilisation… Factorisation PA=LU…
Méthode
( )
On cherche x + βx + α qui divise P. On a P ( x ) = x + βx + α Q( x ) + (r1 x + r0 ) (division euclidienne).
2 2
On veut appliquer la méthode de Newton - Raphston en dimension 2. Il faut d'abord calculer la matrice
jacobienne J : on établit des formules par récurrence assez complexes… Puis, on applique effectivement la
méthode de Newton - Raphston, à partir de (α 0 , β 0 ) , qui donne (α , β ) (sous réserve que l'on se trouve
initialement dans une boule suffisamment proche de la solution pour que la méthode soit effectivement
convergente).
Finalement, le polynôme A1 = x + βx + α fournit deux racines de P. On réitère la méthode sur Q1 tel que
2
P = A1Q1 . Cependant, les itérations successives entraînent une perte progressive de la précision.
Variante
Pour ne pas choisir (α 0 , β 0 ) complètement au hasard, une méthode consiste à sélectionner une centaine de
couples et à choisir, pour débuter l'algorithme, celui qui rend le polynôme minimum.
Amélioration de la précision
La racine obtenue étant assez proche de la racine réelle, on effectue la méthode de la tangente pour améliorer la
précision. Tous les 4 ou 5 coups, on améliore la précision avec la précision avec la méthode de la tangente. Cette
dernière méthode ne s'applique qu'aux racines réelles (on applique deux fois la méthode pour les racines
complexes).
Esnard Aurélien Algorithmique Numérique
Théorème
Si A est diagonalisable en D = P AP avec P la matrice de passage. Pour tout δA , pour toute valeur propre λ
−1
de A + δA , il existe une valeur propre λ' de A telle que λ − λ ≤ Cond (P ) δA . Le meilleur cas possible est
A symétrique, la matrice de passage est orthogonale et son conditionnement égale à 1.
Méthode
1. Chercher une matrice tridiagonale semblable à A ayant même valeur propre.
2. Chercher ces valeurs propres.
Tridiagonalisation
Cet algorithme utilise des matrices de Householder. On procède bloc par bloc, en dimension décroissante.
- A1 = A
−1 −1 ⎛1 O ⎞ ~
- 1ère étape : A2 = H 1 × A1 × H 1 avec H 1 = H 1 = ⎜⎜ ~ ⎟⎟ et H 1 la matrice de Householder. On
⎝ O H1 ⎠
~ ~ ⎛α 1 ⎞
trouver H1 tel que H 1 A21 = ⎜⎜ ⎟⎟ avec α un réel. Voilà ce qui en définitive va rendre la matrice
⎝O⎠
tridiagonale.
- On applique la même méthode que précédemment avec une dimension en moins…
On réitère la méthode n fois en totalité. Finalement, on obtient A = (H 1 K H n ) × An × (H 1 K H n )
−1
- où
An est une matrice tridiagonale semblable à A.
-
~ ~
(
H 1 A22 H 1 = A22 − VZ t + ZV t )
Méthode de recherche des valeurs propres
A partir de la matrice tridiagonale M, on va construire le polynôme caractéristique dont les racines sont
précisément les valeurs propres.
Bissection de Givens
Soit µ un réel. Soit E (i, µ ) = {+, signe(P1 (µ ))K signe(Pi (µ ))} . On définit N (i, µ ) le nombre de
changement de signe dans E (i, µ ) . Alors N (i, µ ) représente le nombre de racines de Pi qui sont inférieures et
distinctes de µ.
On ordonne les λi de manière croissante : λ1 < L < λn . Considérons un intervalle [a0 , b0 ] contenant λi. Soit
a0 + b0
µ= (bissection). On calcule N (n, µ ) . Si N (n, µ ) > i , alors λi ∈ [a0 , µ ] sinon λi ∈ [µ , b0 ] . On
2
réitère…
Théorème
Soit A diagonalisable dont la valeur propre λ1 (de plus grand module) est unique. Soit q0 un vecteur non
orthogonal au sous-espace propre à gauche2 associé à λ, tel que q0 = 1 . On suppose xn +1 = Aqn ,
En pratique !
- En pratique l'hypothèse " q0 un vecteur non orthogonal au sous-espace propre à gauche3 associé à λ" n'est
pas nécessaire, car le phénomène d'arrondi permet de s'éloigner du cas orthogonal !
- Si A n'est pas diagonalisable, la méthode fonctionne encore, mais la convergence est plus lente.
- En pratique, on choisit la norme infinie, et q0 = (1,K,1) .
Méthode de la déflation
On suppose maintenant que l'on connaît λ1 et u1, avec λ1 > L > λn et la base de vecteur propre (u1 ,L, un ) .
On cherche λ2 et u2.
On suppose A = A (A symétrique ?). Le principe est simple, on forme la matrice B tel que B = A − λ1u1u1 .
* *
Cette matrice possède les mêmes valeurs propres, les mêmes vecteurs propres, sauf λ1 et u1. Par conséquent, si
l'on applique la méthode de la puissance itérée, on va obtenir λ2 et u2.
En pratique, on ne calcule pas B… La seule différence avec la méthode de la puissance itérée est dans la formule
xk +1 = A(qk − α k u1 ) . (Phénomène d'arrondi compensatoire inverse…)
Cette méthode permet en réitérant de trouver λ3, λ4 mais pas au delà, car il y a répercussion des erreurs d'arrondi.
Pour trouver la valeur propre la plus proche de µ, on applique la méthode de la puissance itérée à
B = A − µ.Id , ce qui donne uk et λk − µ .
Polynômes orthogonaux
b
Soit P, Q = ∫ P(x )Q(x )W (x )dx avec W (x ) ≥ 0 un poids. Considérons P , P ,L, P
a
0 1 n avec Pi un
Legendre
1
- [− 1,1] , W (x ) = 1 , P, Q = ∫ P( x )Q( x )dx .
−1
2n − 1 n −1
- P0 = 1 , P1 ( x ) = x , Pn ( x ) = xPn −1 ( x ) − Pn − 2 ( x ) .
n n
2
=
2
- Pn .
2n + 1
Laguerre
+∞
- [0,+∞[ , W (x ) = e −x
, P, Q = ∫ P(x )Q(x )e
−x
dx .
0
L0 = 1 , L1 ( x ) = − x + 1 , Ln (x ) = (2n − x − 1)Ln −1 ( x ) − (n − 1) Ln − 2 (x )
2
-
= (n!) .
2 2
- Pn
Esnard Aurélien Algorithmique Numérique
Hermite
+∞
∫ P(x )Q(x )e
− x2
- P, Q = dx .
−∞
- H 0 = 1 , H 1 ( x ) = 2 x , H n ( x ) = 2 xPn −1 ( x ) − 2(n − 1)H n − 2 (x ) .
= 2 n n! π .
2
- Pn
Tchebychev
P( x )Q( x )
+∞
- P, Q =
−∞
∫ 1 − x 2
dx .
- T0 = 1 , T1 ( x ) = x , Tn ( x ) = 2 xTn −1 (x ) − Tn − 2 ( x ) .
⎧⎪cos(n cos −1 ( x )), x ≤ 1 ⎛ 2k − 1 π ⎞
formule explicite : Tn ( x ) = ⎨ . Tn a n zéros, x k = cos⎜ . ⎟ ∈ [− 1,1]
⎪⎩ch(nch ( x )), x ≥ 1
-
−1
⎝ n 2⎠
⎛ k +1 ⎞
pour 1 ≤ k ≤ n et n+1 extrema sur x k′ = cos⎜ .⎟ ∈ [− 1,1] .
⎝ n ⎠
π
= π , Pn =
2 2
- P0 .
2
Théorèmes
T (x )
- Soit E n = {P / deg (P ) = n et a n = 1} . Alors ∀P ∈ E n , sup n n −1 ≤ sup P ( x ) .
[−1,1] 2 [−1,1]
- Soit Fn = {P / deg(P ) = n et P (α ) = β } avec α ∉ [− 1,1] et β fixé. Alors ∀P ∈ Fn ,
βTn ( x )
sup ≤ sup P( x ) .
[−1,1] Tn (α ) [−1,1]
Algorithme de Remes
[ ]
Soient un intervalle a, b , et un fonction f ∈ C ( a, b , R ) . f[ ] ∞
= sup f ( x ) . On cherche un polynôme P
[a,b ]
de degrés inférieur ou égal à n tel que P − f ∞
≤ Q− f ∞
pour tout polynôme Q de degrés inférieur ou égal
à n.
Théorème
On considère x 0 < x1 < L < x n +1 n+2 points de a, b .[ ]
∃! P / deg(P ) ≤ n et ∀i, f ( xi ) − P( xi ) = (− 1) ( f ( x0 ) − P( x0 )) (equioscillations)
i
1.
2. max f ( xi ) − P( xi ) ≤ max f ( xi ) − Q( xi ) pour tout Q tel que deg(Q ) ≤ n , c'est-à-dire que P est la
0≤i ≤ n +1 0 ≤i ≤ n +1
meilleure approximation pour les points xi , mais pas meilleure approximation uniforme.
Esnard Aurélien Algorithmique Numérique
Corollaire
Posons α = f ( xi ) − P( xi ) , ∀i . Si α = f − P ∞
alors f − P ∞
≤ f −Q ∞
pour tout polynôme Q de
degrés n. P est la meilleure approximation uniforme sur a, b . [ ]
Algorithme
Du point de vue informatique, on se donne une tolérance ε > 0 , d'où si α − f − P ∞
≤ ε , alors pour tout
polynôme Q de degrés n f − P ∞
≤ f −Q ∞
+ε …
1. Choisir n+2 points.
2. Si condition vrai, alors fin.
3. Sinon, échange : on introduit y en respectant le principe d'oscillation… ???
4. On recommence avec la nouvelle famille de points.
par calculer les ∆ f ( x 0 ) pour 0 ≤ i ≤ n . La formule de Gregory - Newton définit le polynôme P de degrés n
i
⎛u ⎞ ⎛u ⎞ x − x0 ⎛u ⎞ 1
P( x ) = f ( x0 ) + ⎜⎜ ⎟⎟∆ ′f ( x0 ) + K + ⎜⎜ ⎟⎟∆n f ( x0 ) avec u = et ⎜⎜ ⎟⎟ = u (u − 1)L (u − i + 1) .
⎝1 ⎠ ⎝n⎠ h ⎝ i ⎠ i!
⎛u ⎞ h n +1
Remarquons que si x = x k , u = k et ⎜⎜ ⎟⎟ = C k . On estime l'erreur f ( x ) − P ( x ) ≤
i
M n +1 avec
⎝i ⎠ 4(n + 1)
M n +1 = f (n +1) (x ) . Pn ne converge pas vers f à cause des M n . Aussi pour avoir la convergence uniforme
∞
b−a
[ ]
sur a, b , on réalise l'interpolation sur N sous-segments de longueur avec 5 ou 6 points (en pratique).
N
Intégration numérique
[ ] Pn tend vers I = ∫ f . On partage l'intervalle [a, b]
b a
Si Pn converge uniformément vers f sur a, b , alors ∫
a b
b−a
en N sous-segments [xi , xi +1 ] de longueur h = , avec x 0 = a et x N = b .
N
Stabilité
Les formules sont de la forme ∑ a f (x ) avec nécessairement ∑ a
i
i i
i
i = b− a.
Esnard Aurélien Algorithmique Numérique
ε = sup ε i .
i
Formule de Simpson
h⎧ N −1
⎛ h ⎞⎫
Sh = ⎨ f ( x 0 ) + f ( x N ) + ∑ 2 f ( xi ) + 4 f ⎜ xi + ⎟⎬ . La méthode est d'ordre 4.
6⎩ i =0 ⎝ 2 ⎠⎭
Spline
Théorème
Soi k ≥ 1 . Il existe une et une seule fonction Γ sur [x1 , x N ] tel que Γ( xi ) = y i . Sur chaque segment
[xi , xi +1 ] , Γ est un polynôme de degrés 2k-1 avec Γ (2 k −2 ) (xi ) qui existe et Γ (2k −2 ) (x1 ) = Γ (2 k −2 ) (x N ) = 0 ,
de telle sorte donc que Γ soit de classe 2k-2 sur [x1 , x N ] .
Spline cubique (k = 2)
(…)
Équations différentielles
Généralités
Problème de Cauchy
[ ]
Soit f : x 0 , x 0 + a × R
M
→ R M , continue, telle que (x, y ) a f ( x, y ) . Etant donnée une condition initiale
⎧ y ′( x ) = f ( x, y ( x ))
y 0 , on cherche y : [x0 , x 0 + a ] → R M de classe C1 telle que ⎨
⎩ y (x0 ) = y 0
, problème de Cauchy
dimension M et d'ordre 1.
Esnard Aurélien Algorithmique Numérique
(
⎧⎪ y ( P ) ( x ) = g x, y, y ′,L , y ( P −1)
Le problème de Cauchy de dimension M et d'ordre P : ⎨
) .
⎪⎩ y ( x 0 ) = y 0 , y ′(x 0 ) = y 0′ , L, y ( P −1) ( x0 ) = y 0( P −1)
⎛ y ⎞
⎜ ⎟
⎜ y′ ⎟
On se ramène au problème de Cauchy d'ordre 1 en posant z = ⎜ , de dimension PM .
M ⎟
⎜ ( P −1) ⎟
⎜y ⎟
⎝ ⎠
Théorème (K - lipschitzienne)
Si il existe K tel que ∀x, y1 , y 2 , f ( x, y1 ) − f ( x, y 2 ) ≤ K y1 − y 2 , alors le problème de Cauchy d'ordre 1
possède une solution unique.
Stabilité
⎧ z n +1 = z n + hΦ ( x n , z n , h ) + hε n
On introduit une perturbation, ⎨ , et l'on observe le comportement de la
⎩z0 = y0
méthode. Posons ε = sup ε n . La méthode est stable si et seulement si ∃A / max z n − y n ≤ Aε .
n n
Consistance
y ( x n +1 ) − y ( x n )
La méthode est consistante si et seulement si max − Φ (x n , y ( x n ), h ) ⎯h⎯
⎯→ 0 . La
→0
n h
y ( x n +1 ) − y ( x n )
méthode est consistante d'ordre p si et seulement si ∃A / max − Φ ( x n , y ( x n ), h ) ≤ Ah p .
n h
Convergence
La méthode est convergente si et seulement si max y n − y ( x n ) ⎯h⎯
⎯→ 0 . Il y a convergence d'ordre p si et
→0
n
seulement si ∃A / max y n − y ( x n ) ≤ Ah .
p
n
Si la méthode est stable et consistante [d'ordre p], alors la méthode est convergente [d'ordre p].
Théorème stabilité
Si il existe K tel que ∀x, y1 , y 2 , Φ ( x, y1 , h ) − Φ ( x, y 2 , h ) ≤ K y1 − y 2 , c'est-à-dire si φ est K -
lipschitzienne, alors la méthode est stable.
Théorème consistance
- Si Φ ( x, y ,0 ) = f ( x, y ) , on a consistance d'ordre 1.
Esnard Aurélien Algorithmique Numérique
⎛ ∂Φ ⎞ 1 ⎛ ∂f ⎞
- Si de plus, ⎜ ⎟( x, y,0) = ⎜ ⎟( x, y ) , alors on a consistance d'ordre 2.
⎝ ∂h ⎠ 2 ⎝ ∂x ⎠
⎛∂ Φ⎞
2
1 ⎛ ∂2 f ⎞
Si de plus, ⎜⎜ ⎟
2 ⎟
( x , y , 0 ) = ⎜ ⎟( x, y ) , alors on a consistance d'ordre 3.
3 ⎜⎝ ∂x 2 ⎟⎠
-
⎝ ∂h ⎠
- Etc. …
Méthode de Euler
Φ ( x, y, h ) = f ( x, y ) , ordre 1, stabilité acquise (φ et f lipschitzienne). Intuitivement, on traduit la formule du
y − yn
taux d'accroissement f ( x n , y n ) = n +1 . La formule sera donc y n +1 = y n + hf ( x n , y n ) .
h
Méthode du développement de Taylor
1 ⎛ ∂f ⎞ 1 h 2 ⎛ ∂f ⎞
Φ ( x, y , h ) = f ( x, y ) + h⎜ ⎟ ( x , y ) + ⎜ ⎟( x, y ) + K , consistante de l'ordre que l'on veut,
2 ⎝ ∂x ⎠ 3 2! ⎝ ∂x ⎠
stabilité acquise. Mais en pratique les calculs de dérivées rend la méthode impraticable !
Ordre 2
On cherche Φ ( x, y , h ) =
βf ( x, y ) + αf ( x + λh, y + µhf ( x, y )) . L'ordre 1 impose α + β = 1 et l'ordre 2
impose λ = µ et αλ = αµ = 1 / 2 .
⎛ ⎞
f ( x n , y n )⎟ .
h h
- Si α = 1 , alors β = 0 etλ = µ = 1 / 2 , d'où la formule y n +1 = y n + hf ⎜ x n + , y n +
⎝ 2 2 ⎠
⎧
⎪ y n +1 / 2 = y n + f ( x n , y n )
h
Soit le prédicteur y n +1 / 2 , la méthode s'écrit : ⎨ 2 La méthode est
⎪⎩ y n +1 = y n + hf ( x n + h / 2, y n +1 / 2 )
d'ordre 2, et correspond à une amélioration de Euler : le taux d'accroissement est calculé pour le point milieu
(x n + h / 2, y n+1 / 2 ) .
- Si α = 1/ 2 …
Ordre 4
Φ ( x, y , h ) = (P1 + 2 P2 + 2 P3 + P4 )
1
-
6
- P1 = f ( x, y )
- P2 = f ( x + h / 2, y + h / 2.P1 )
- P3 = f ( x + h / 2, y + h / 2.P2 )
- P4 = f ( x + h, y + h.P3 )
Choix de h
On se donne une tolérance ε > 0.
- On choisit arbitrairement h et on applique la méthode.
Esnard Aurélien Algorithmique Numérique
- On recommence avec h / 2 . Si le résultat obtenu pour un pas divisé par 2, est à ε près celui obtenu pour un
pas de h alors le pas est bon, sinon on réitère. Attention il faut comparer x n = x 0 + nh et
h
x 2 n = x 0 + 2n. .
2
Méthode à pas multiples
(…)
Problème de Dirichlet
Application
(…)