METHODE du PIVOT de GAUSS

                        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 )

>>>