Vous êtes sur la page 1sur 4

PCSI 803 Lyce Dodat de Sverac

Anne 2013 - 2014 Toulouse


TP n
o
9 : Rsolution de systmes linaires Pivot de Gauss
Buts du TP
Implmenter et tudier la mthode du pivot de Gauss en Python
Utiliser les fonctions ad hoc en Python et Scilab
Dans ce TP, on sintresse la rsolution des systmes linaires dquations de la forme :
(S) : AX = B,
o :
A M
n
(K) est donne
B M
n,1
(K) est donne
X M
n,1
(K) est linconnue.
1 Matrices en Python
En Python, une matrice est simplement une liste de listes (cest la liste de ses vecteurs-lignes).
La matrice M =
_
_
_
_
_
3 6 7 1
2 5 6 2
3 1 4 2
_
_
_
_
_
sera par exemple code sous la forme :
>>> ligne1=[3,6,7,1]
>>> ligne2=[2,5,6,2]
>>> ligne3=[3,1,4,2]
>>> M=[ligne1,ligne2,ligne3]
>>> M
[[3, 6, 7, 1], [2, 5, 6, 2], [3, 1, 4, 2]]
>>> M[1][2] #expliquer le rsultat
6
Ainsi, on pourra donc utiliser tout ce que lon connat sur les listes an de travailler au mieux avec
les matrices. Par exemple,
Exercice 1. crire en Python une fonction taille(M) qui prend en entre une matrice M et qui
renvoie sa taille (m, n), o m est le nombre de lignes de M et n son nombre de colonnes.
La tester sur la matrice M prcdente.
1
Exercice 2. Comment crer le plus simplement possible en Python la matrice M suivante ?
M =
_
_
_
_
_
1 2 3 . . . 10
11 12 13 . . . 20
21 22 23 . . . 30
_
_
_
_
_
Exercice 3. crire une fonction echange(M,i,j) qui change les lignes L
i
et L
j
de la matrice M
(la fonction echange ne renvoie rien : elle modie en place la matrice M donne en argument).
Exercice 4. crire une fonction transvection(M,i,j,x) qui remplace la ligne L
j
de la matrice
M par la ligne L
j
xL
i
.
2 Pivot de Gauss
On rappelle le principe de la mthode du pivot de Gauss pour la rsolution dun systme dquations
du type (S), que lon supposera de Cramer (il existe une et une seule solution (S) ) :
On utilise la matrice augmente M = A | b
On commence par mettre le systme sous forme triangulaire :
Algorithme (Mise sous forme triangulaire).
Entre(s): une matrice M M
n,n+1
(K) pour laquelle on suppose que les pivots qui apparaissent
sont tous non nuls
Sortie(s): la matrice M mise sous forme triangulaire (du moins sa partie non augmente...)
Pour i de 1 jusqu n Faire
Pour k de i + 1 n 1 Faire
L
k
L
k

a
k,i
a
i,i
L
i
Fin Pour
Fin Pour
On eectue la mthode de la remonte :
On suppose que lon a obtenu un systme de Cramer triangulaire suprieur de la forme :
_

11
x
1
+
12
x
2
+ +
1n
x
n
=
1

22
x
2
+ +
2n
x
n
=
2
.
.
.

nn
x
n
=
n
.
Lunique solution est donne par :
_

_
x
n
=

n

nn
i n 1, 1, x
i
=
1

ii
_

i

n

j=i+1

ij
x
j
_
2
Exercice 5. Coder la mthode du pivot de Gauss dcrite ci-dessus.
Exercice 6. La tester avec le systme suivant :
_

_
x + 3y + 2z = 7
2x + y + 4z = 8
x + 2y + 3z = 0.1
,
o = 10
16
.
Rsoudre ce systme la main : que sest-il pass ?
Exercice 7. Pour viter cet cueil, on choisit ltape i le pivot de module maximal dans la colonne
i partir de la ligne i. crire une version modie de la mthode du pivot de Gauss prenant en
compte cette amlioration. La tester avec le systme prcdent.
Indication : on pourra fabriquer une fonction pivotmax(A,i) qui prend en arguments une matrice
A et un indice i, et retourne lindice de la ligne du pivot maximal (en module) de la colonne i sur
les lignes i et suivantes.
Cette mthode est alors appele algorithme du pivot de Gauss avec recherche du pivot partiel.
3 Et en Python?
numpy dispose dune fonction solve dans la bibliothque numpy.linalg pour rsoudre les systmes
linaires. On lutilise de la manire suivante :
>>> from numpy.linalg import solve
>>> solve([[10**(-16),3,2],[2,1,4],[-1,2,3]],[[7],[8],[0.1]])
array([[ 3.7 ],
[ 2.68],
[-0.52]])
4 Et en Scilab?
On crira en Scilab par exemple :
-->A = [10^(-16) 3 2;2 1 4;-1 2 3]
A =
1.000D-16 3. 2.
2. 1. 4.
- 1. 2. 3.
--> B = [7;8;0.1]
B =
3
7.
8.
0.1
-->A\B
ans =
3.7
2.68
- 0.52
5 Complexit
Exercice 8. valuer la complexit de lalgorithme du pivot de Gauss avec recherche de pivot partiel.
Exercice 9. On considre les matrices M
n
suivantes :
M
n
=
_
_
_
_
_
_
_
_
_
_
_
2 1 (0)
1 2 1
.
.
.
.
.
.
.
.
.
1 2 1
(0) 1 2
_
_
_
_
_
_
_
_
_
_
_
Coder une fonction M(n) qui renvoie la matrice correspondante de taille n.
Exercice 10. En chronomtrant le temps ncessaire pour rsoudre M
n
X =
t
(1, . . . , 1) pour n
{50, 100, 200, 400}, valider (ou invalider) le calcul de la complexit eectu auparavant.
Lillustrer graphiquement.
Comparer avec les commandes ad hoc en Python ou en Scilab.
4