IPT_TP_méthodes itératives en algèbre linéaire_PCSI
- page 1 -
METHODES ITERATIVES
EN ALGEBRE LINEAIRE
Exercice 1
On désire résoudre le système linéaire AX = B où A est une matrice carrée de taille n et B un vecteur colonne.
On s'inspire des méthodes de points fixes en une variable.
On écrit A = P
A1 avec P inversible. On a alors,
AX = B PX = A1X + B d'où X = P
1
(A1X + B) = P
1
A1X + P
1
B
Ainsi le vecteur X inconnu est point fixe de l'application X # P
1
A1X + P
1
B qui est affine mais vectorielle.
On va donc utiliser la suite récurrente
X
0
donné
X
k+1
= P
1
A1X
k
+ P
1
B
En dimension 1, on sait que la suite récurrente affine u
k + 1
= ax
k
+ b converge vers le point fixe de ax + b ssi |a| < 1.
Pour une matrice A, il existe des directions privilégiées, c.a.d des vecteurs X non nuls tels que AX = λX, λ étant donc le
facteur d'amplification ou de réduction dans la direction du vecteur X (on dit que X est un vecteur propre de A et que λ
est une valeur propre de A). Si on travaille sur , toute matrice complexe possède n valeurs propres.
On note ρ(A) le maximum des modules des valeurs propres complexes de A (facteur d'amplification maximal). Ce réel
positif s'appelle le rayon spectral de A.
Ici, pour qu'il y ait convergence de la suite récurrente X
k+1
= P
1
A1X
k
+ P
1
B, il faut et il suffit que les n valeurs
propres de P
1
A1 soient toutes de module < 1, c.a.d ρ(P
1
A1) < 1. Dans ce cas, la méthode converge vers l'unique point
fixe qui est la solution recherchée du système AX = B.
On prouve par récurrence la formule
X
k
= (P
1
A1)
k
X
0
+ ((P
1
A1)
k 1
+ (P
1
A1)
k 2
+ ... + (P
1
A1)
+ I) (P
1
B)
Quand ρ(P
1
A1) < 1, la suite ((P
1
A1)
k
) converge vers 0, ce qui signifie que les n
2
composantes de la matrice (P
1
A1)
k
convergent toutes vers 0. Il reste (noter que P
1
A1 = I
n
P
1
A),
lim
k @ +
X
k
= ((I + (P
1
A1) + (P
1
A1)
2
+ ... + ((P
1
A1)
k
+ ... )(P
1
B) = (I P
1
Α1)
1
(P
1
B) = A
1
B = X
en notant X
la solution exacte. On définit e
k
= X
k
X
qui représente l'écart entre la solution approchée au rang k et la
solution exacte. On a e
k + 1
= (P
1
A1) e
k
. La suite (e
k
) est "géométrique", de" raison" P
1
A1 d'où
e
k
= (P
1
A1)
k
(X - X
)
qui tend vers 0.
Pour le test d'arrêt, on ne connaît pas X
mais on a
A e
k
= A(X
k
X
) = AX
k
B
On peut donc prendre comme test d'arrêt
||AX
k
B||
2
où ||-||
2
désigne la norme euclidienne sur
n
.
calcul de ρ(A) : utiliser np.linalg.eigvals(A) qui renvoie la liste des valeurs propres
calcul de ||X||
2
: np.linalg.norm(X, 2)
>>> Ecrire une fonction rayon_spectral(M) qui calcule ρ(M) (utiliser max(liste) pour calculer le maximum des termes d'une
liste).
On décrit maintenant trois méthodes correspondant à des choix de P différents et on donne des critères de convergence,
c.a.d des critère qui garantissent que ρ(P
1
A1) < 1.
On écrit la matrice A sous la forme A = D
U
L où D est la diagonale de A, U la matrice triangulaire supérieure
extraite de A et nulle sur la diagonale et L la matrice triangulaire inférieure extraite de A et nulle sur la diagonale.
IPT_TP_méthodes itératives en algèbre linéaire_PCSI
- page 2 -
Plus la matrice P intègre une part significative de A et plus la méthode a de chance d'être efficace. Dans le cas limite où
P = A et A1 = 0, on a en une seule itération X
1
= A
1
B = X
.
Méthode de Jacobi
Dans cette méthode, on choisit P = D et A1 = L U en supposant tous les a
i,i
non nuls
La méthode s'écrit X
k+1
= D
1
( L U)X
k
+ D
1
B
ce qui donne en terme de composantes, les relations de récurrence :
x
i
(k+1)
= 1
a
i,i
(b
i
j i
a
i, j
x
j
(k)
)
Noter que la programmation nécessite deux vecteurs de longueur n car il faut avoir calculé tous les x
i
(k+1)
avant de
pouvoir remplacer X
k
par X
k + 1
.
La méthode converge si A est à diagonale strictement dominante : cela signifie que
|a
i,i
| >
j i
|a
i , j
|
>>> Ecrire une fonction jacobi(A, B, nb_iter, precision) où A est une matrice carrée inversible, B un vecteur colonne de
même taille; nb_iter fixe le nombre maximal d'itérations et precision est utilisé dans le test d'arrêt sous la forme
||AX
k
B||
2
10
precision
On commencera par convertir A et B en tableaux numpy puis on calculera la matrice D
1
A1 = I
n
D
1
A.
On affichera le rayon spectral ainsi que le nombre d'itérations effectuées et l'écart final.
Pour gagner du temps, on pourra utiliser la fonction sum(liste) qui retourne la somme des termes de la liste.
>>> Tester sur les matrices
A1 = [[3, 1] , [1, 2]] (à diagonale strictement dominante), B1 = [1,5]
A2 = [[1, 2] , [2, 5]] (diagonale non dominante mais symétrique), B2 = [1,1]
Méthode de Gauss-Seidel
Dans cette méthode, on choisit P = D + L , A1 = U en supposant tous les a
i,i
non nuls
La méthode s'écrit X
k+1
= (D + L)
1
( UX
k
+ B)
ce qui donne en terme de composantes, les relations de récurrence :
x
i
(k+1)
= 1
a
i,i
(b
i
j = 1
i 1
a
i, j
x
j
(k + 1)
j = i + 1
n
a
i, j
x
j
(k)
)
La différence avec la méthode de Jacobi, c'est que les nouvelles composantes sont immédiatement intégrées dans le
calcul des composantes suivantes. Du point de vue de la programmation, un seul vecteur de taille n suffit pour stocker
toutes les composantes dont on a besoin.
La méthode converge si A est à diagonale strictement dominante mais aussi lorsque A est symétrique et que ses valeurs
propres sont toutes réelles et > 0.
Et si la matrice A ne satisfait aucune de ces deux conditions ? Du moment que A est inversible, on peut s'en sortir en
remarquant que
AX = B (A
T
A)X = A
T
B
et A
T
A est une matrice symétrique dont on sait prouver que les valeurs propres sont toutes réelles > 0.
>>> Ecrire une fonction Gauss_Seidel(A, B, nb_iter, precision) sur le même modèle que Jacobi.
>>> Tester sur les matrices A1 et A2 puis comparer avec les systèmes équivalents de matrices respectives A
1
T
A
1
et A
2
T
A
2
.
Méthode de relaxation
C'est une généralisation de la méthode de Gauss-Seidel. On rajoute un paramètre ω qu'on va chercher à ajuster pour
diminuer le rayon spectral de P
1
A1 et ainsi accélérer la convergence. On choisit cette fois,
P = 1
ω D + L , A1 = 1
ω D + L A = 1
ω D + L (L + U + D) = 1 ω
ω D U
Pour ω = 1, c'est la méthode de Gauss-Seidel.
La méthode s'écrit
IPT_TP_méthodes itératives en algèbre linéaire_PCSI
- page 3 -
X
k+1
= ( 1
ω D + L)
1
(( 1 ω
ω D U)X
k
+ B) = (D + ωL)
1
((1 ω)D ωU)X
k
+ ωB)
ce qui donne en terme de composantes, les relations de récurrence :
x
i
(k+1)
= 1
a
i,i
( ω
j = 1
i 1
a
i, j
x
j
(k + 1)
ω
j = i
n
a
i, j
x
j
(k)
+ a
i, i
x
i
(k)
+ ωb
i
)
La méthode converge
si A est à diagonale strictement dominante et 0< ω 1
si A est symétrique à valeurs propres réelles > 0 (donc si A est de la forme B
T
B, B inversible) et 0< ω < 2
>>> Ecrire une fonction relaxation(A, B, w, nb_iter, precision) qui implémente la méthode de relaxation.
>>> Tester sur les matrices
A2, B2 et ω = 1,4
A3 = [[4, 5, 9] , [7, 1, 6] , [5, 2, 9]] , B3 = [4, 9, 3] , ω = 1
A3
T
A3 , A3
T
B et ω = 1
Recherche du paramètre ω
ωω
ω optimal
On suppose que A est de la forme B
T
B, B inversible de sorte que la méthode de relaxation converge pour 0 < ω < 2.
On veut tracer la courbe ω # ρ(P
1
A1) = ρ(I
n
P
1
A) où P = 1
ω D + L .
>>> Ecrire une fonction w_optimal(A, N) qui réalise un échantillonnage de N points ω dans ]0,2[ et calcule le rayon spectral
correspondant ρ(I
n
P
1
A).
(si A est bien de la forme voulue, on doit trouver ρ < 1 mais le calcul est possible pour A quelconque tant que P est
inversible).
Faire le tracé de la courbe ω # ρ(P
1
A1).
>>> Tester sur la matrice A2 et expliquer pourquoi on avait proposé la valeur ω = 1,4 plus haut.
Tester sur A3
T
A3 et trouver une valeur approchée du ω optimal. Appeler la fonction relaxation pour A3
T
A3 avec cette
valeur de ω et constater l'amélioration de la convergence.
Exercice 2
Etant donné une matrice carrée A dans M
n
() ou M
n
(), on cherche B tel que B
2
= A (B est une racine carrée de A).
L'existence et l'unicité de B ne sont pas garanties. C'est le cas cependant, si on suppose qu'on a les deux conditions :
A et B sont symétriques
les valeurs propres de A et B sont toutes strictement positives.
C'est le cas quand A est de la forme C
T
C avec C inversible (et on peut même supposer C triangulaire supérieure).
On suppose désormais que A est de cette forme. On veut déterminer B par une méthode itérative.
On s'inspire de la méthode utilisée dans pour trouver la racine carrée d'un réel positif a : x
n + 1
= 1
2 (x
n
+ a
x
n
) (c'est la
méthode de Newton attachée à la fonction f (x) = x
2
a).
On considère donc la suite de matrices définie par la relation de récurrence :
X
0
= I
n
, X
k + 1
= 1
2 (X
k
+ AX
k
1
)
On prouve qu'elle converge bien vers l'unique racine carrée de A qui est symétrique à valeurs propres > 0.
>>> Ecrire une fonction rac_carree(A, N, precision) qui calcule une approximation de B avec au plus N itérations et un test
d'arrêt de la forme ||A X
k
2
||
2
10
precision
.
Afficher l'écart final ||A X
k
2
||
2
au moment où on stoppe les itérations.
1 / 3 100%
Study collections
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !