Vous êtes sur la page 1sur 4

Département de Mathématiques Préparation à l’agrégation de Mathématiques

Université de Nantes TP de modélisation - Option B

TP 2 : Résolution de systèmes linéaires, méthodes directes et


itératives

Ce TP s’appuie en partie sur le texte de la session 2017 portant sur un réseau d’antennes.

On s’intéresse dans ce TP à la résolution d’un système linéaire. On rappelle le principe de quelques méthodes directes
et on propose d’utiliser les fonctions Scilab ou Python correspondantes. On rappelle également le principe de quelques
méthodes itératives et on propose de programmer celle présentée dans le texte.

Soient A une matrice carrée de taille n × n et b un vecteur de taille n. On souhaite résoudre le système linéaire Ax = b
où x est le vecteur inconnu de taille n. On est assuré de l’existence et l’unicité de la solution si l’une des conditions
équivalentes suivantes est remplie :
1. A est inversible,
2. rg(A) = n,
3. le système homogène Ax = 0 admet pour unique solution la solution nulle.
Les méthodes directes fournissent la solution du système en un nombre fini d’étapes contrairement aux méthodes
itératives qui fournissent la solution en un nombre théoriquement infini d’étapes.
Le choix des méthodes dépend :
— de l’efficacité théorique de l’algorithme,
— du type de matrice (creuse, symétrique définie positive...),
— des capacités de stockage et de l’architecture de l’ordinateur.

1 Conditionnement
La résolution d’un système linéaire conduit à l’introduction d’erreurs numériques d’arrondi. Le conditionnement de la
matrice A permet de connaı̂tre la sensibilité du système aux perturbations de données.

Définition 1.1. Le conditionnement de A ∈ Rn×n est

K(A) = kAkp kA−1 kp , (1)

où k.kp est la norme matricielle subordonnée.

Généralement on considère p = 1, 2 ou ∞. Plus le conditionnement est grand, plus le système est sensible aux
perturbations.

2 Méthodes directes, LU et Choleski


2.1 Décomposition LU
On rappelle le principe et l’algorithme de la décomposition LU. Il s’agit de décomposer la matrice A ∈ Rn×n comme
le produit d’une matrice triangulaire inférieure L ∈ Rn×n et d’une matrice triangulaire supérieure U ∈ Rn×n . Les
coefficients diagonaux Lii , i = 1, . . . , n, de la matrice L sont tous égaux à 1 et Uii 6= 0.

1
Algorithme :
— Initialisation : L = In (In désigne la matrice identité de taille n × n), U = A
— Pour k = 1 à n − 1 faire
Si Uk,k = 0, le pivot est nul, la décomposition LU n’existe pas
Pour i = k + 1 à n faire
Lik = Uik /Ukk
Uij = Uij − Lik ∗ Ukj pour j allant de k + 1 à n
Uik = 0
Fin pour
Fin pour
Remarques : 
Ly = b
— Nécessite d’implémenter un algorithme de descente-remontée : Ax = b ⇔ LU x = b ⇔ .
Ux = y
Il s’agit donc d’un algorithme permettant de résoudre d’une part un système de la forme Ly = b avec L une
matrice triangulaire inférieure et d’autre part un système de la forme U x = y avec U une matrice triangulaire
supérieure.
2
— Coût de calcul : le nombre d’opérations nécessaires est n3 .
3

2.2 Méthode de Choleski


On s’intéresse ici au cas où A est symétrique définie positive.
Théorème : A est symétrique définie positive si et seulement si ∃L triangulaire inférieure avec des éléments diagonaux
strictement positifs telle que A = LLT .
√ Ai1
q Pi−1 2
On peut de plus montrer que : L11 = A11 , puis ∀ i > 1 on a Li1 = L11 et Lii = Aii − k=1 Lik et enfin ∀ j > i
 Pi−1 
1
on a Lji = Lii Aji − k=1 Lik Ljk .
Remarques :
— Nécessite d’implémenter un algorithme de descente-remontée.
n3
— Coût de calcul : le nombre d’opérations nécessaires est .
6

3 Application : texte de la session 2017


1. Lire le texte de la session 2017 portant sur le réseau d’antennes. On ne traitera pas dans ce TP les sous-sections
2.2 (solveur direct) et 3.3 (produit matrice/vecteur).
2. Considérer l’exemple de la section 4. Ecrire les matrices A et P , ainsi que le vecteur π (défini dans la section
2.1).
Remarque : on pourra utiliser le vecteur tk pour implémenter efficacement A, on pourra utiliser la fonction eye
sous Scilab ou avec numpy sous Python pour implémenter efficacement P , et on pourra utiliser la fonction
ones sous Scilab ou avec numpy sous Python pour implémenter π.

Problème complet, méthodes directes classiques et fonctions Scilab ou Python


3. Evaluer le conditionnement de la matrice A à l’aide de la fonction Scilab cond ou de la fonction linalg.cond de
numpy sous Python.
4. En Scilab, utiliser les fonctions LU (qui donne, si elle existe, la décomposition LU d’une matrice A) et chol (qui
donne, si elle existe, la décomposition de Choleski d’une matrice A).
Sous Python, utiliser les fonctions lu de scipy.linalg et cholesky de numpy.linalg.
5. Programmer un algorithme de descente-remontée pour résoudre le système Ax = π, dans le cas du problème
complet.
6. Vérifier votre résultat.

2
Problème du réseau partiel, méthode itérative proposée dans le texte
7. Programmer le solveur itératif proposé dans la sous-section 3.2 du texte pour résoudre le système P AP x = P π
sous la contrainte P x = P .
8. Mettre ce programme sous la forme d’une fonction, afin de pouvoir le réutiliser facilement pour la seconde
approche.
9. Le théorème 3 du texte vous semble-t-il vérifié ?

Graphique
10. Sous Scilab, utiliser la fonction plot pour représenter, pour chaque approche, les puissances nominales calculées
x et la puissance effective Ax en fonction du numéro de l’antenne (comme sur la figure 1 du texte).
Sous Python, utiliser la fonction plot de matplotlib.pyplot.

4 Méthodes itératives classiques - Gauss-Seidel et Jacobi


4.1 Principe de ces méthodes itératives
Le principe de ces méthodes itératives est de construire une suite convergente de vecteurs x(k) telle que

x = lim x(k) . (2)


k→∞

En théorie, il faudrait arrêter le calcul à la première itération n telle que

kx(n) − xk < ε, (3)

pour une tolérance ε donnée. En pratique, x n’étant pas connu, il faut trouver un critère plus commode.
Principe général : on décompose A sous la forme

A = P − N, (4)

où P est une matrice inversible (facile à inverser). Connaissant x(0) on calcule x(k) pour k ≥ 1 en résolvant

P x(k+1) = N x(k) + b, k ≥ 0. (5)

On constate que cette méthode converge si et seulement si le rayon spectral de P −1 N vérifie ρ(P −1 N ) < 1.
On considère ici les méthodes :
— de Jacobi : avec P = D et N = D − A où D est la matrice diagonale composée des éléments diagonaux de A,
— de Gauss-Seidel : avec P = D − E et N = F où E est la matrice triangulaire inférieure telle que eij = −aij
si i > j, eij = 0 si i ≤ j et F est la matrice triangulaire supérieure telle que fij = −aij si j > i et fij = 0 si
j ≤ i.

4.2 Applications
1. Programmer les méthodes de Jacobi et de Gauss-Seidel, sous forme de fonctions.
2. Sont-elles convergentes pour le problème complet Ax = π ? Si oui, comparer avec les résultats des méthodes
directes.
3. Peut-on les utiliser pour le problème du réseau partiel ?


1 2 −2
4. Tester-les sur d’autres exemples, comme A1 x = b1 avec A1 =  1 1 1  et b1 = (1 1 1)T et A2 x = b2
2 2 1
 
4 −1 −1
avec A2 =  −2 6 1  et b2 = (3 9 − 6)T .
−1 1 7
5. Evaluer leur vitesse de convergence.

3
5 Rappel : méthode du gradient conjugué
Nous rappelons ici la méthode du gradient conjugué, dont le solveur itératif proposé dans le texte est inspiré.

Considérons une matrice A ∈ Rn×n symétrique définie positive. La résolution du système Ax = b revient à la
détermination de x ∈ Rn minimisant la quadratique
1
Φ(y) = y T Ay − y T b. (6)
2
En effet le gradient de Φ s’écrit
1
∇Φ(y) = (AT + A)y − b = Ay − b, (7)
2
car A est symétrique.
Par conséquent, si ∇Φ(x) = 0 alors x est une solution du système initial.
Le problème est donc de déterminer le minimiseur x ∈ Rn de Φ en partant d’un point x(0) ∈ Rn , ce qui revient à
déterminer les directions de déplacement qui permettent de se rapprocher le plus possible de la solution x.
On doit effectuer un pas à partir de x(0) le long d’une direction p(0) , puis fixer le long de celle-ci un nouveau point x(1)
à partir duquel on itère le procédé jusqu’à convergence.
Ainsi à l’étape k, x(k+1) est déterminé par :

x(k+1) = x(k) + αk p(k) , (8)

où αk est la valeur qui fixe la longueur du pas le long de p(k) .


Algorithme :
— Initialisation : x(0) ∈ Rn étant donné, on pose r(0) = b − Ax(0) et p(0) = r(0) .
— Étape k :
(p(k) )T r(k)
αk = (k) T (k) ,
(p ) Ap
x(k+1) = x(k) + αk p(k) ,
r(k+1) = r(k) − αk Ap(k) ,
(Ap(k) )T r(k+1)
βk = ,
(Ap(k) )T p(k)
p(k+1) = r(k+1) − βk p(k) .

Vous aimerez peut-être aussi