RESOLUTION DE SYSTEMES LINEAIRES : METHODE DU PIVOT DE GAUSS : But

publicité
RESOLUTION DE SYSTEMES LINEAIRES :
METHODE DU PIVOT DE GAUSS
But : Mettre en place la résolution d’un système linéaire par la méthode du pivot de Gauss (ou
Gauss-Jordan). Nous nous contenterons de résoudre des systèmes admettant une unique
solution. (de tels systèmes sont appelés systèmes de Cramer, mais ce mot est hors-programme)
PREMIERE PARTIE : RESOLUTION A LA MAIN
 –x1 – 2x2 – x3 = –1
1) On considère le système (S1) suivant :  2 x1 + x2 + x3= –4
 4 x1 + 2 x2 – 5 x3 = –8
a) Résoudre ce système en utilisant la méthode du pivot de Gauss en notant soigneusement les
opérations élémentaires utilisées.
 x1 
b) Si on pose X =  x2 , le système(S1) est équivalent à AX = B avec : A =
 x3 
et B =
c) Les opérations élémentaires ont en fait été effectuées sur la matrice M1 appelée ……………………
M1 =
2)
2x + y – z + t = 12
 8x
+4 y + 2z – 3t = 27
On considère le système (S ) suivant :  –6x – y + 5z + 4t = –17
 2x + 5y + 2z – t = 2
2
a) La matrice M2 correspondant à ce système est :
M2 =
b) Résoudre ce système en utilisant la méthode du pivot de Gauss en notant soigneusement
les opérations élémentaires utilisées.
c) Dans quels cas a-t-on eu besoin de permuter des lignes ?
3) a) Quelles sont les deux grandes étapes de ces résolutions de système ?
b) Quelles opérations élémentaires ont été utilisées dans ces deux grandes étapes ?
DEUXIEME PARTIE : RAPPELS SUR L’UTILISATION DES LISTES 2D
En Python, une matrice est simplement une liste de liste. Par exemple, la matrice :
 4 3 -1 5 
N =  -8 4 5 6  sera codé : N = [ [4 , 3 , –1 , 5] , [–8 , 4 , 5 , 6] , [1 , 6 ,–3 , 5]]
 1 6 -3 5 
Sans utiliser votre ordinateur, écrire les réponses renvoiées dans la console pour les requêtes
suivantes :
>>>> N[2][1]
……………………………………………………………………………………………………………
>>>> N[0]
……………………………………………………………………………………………………………
>>>> N
……………………………………………………………………………………………………………
>>>> len(N)
…………………………………………………………………………………………………………….
Comment récupérer le nombre de colonnes de la matrice ?
>>>> [0] × len(N)
…………………………………………………..
…………………………………………………………………………………………………………….
On définit la fonction affiche ainsi :
On obtient l’affichage suivant sur la console
def affiche(matrice):
>>>>affiche(N)
…………………………….
nbLignes=len(matrice)
…………………………….
for i in range(nbLignes):
…………………………….
print(matrice[i])
TROISIEME PARTIE : MISE EN PLACE DE L’ALGORITHME DU PIVOT DE GAUSS
I.
CAS D’UN SYSTEME TRIANGULAIRE
1) On considère un système triangulaire :
Ecrire la matrice augmentée M
(avec les coefficients
M=
diagonaux non nuls)
On a alors :
xn = ………
xn–1 = ………………………………….
De manière générale, pour
xn–2 = ………………………………………………………
xi = ………………………………………………..……………………
,
2) a) Compléter la fonction suivante qui prend en argument une matrice M qui en pratique
correspondra à un système triangulaire, et qui renvoie le vecteur X solution de ce
système :
def remonter (M) :
nbLignes=………………………
X=…………………………………………
 on crée un vecteur ligne X de la bonne taille ne contenant que des zéros
X[nbLignes-1]= ………………………
for i in range (nbLignes–2, ………… , …………) :  i désignera un numéro de LIGNE
X[i]= ………………………
for j in range (………………………………) :  j désignera un numéro de COLONNE
X[i] =………………………
X[i]=X[i]/M[i][i]
return(……)
b) Créer un programme nommé Gauss_VotreNom et y écrire cette fonction.
Tester votre programme avec le système (S3) suivant dont l’unique solution est (1 ; –1 ; 2 ; 4)
 3x


1
– x2 + 2 x3 – x4 = 4
x2+ x3 – 5 x4= –19
–2 x3 – x4= –8
x4 = 4
(on notera M3 la matrice augmentée associée)
II.
TRIANGULARISATION DU SYSTEME
1) LES OPERATIONS ELEMENTAIRES
a) Dans la première partie, pour « triangulariser » le système, on a utilisé deux types
d’opération élémentaires : les transpositions (échanges de lignes) et les transvections.
b) Compléter l’en-tête (variable) de deux fonctions correspondantes. (Attention : Ces
fonctions ne renvoient rien mais modifient la matrice M)
def transposition(…………………………………………….)
def transvection(…………………………………………….)
c) Ecrire dans votre programme le corps des deux fonctions dont vous avez écrit l’en-tête
Vous testerez évidemment vos fonctions, avec la matrice M3 par exemple.
2) TRIANGULARISATION SANS ECHANGE
a) On suppose pour l’instant que pour le système que l’on cherche à résoudre, aucune
permutation de ligne n’est nécessaire pour triangulariser le système.
Dans le même programme, écrire une fonction triangulariserSansEchange qui prend en
paramètre une matrice M correspondant à un système, et qui la transforme en une
matrice correspondant à un système triangulaire équivalent.
Tester votre fonction avec le système (S1) de la première partie.
b) SANS UTILISER L’ORDINATEUR, dire ce qui va se passer si vous testez votre fonction
avec le système (S2) de la première partie ?
…………………………………………………………………………………………………………………………………….
……………………………………………………………………………………………………………………………………
3) TRIANGULARISATION AVEC ECHANGE
a) Écrire une fonction lignePivot(M , c) qui recherche un pivot non nul dans la matrice M sur
la colonne d’indice c.
Cette fonction doit renvoyer le numéro de la ligne du premier pivot non nul. Il s’agit donc
de renvoyer le premier numéro de ligne supérieur ou égal au numéro de la colonne tel
que M[numLigne][numColonne]  0.
 40 30
Ex : Si M =  0 6
07
-1
5
-3
5
5
6
5
-2



lignePivot (M,1) doit renvoyer ………
b) Ecrire une fonction triangulariser qui prend en paramètre une matrice M correspondant
à un système, et qui la transforme en une matrice correspondant à un système
triangulaire équivalent. Cette fonction doit gérer les cas où des échanges sont
nécessaires.
III.
RESOLUTION DU SYSTEME
Ecrire une fonction pivotGauss qui prend en argument une matrice M correspondant à un
système dit « de Cramer » et qui renvoie l’unique vecteur X solution de ce système.
Tester votre fonction avec les deux systèmes (S1) et (S2) de la première partie et vérifier
que vous retrouvez bien les mêmes solutions qu’à la main.
IV. APPLICATION : RESEAU EN ELECTROCINETIQUE
On considère le circuit suivant où les trois lois
des mailles et deux lois des nœuds s’écrivent :
E = R1 i1 +R2 i2
R2 i2 = R3 i3 +R4 i4
R4 i4 = R5 i5 +R6 i5
i1 = i2 +i3
i3 = i4 +i5
Les valeurs des paramètres E et R sont respectivement :
E = 5V, R1 = 100 , R2 = R3 = 220 , et R4 = R5 = R6 = 100  .
Déterminer la valeur des cinq courants.
QUATRIEME PARTIE : CHOIX DU PIVOT
 10–17x + y = 1
1) Tester votre fonction pivotGauss sur le système (S4) suivant : 
 x + y = 2
On obtient …………………………………………………………………………………………………………………….
Le résultat obtenu est-il bien solution du système ? ................................................................................
Tachons de comprendre ce résultat surprenant :
 10–4x + y = 1
2) Considérons le système (S4) : 
 x + y = 2
a) Résoudre ce système de manière exacte (à la main) en suivant l’algorithme
programmé dans le III.
b) On considère dans cette question que les calculs se font avec 4 chiffres significatifs
(les suivants étant tronqués). Exécuter de nouveau à la main les étapes de
l’algorithme avec cette nouvelle information. Que constatez-vous ?
 x + y = 2
3) Considérons le système équivalent à (S4) suivant : 
–4
 10
x+y=1
a) Avec la même précision qu’au 2)b), exécuter de nouveau à la main les étapes de
l’algorithme sur ce nouveau système.
b) Que remarquez-vous comme différences avec le 2)?
Pour minimiser les erreurs d’arrondi (inhérentes au type float), il faut, pour chaque colonne,
choisir un pivot maximal en valeur absolue. Cette méthode s’appelle la méthode du pivot partiel.
4)
a) Ouvrir un nouveau programme nommé pivotGaussOptimise_VotreNom.
b) Copier votre ancien programme dans ce nouveau programme.
c) Faire les modifications nécessaires pour tenir compte de cette recherche du pivot
maximal.
d) Le résultat obtenu pour le système donné en 1) est-il moins surprenant cette fois ?
CINQUIEME PARTIE : COMPLEXITE DE CET ALGORITHME
On note n le nombre de lignes du système étudié.
1) On considère le système échelonné suivant :
Voici un algorithme permettant de résoudre ce système par la méthode du pivot de Gauss, en
prenant en compte le décalage d’indice en Python :
Pour i descendant de n-1 à 0 faire :
Pour j descendant de n-1 à i+1
yi ← yi – ai,jxj
Fin Pour
y
xi ← a i
i,i
Fin Pour
Déterminer le nombre d'additions (ou soustractions) puis le nombre de multiplications (ou
divisions) nécessaires à cette résolution en fonction du nombre n de lignes du système.
2) Voici l'algorithme obtenu pour triangulariser un système par la méthode du pivot maximal :
a) Déterminer, toujours en fonction de n, le nombre de comparaison nécessaires afin de
trouver les pivots maximaux.
b) Déterminer ensuite, en fonction de n, le nombre d'additions puis le nombre de
multiplications nécessaires pour triangulariser un système par la méthode du pivot
maximal.
3) Justifier alors que la complexité de la résolution d'un système linéaire par la méthode du
pivot maximal est équivalente à n3. Qu'est-ce que cela signifie ?
4) a) Il existe un algorithme de résolution de tels système différent (algorithme de Strassen)
dont la complexité est de l’ordre de n2,807 .
Sachant que mon processeur peut effectuer 4,6×109 opérations par seconde, compléter
le tableau suivant.
Taille des données (nombre
de lignes de la matrice)
Ordre de grandeur du temps
d’exécution avec l’algorithme
que vous avez programmé
Ordre de grandeur du temps
d’exécution avec l’algorithme
de Strassen
1000
10 000
100 000
c) La « petite » différence de complexité entre ces deux algorithmes a-t-elle une incidence
notable ?
SIXIEME PARTIE : VU EN CONCOURS !
EXTRAIT CCP 2015
(i=0)
ANNEXE :
Téléchargement