Vous êtes sur la page 1sur 2

TP MAPLE no12

Méthode du pivot de Gauss

25 avril 2009

Le but ici est d’implémenter la méthode du pivot de Gauss pour résoudre un système de Cramer, et
d’étudier le problème de la résolution numérique. On utilisera le package LinearAlgebra et la création
d’une matrice se fera à l’aide de la commande

> with(LinearAlgebra):
> A:=Matrix([[1,-1,-1],[-2,2,3],[2,-2,-3]]);
On pourra consulter le contenu de l’aide concernant la commande RowOperation .

1 Résolution d’un système de Cramer


Dans cette partie, on cherche à résoudre l’équation AX = Y où A ∈ GLn (R)et Y ∈ Mn,1 (R) par la
méthode du pivot de Gauss.
Question 1.1 Écrire une procédure
pivotcherchega:=proc(A::Matrix,k::integer)
qui en entrée prend une matrice A ∈ GLn (R) de la forme
 
a1,1 a1,2 . . . . . . . . . . . . . . . a1,n
 0 a2,2 a2,3 . . . . . . . . . a2,n 
 .. .. 
 
.. ..
 .
 . . . 
 0 ... 0 ak,k . . . ak,n 
 
 . .. .. .. 
 .. . . . 
0 ... 0 an,k . . . an,n

et un entier k ∈ {1, · · · , n} et retourne i, plus petit entier de {k, · · · , n} tel que ai,k 6= 0.

Question 1.2 Écrire une procédure


pivotelimga:=proc(A::Matrix,Y::Matrix,k::integer)
qui en entrée prend une matrice A ∈ GLn (R) de la forme
 
a1,1 a1,2 . . . . . . . . . . . . . . . a1,n
 0 a2,2 a2,3 . . . . . . . . . a2,n 
 .. .. 
 
.. ..
 .
 . . . 
 0 ... 0 ak,k . . . ak,n 
 
 . .. .. .. 
 .. . . . 
0 ... 0 an,k . . . an,n

une matrice Y ∈ Mn,1 (R) et un entier k ∈ {1, · · · , n} et retourne la liste [B,Z] où BX = Z est le
système équivalent au système AX = Y obtenu après une étape du pivot de Gauss.

1
Question 1.3 Écrire une procédure
triangsolvega:=proc(A::Matrix,Y::Matrix)
qui en entrée prend une matrice A ∈ GLn (R) triangulaire supérieure et une matrice Y ∈ Mn,1 (R) et qui
retourne l’unique solution X de l’équation AX = Y .
Question 1.4 Écrire une procédure
gausssolvega:=proc(A::Matrix,Y::Matrix)
qui en entrée prend une matrice A ∈ GLn (R) et un vecteur Y ∈ Mn,1 (R) et retourne l’unique solution X
du système AX = Y .

2 Résolution numérique
Question 2.1 Méthode du pivot partiel
(a) En utilisant gausssolvega, résoudre le système linéaire
1, 0 · 10−20 x +1, 0 · y

= 1, 0
1, 0 · x +1, 0 · y = 2, 0
puis le système linéaire équivalent

1, 0 · x +1, 0 · y = 2, 0
1, 0 · 10−20 x +1, 0 · y = 1, 0
Que remarquez-vous ? Quelle est la bonne solution ? Expliquez ce qui s’est passé.
(b) Pour éviter ce genre de problème, on modifie l’algorithme de recherche d’un pivot de la manière
suivante : au lieu de se contenter de chercher un pivot non nul dans la colonne k, on cherche le
pivot de cette colonne ayant la plus grande valeur absolue.
Écrire les procédures :
pivotcherchepp:=proc(A::Matrix,k::integer) et
gausssolvepp:=proc(A::Matrix,Y::Matrix)
mettant en oeuvre cet algorithme.
Question 2.2 Conditionnement d’un système linéaire
(a) En utilisant gausssolvega, résoudre les systèmes linéaires :


 10a +7b +8c +7d = 32
7a +5b +6c +5d = 23


 8a +6b +10c +9d = 33
7a +5b +9c +10d = 31

puis le système linéaire perturbé, où les seconds membres ont été (( très légèrement )) modifiés :


 10a +7b +8c +7d = 32 + 1/10
7a +5b +6c +5d = 23 − 1/10


 8a +6b +10c +9d = 33 + 1/10
7a +5b +9c +10d = 31 − 1/10

Que remarquez vous ?


(b) Définir la matrice de Hilbert A de taille 10 × 10 : par :
1
∀i, j ∈ {1, · · · , 10} ai,j =
i+j
et la matrice Y ∈ Mn,1 (R) :
∀i ∈ {1, · · · , 10} yi = 1
puis résoudre le système AX = Y en utilisant successivement :
gausssolvega(A,Y)
gausssolvega(map(evalf,A),map(evalf,Y))
gausssolvepp(map(evalf,A),map(evalf,Y))
Répétez les deux derniers calculs en augmentant la variable Digits.