METHODE DU PIVOT DE GAUSS février 2016 BTS1
Exemple:
Résoudre le sustème:
1 x + 2 y + 2 z = 2
x + 3 y - z = - 2
3 x + 5 y + 8 z = 8
REPONSE:
1 est le premier pivot , le second sera aussi 1.
On peut considérer pour éviter d'écrire les x , y, z et
les seconds membres que l'on a le système qui est
caractérisé par le tableau:
A = [ [ 1 , 2 , 2 , 2 ] , [ 1 , 3, - 1, - 2 ] , [ 3 , 5 , 8 , 8 ] ]
Dans chacune des listes de A le dernier terme est un second membre.
L'intérêt de cela est de manipuler des listes de listes.
Cela permet d'utiliser Python 2.7 pour triangulariser les systèmes.
import decimal
def gauss():
A=[[1,2,2,2],[1,3,-1,-2],[3,5,8,8]]
for line in A:
print line
B=[]
C=[]
D=[]
for i in range(4):
B.append(A[1][i]-(A[0][i]*1./A[0][0])*A[1][0])
C.append(A[2][i]-(A[0][i]*1./A[0][0])*A[2][0])
print " ------c'est-à-dire: ------- "
W=[A[0],B,C]
for line in W:
print line
for i in range(4):
D.append(C[i]-(B[i]*1./B[1])*C[1])
print " -----On a triangularisé le système en ------"
for line in [A[0],B,D]:
print line
print " Le système est :"
print A[0][0],"x","+",(A[0][1]),"y","+",(A[0][2]),"z","=",A[0][3]
print " ",B[1],"y","+",(B[2]),"z","=",B[3]
print " ",D[2],"z","=",D[3]
print " Donc --------"
z=D[3]*1./D[2]
print " z = ", z
y=(B[3]-B[2]*z)*1./B[1]
print " y = ", y
x=(A[0][3]-A[0][2]*z-A[0][1]*y)*1./A[0][0]
print " x = ", x
print " Conclusion "
print "( x , y , z )= ","(",x,",",y,",",z,")"
On obtient :
>>> gauss2()
Donner la liste des coefficients de la première ligne[1,2,2,2]
Donner la liste des coefficients de la seconde ligne[1,3,-1,-2]
Donner la liste des coefficients de la troisième ligne[3,5,8,8]
[1, 2, 2, 2]
[1, 3, -1, -2]
[3, 5, 8, 8]
------c'est-à-dire: -------
[1, 2, 2, 2]
[0.0, 1.0, -3.0, -4.0]
[0.0, -1.0, 2.0, 2.0]
-----On a triangularisé le système en ------
[1, 2, 2, 2]
[0.0, 1.0, -3.0, -4.0]
[0.0, 0.0, -1.0, -2.0]
Le système est :
1 x + ( 2 )y + ( 2 ) z = 2
1.0 y + ( -3.0 ) z = -4.0
-1.0 z = -2.0
Donc --------
z = 2.0
y = 2.0
x = -6.0
Conclusion
( x , y , z )= ( -6.0 , 2.0 , 2.0 )
>>>
--------------------------------------------------------------------
EXERCICE 2:
Modifier l'algorithme pour qu'il demande la saisie su système.
----------------------------------------------------------------------------
REPONSE:
Attention: Il se peut que vos choix aboutissent à un pivot nul.
Alors le programme ne marchera pas.
Dans ce cas on change l'ordre des lignes du système
On peut même être amené à changer l'ordre des inconnues.
import decimal
def gauss2():
L0=input("Donner la liste des coefficients de la première ligne")
L1=input("Donner la liste des coefficients de la seconde ligne")
L2=input("Donner la liste des coefficients de la troisième ligne")
A=[L0,L1,L2]
for line in A:
print line
B=[]
C=[]
D=[]
for i in range(4):
B.append(A[1][i]-(A[0][i]*1./A[0][0])*A[1][0])
C.append(A[2][i]-(A[0][i]*1./A[0][0])*A[2][0])
print " ------c'est-à-dire: ------- "
W=[A[0],B,C]
for line in W:
print line
for i in range(4):
D.append(C[i]-(B[i]*1./B[1])*C[1])
print " -----On a triangularisé le système en ------"
for line in [A[0],B,D]:
print line
print " Le système est :"
print A[0][0],"x","+ (",A[0][1]," )y","+ (",A[0][2]," )z","=",A[0][3]
print " ",B[1],"y","+ (",B[2]," )z","=",B[3]
print " ",D[2],"z","=",D[3]
print " Donc --------"
z=D[3]*1./D[2]
print " z = ", z
y=(B[3]-B[2]*z)*1./B[1]
print " y = ", y
x=(A[0][3]-A[0][2]*z-A[0][1]*y)*1./A[0][0]
print " x = ", x
print " Conclusion "
print "( x , y , z )= ","(",x,",",y,",",z,")"
Par exemple cela donne:
>>> gauss2()
Donner la liste des coefficients de la première ligne[1,2,3,8]
Donner la liste des coefficients de la seconde ligne[2,5,2,3]
Donner la liste des coefficients de la troisième ligne[4,2,1,-1]
[1, 2, 3, 8]
[2, 5, 2, 3]
[4, 2, 1, -1]
------c'est-à-dire: -------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, -6.0, -11.0, -33.0]
-----On a triangularisé le système en ------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, 0.0, -35.0, -111.0]
Le système est :
1 x + ( 2 )y + ( 3 ) z = 8
1.0 y + ( -4.0 ) z = -13.0
-35.0 z = -111.0
Donc --------
z = 3.17142857143
y = -0.314285714286
x = -0.885714285714
Conclusion
( x , y , z )= ( -0.885714285714 , -0.314285714286 , 3.17142857143 )
>>>
Autre exemple:
>>> gauss2()
Donner la liste des coefficients de la première ligne[2,5,3,4]
Donner la liste des coefficients de la seconde ligne[2,3,1,5]
Donner la liste des coefficients de la troisième ligne[3,4,2,2]
[2, 5, 3, 4]
[2, 3, 1, 5]
[3, 4, 2, 2]
------c'est-à-dire: -------
[2, 5, 3, 4]
[0.0, -2.0, -2.0, 1.0]
[0.0, -3.5, -2.5, -4.0]
-----On a triangularisé le système en ------
[2, 5, 3, 4]
[0.0, -2.0, -2.0, 1.0]
[0.0, 0.0, 1.0, -5.75]
Le système est :
2 x + ( 5 )y + ( 3 ) z = 4
-2.0 y + ( -2.0 ) z = 1.0
1.0 z = -5.75
Donc --------
z = -5.75
y = 5.25
x = -2.5
Conclusion
( x , y , z )= ( -2.5 , 5.25 , -5.75 )
>>>
Remarque: On peut remplacer la dernière ligne du script par
print "( x , y , z )= ","(",round(x,2),",",round(y,2),",",round(z,2),")"
pour n'avoir que deux décimales
par exemple on obtient alors:
>>> gauss2()
Donner la liste des coefficients de la première ligne[1,2,3,8]
Donner la liste des coefficients de la seconde ligne[2,5,2,3]
Donner la liste des coefficients de la troisième ligne[4,2,1,-1]
[1, 2, 3, 8]
[2, 5, 2, 3]
[4, 2, 1, -1]
------c'est-à-dire: -------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, -6.0, -11.0, -33.0]
-----On a triangularisé le système en ------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, 0.0, -35.0, -111.0]
Le système est :
1 x + ( 2 )y + ( 3 ) z = 8
1.0 y + ( -4.0 ) z = -13.0
-35.0 z = -111.0
Donc --------
z = 3.17142857143
y = -0.314285714286
x = -0.885714285714
Conclusion
( x , y , z )= ( -0.89 , -0.31 , 3.17 )
>>>
au lieu de
( x , y , z )= ( -0.885714285714 , -0.314285714286 , 3.17142857143 )
Remarque : De plus en mettant au dessus du script le module
from fractions import Fraction
on peut en remplaçant print " z = ", z
print " y = ", y
print " x = ", x
par: print " z = ", Fraction(z)
print " y = ", Fraction(y)
print " x = ", Fraction(x)
présenter x , y et z comme quotient
Par exemple:
>>> gauss2()
Donner la liste des coefficients de la première ligne[1,2,3,8]
Donner la liste des coefficients de la seconde ligne[2,5,2,3]
Donner la liste des coefficients de la troisième ligne[4,2,1,-1]
[1, 2, 3, 8]
[2, 5, 2, 3]
[4, 2, 1, -1]
------c'est-à-dire: -------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, -6.0, -11.0, -33.0]
-----On a triangularisé le système en ------
[1, 2, 3, 8]
[0.0, 1.0, -4.0, -13.0]
[0.0, 0.0, -35.0, -111.0]
Le système est :
1 x + ( 2 )y + ( 3 ) z = 8
1.0 y + ( -4.0 ) z = -13.0
-35.0 z = -111.0
Donc --------
z = 7141422266258929/2251799813685248
y = -176927128218127/562949953421312
x = -498612815887447/562949953421312
Conclusion
( x , y , z )= ( -0.89 , -0.31 , 3.17 )
>>>
-----------------------------------------------------------------
EXERCICE 3:
Que donne le script suivant ?
from fractions import Fraction
def quot():
print Fraction(0.25)
-------------------------------------------
REPONSE:
Il met 0.25 sous la forme d'un quotient
>>> quot()
1/4
>>>
-------------------------------------------------------
EXERCICE 4:
Que donne le script suivant?
from fractions import Fraction
def systeme():
print Fraction(0.25),"x","+",Fraction(0.75),"y","-",Fraction(0.75),"z = 4"
------------------------------------------------------------------------------
REPONSE :
Il donne:
>>> systeme()
1/4 x + 3/4 y - 3/4 z = 4
>>>
------------------------------------------------------------
>>> gauss2()
Donner la liste des coefficients de la première ligne[2,5,3,4]
Donner la liste des coefficients de la seconde ligne[2,3,1,5]
Donner la liste des coefficients de la troisième ligne[3,4,2,2]
[2, 5, 3, 4]
[2, 3, 1, 5]
[3, 4, 2, 2]
------c'est-à-dire: -------
[2, 5, 3, 4]
[0, -1, -1, 1]
[0, -2, -1, -4]
-----On a triangularisé le système en ------
[2, 5, 3, 4]
[0, -1, -1, 1]
[0, 0, 1, -6]
Le système est :
2 x + 5 y + 3 z = 4
-1 y + -1 z = 1
1 z = -6
Donc --------
z = -6
y = 5
x = -2
Conclusion
( x , y , z )= ( -2 , 5 , -6 )
>>>
ou encore:
>>> gauss2()
Donner la liste des coefficients de la première ligne[5,-3,8,9]
Donner la liste des coefficients de la seconde ligne[17,-11,18,5]
Donner la liste des coefficients de la troisième ligne[-44,7,14,11]
[5, -3, 8, 9]
[17, -11, 18, 5]
[-44, 7, 14, 11]
------c'est-à-dire: -------
[5, -3, 8, 9]
[0, 6, 1, -12]
[0, -37, 58, 55]
-----On a triangularisé le système en ------
[5, -3, 8, 9]
[0, 6, 1, -12]
[0, 0, 58, -19]
Le système est :
5 x + -3 y + 8 z = 9
6 y + 1 z = -12
58 z = -19
Donc --------
z = -1
y = -2
x = 2
Conclusion
( x , y , z )= ( 2 , -2 , -1 )
>>>