TP n 10 – Systèmes linéaires et pivot de Gauss

Lycée Jean Bart – PCSI – Année 2013-2014 – 11 & 18 mars 2014
TP n010 – Systèmes linéaires et
pivot de Gauss
Objectifs du TP
L’objet de ce TP est l’étude des systèmes linéaires, et en particulier la méthode de résolution dite du pivot de
Gauss, qui permet de résoudre de manière systématique les systèmes de taille a priori quelconque.
Comme toujours :
ä N’oubliez pas de sauvegarder votre travail : pensez à enregistrer vos programmes dans votre dossier “Travail”
(où vous aurez pris soin de créer un sous-dossier “Informatique”). Faites en sorte que ces sauvegardes soient
organisées : par exemple, sauvegardez l’exercice 54 du TP 23 sous le nom tp23 ex54.py.
ä L’adresse électronique du site est :
www.pcsijbmath.sitew.fr
1. Commençons gentiment : les systèmes linéaires à deux équations et deux inconnues
1.1. Rappels.
Définition — Un système linéaire de deux équations aux deux inconnues x et y est un système
de la forme :
ax + by = B1
où a, b, c, d, B1 et B2 sont quatre réels.
cx + dy = B2
La forme matricielle de ce système linéaire est AX = B, où l’on a posé :
a b
x
B1
A=
; X=
; et B =
.
c d
y
B2
a b
Définition — On appelle déterminant de la matrice A =
le réel
c d
det A = ad − bc
Théorème — Avec les notations précédemment introduites, le système linéaire AX = B admet
une unique solution pour tout second membre B si et seulement si det A 6= 0.
Lorsque c’est le cas, l’unique solution de AX = B est le vecteur X = A−1 B, où A−1 désigne
l’inverse de la matrice A, c’est-à-dire :
1
d −b
A−1 =
det A −c a
1.2. Et maintenant, place à la programmation.
Le but de cette première partie est de construire un programme de résolution des systèmes linéaires à deux équations
et deux inconnues. A la lumière des rappels faits plus hauts, ceci exige de savoir :
1) comment définir une matrice 2 × 2 en Python ;
2) calculer le déterminant d’une matrice 2 × 2 ;
• •
•
3) calculer le produit d’une matrice
par un vecteur
.
• •
•
2
PCSI — Année 2013-2014 — Informatique: TP — 11 & 18 mars 2014
ä 1ère étape — Définir une matrice
en
Python. C’est très facile, et comme un petit exemple vaut mieux
1 2
qu’un long discours : la matrice A =
est définie par l’instruction
3 4
A = [[1, 2] , [3, 4]]
Vous avez évidemment reconnu une liste de listes. En fait, la matrice A est vue ici comme la “liste de ses lignes”.
Exercice 1. — Déclarez la matrice A en Python comme indiqué ci-dessus. Qu’obtenez-vous (essayez de prévoir
les résultats à l’avance) si vous tapez A [1] ? Et A [1, 1] ?
1
Exercice 2. — Comment déclarer en Python la matrice B =
?
−1
ä 2ème étape — Déterminant et inverse d’une matrice 2 × 2.
Exercice 3. — Ecrire une fonction determinant, qui retourne le déterminant d’une matrice carrée de taille
2.
Exercice 4. —
évidemment).
Ecrire une fonction inverse, qui retourne l’inverse de la matrice A (si elle est inversible,
ä 3ème étape — Multiplication d’une matrice 2 × 2 par une matrice colonne.
Exercice
qui reçoit comme paramètres une matrice carrée A =
5. — Ecrire une fonction
produitMC,
1 2
x
et une matrice colonne X =
, et qui retourne le produit AX. ∗
3 4
y
ä 4ème étape — A vous de jouer pour la conclusion.
Exercice 6. — En utilisant les fonctions précédemment définies, écrire un programme qui demande à l’utilisateur de saisir les coefficients a, b, c et d de la matrice A, ainsi que les coefficients B1 et B2 du second membre B,
et qui affiche la solution du système linéaire AX = B (si A est inversible).
3 1
x
1
Vérifiez que votre programme fonctionne correctement en résolvant le système :
=
.
5 2
y
−1
2. Un détour par la bibliothèque “numpy”
Comme vous le savez déjà, Python fonctionne avec des bibliothèques contenant des fonctions regroupées par
thème. Depuis le début de l’année, vous avez rencontré et utilisé la bibliothèque math qui contient entre autres
les fonctions usuelles et une valeur approchée de π ; la bibliothèque random contenant des fonctions liées à la
génération de nombres aléatoires (rand et randint notamment) ; la bibliothèque time qui contient, de manière
très surprenante, la fonction time, permettant (pour peu qu’on l’utilise en double exemplaire) de mesurer la durée
d’exécution d’un programme ou d’une partie de programme.
“Numpy” est une nouvelle bibliothèque, beaucoup plus vaste que les précédentes. Comme son nom peut le
laisser deviner, elle est en rapport avec un certain nombre de méthodes numériques concernant le calcul intégral,
les équations différentielles, ou encore (c’est ce qui nous intéresse aujourd’hui) l’algèbre linéaire. Les fonctions
relatives à chacun de ces thèmes sont contenues dans des “sous-bibliothèques”. Toutes les fonctions relatives à
l’algèbre linéaire sont ainsi contenues dans la (sous-)bibliothèque “numpy.linalg” ; on peut l’utiliser après avoir tapé
l’instruction
import numpy.linalg ;
∗. Qui est, rappelons-le, une matrice colonne.
PCSI — Année 2013-2014 — Informatique: TP — 11 & 18 mars 2014
3
Une fois ceci fait, la résolution d’un système devient un jeu d’enfant. Pour reprendre l’exemple de l’exercice 6, il
suffit de taper l’instruction :
numpy.linalg.solve(A, B) ;
après avoir défini A et B bien sûr. Faites-le, et vérifiez que vous obtenez effectivement le même résultat que
précédemment.
3. Résolution des systèmes linéaires à trois équations et trois inconnues
Exercice 7. — Résoudre
“à la main” les systèmes linéaires suivants
:


 2x + 2y − 3z = 2
 2x + 2y − 3z = 2
y − 6z = −3
−2x − y − 3z = −5
1)
2)


z = 1
6x + 4y + 4z = 16
Le but de l’exercice est évidemment de montrer qu’un système triangulaire † est beaucoup plus facile à résoudre
qu’un système quelconque ; et lorsque le système n’est pas triangulaire, le but est de s’y ramener.
Pour programmer la méthode mise en œuvre sur le deuxième système, il est indispensable de savoir comment
remplacer dans un système une ligne (disons Lj ) par une combinaison linéaire de Li et Lj .
Exercice 8. — Ecrire une fonction qui échange deux lignes d’une matrice A (de taille 3x3), et une fonction qui
remplace ‡ la ligne Li par la ligne Li + kLj (toujours dans une matrice 3x3). Ces fonctions seront respectivement
nommées :
def echangeLigne(A, i, j) :
...
et
def transvection(A, i, j, k) :
#Li ← Li + k.Lj
...


1 2 3
Par exemple, si A est la matrice A =  4 5 6 , vous devez obtenir :
7 8 9


4 5 6
+ comme résultat de echangeLigne(A,0,1) la matrice  1 2 3 
7 8 9


1 2
3
6 
+ comme résultat de transvection(A,2,0,-7) la matrice  4 5
0 −6 −12
Exercice 9. — A l’aide des fonctions définies dans le programme précédent, écrire un programme résolvant
un système linéaire à trois équations et trois inconnues par la méthode du pivot de Gauss.
†. C’est-à-dire un système dont la matrice est triangulaire supérieure ou inférieure
‡. On parle de transvection.