Vous êtes sur la page 1sur 4

PCSI 803 Année 2013 - 2014

Lycée Déodat de Séverac Toulouse

TP n o 9 : Résolution de systèmes linéaires – Pivot de Gauss

Buts du TP

Implémenter et étudier la méthode du pivot de Gauss en Python

Utiliser les fonctions ad hoc en Python et Scilab

Dans ce TP, on s’intéresse à la résolution des systèmes linéaires d’équations de la forme :

où :

A ∈ M n (K) est donnée

B

X

M n,1 (K) est donnée

∈ M n,1 (K) est l’inconnue.

(S)

:

AX = B,

1 Matrices en Python

En Python, une matrice est simplement une liste de listes (c’est la liste de ses vecteurs-lignes).

La matrice M =

3

2

3

6

5

1

7

6

4

1

2

2

sera par exemple codée 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 résultat

6

Ainsi, on pourra donc utiliser tout ce que l’on connaît sur les listes afin de travailler au mieux avec les matrices. Par exemple,

Exercice 1. Écrire en Python une fonction taille(M) qui prend en entrée 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 précédente.

1

Exercice 2. Comment créer le plus simplement possible en Python la matrice M suivante ?

M =

1

11

21

2

12

22

3

13

23

.

.

.

.

.

.

.

.

.

10

20

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 modifie en place la matrice M donnée 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 méthode du pivot de Gauss pour la résolution d’un système d’équations du type (S), que l’on supposera de Cramer (il existe une et une seule solution à (S) ) :

On utilise la matrice augmentée M = A | b

On commence par mettre le système sous forme triangulaire :

Algorithme (Mise sous forme triangulaire). Entrée(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 augmentée )

Pour i de 1 jusqu’à n Faire Pour k de i + 1 à n 1 Faire

L k L k a k,i Fin Pour Fin Pour

a i,i L i

On effectue la méthode de la remontée :

On suppose que l’on a obtenu un système de Cramer triangulaire supérieur de la forme :

  α 11 x 1 + α 12 x 2 + ··· + α 1n x n

 

= β 1

α 22 x 2 + ··· + α 2n x n = β 2

.

.

.

α nn x n = β n

.

L’unique solution est donnée par :

    x n = β n

α

nn

i n 1, 1 ,

x i =

ii β i

1

α

j=i+1 α ij x j

n

2

Exercice 5. Coder la méthode du pivot de Gauss décrite ci-dessus.

Exercice 6. La tester avec le système suivant :

  x + 3y + 2z

2x +

= 7

y + 4z = 8

  x + 2y + 3z = 0.1

,

= 10 16 . Résoudre ce système à la main : que s’est-il passé ?

Exercice 7. Pour éviter cet écueil, on choisit à l’étape i le pivot de module maximal dans la colonne i à partir de la ligne i. Écrire une version modifiée de la méthode du pivot de Gauss prenant en compte cette amélioration. La tester avec le système précédent.

Indication : on pourra fabriquer une fonction pivotmax(A,i) qui prend en arguments une matrice A et un indice i, et retourne l’indice de la ligne du pivot maximal (en module) de la colonne i sur les lignes i et suivantes.

Cette méthode est alors appelée algorithme du pivot de Gauss avec recherche du pivot partiel.

3 Et en Python ?

numpy dispose d’une fonction solve dans la bibliothèque numpy.linalg pour résoudre les systèmes linéaires. On l’utilise de la manière 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 l’algorithme du pivot de Gauss avec recherche de pivot partiel.

Exercice 9. On considère les matrices M n suivantes :

M n =

1

(0)

2

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 chronométrant le temps nécessaire pour résoudre M n X = t (1,

{50, 100, 200, 400}, valider (ou invalider) le calcul de la complexité effectué auparavant.

, 1) pour n

L’illustrer graphiquement.

Comparer avec les commandes ad hoc en Python ou en Scilab.

4