ChronoMath, une chronologie des MATHÉMATIQUES
à l'usage des professeurs de mathématiques, des étudiants et des élèves des lycées & collèges

Méthode du pivot selon Gauss  version VisualBasic pour tableur Microsoft Excel
     » La théorie et la version JavaScript vous seront exposées en cliquant sur la clé...


Le programme ci-après résout le système n
x n de n équations linéaires à n inconnues x1, x2,…,xn : 
 a1,1x1 + a1,2x2 + … + a1,nxn = b1
 a2,1x1 + a2,2x2 + … + a2,nxn = b2
 

 ...
 an,1x1 + an,2x2 + … + an,nxn = bn

lorsque celui-ci possède une unique solution : système de Cramer.

Les coefficients ai,j et les bi du système sont fournis par l'utilisateur. Le programme fonctionne au moyen d'une macro écrite en VisualBasic pour Excel, il est en tout point semblable à la version JavaScript :

Public Static Sub pivot()
n = 0: col = 0
Do While n = 0
'recherche de la dimension du système
   col = col + 1: n = cells(12, col)
Loop

Dim x(10), copi(10, 11)
'on réserve en mémoire l'emplacement des coeff. et du vecteur de solutions.
Les coefficients bi du système sont ici les cells(i,n+1)


For li = 1 To n: For co = 1 To n + 1 'copie des coefficients utilisateurs
copi(li, co) = cells(li, co): Next co: Next li

For k = 1 To n - 1
'sous-programme de résolution par triangulation
   v = cells(k, k)
   If v = 0 Then
      v = permu(k): If v = 0 Then Call sing: Exit Sub
'si le pivot est nul, on permute les lignes
       et si un pivot non nul n'est pas trouvé, alors le système est singulier

   End If
   For i = k + 1 To n
'le pivot est trouvé, on transforme les lignes sous le pivot
       For j = k + 1 To n + 1
       cells(i, j) = cells(i, j) - cells(i, k) * cells(k, j) / v
       Next j
   Next i
Next k

If cells(n, n) = 0 Then Call sing: Exit Sub 'si le dernier pivot est nul, le système est singulier
x(n) = cells(n, n + 1) / cells(n, n)   'calcul de xn

For i = n - 1 To 1 Step -1   'calcul des solutions de xn-1 à x1 en "remontant"
   s = 0
      For j = i + 1 To n
      s = s + cells(i, j) * x(j)
      Next j
   x(i) = (cells(i, n + 1) - s) / cells(i, i)
Next i

For li = 1 To n: For co = 1 To n + 1   'restitution des coefficients utilisateurs
cells(li, co) = copi(li, co): Next co: Next li

For i = 1 To n 
'on affiche le n-uplet des solutions
MsgBox ("x(" & i & ") = " & x(i))
Next
End Sub

Function permu(k) 'permutation de la ligne k et de la ligne k+1
q = 0: li = k
While cells(li, k) = 0
q = q + 1: li = k + q
'si le pivot de la ligne k+1 est nul, on essaye la suivante mais le rang de la ligne
 ne doit pas dépasser n : si permu = 0 est renvoyé, le système est singulier.

If li = n + 1 Then
   permu = 0
Else
   For i = 1 To n + 1  
'le pivot est trouvé, on échange
   aux = cells(k, i): cells(k, i) = cells(li, i): cells(li, i) = aux
   Next
permu = cells(k, k)
End Function

Public Sub sing() 'le système est singulier
MsgBox ("Désolé, ce système n'est pas de Cramer")
End Sub

Fenêtre Excel d'exécution :

 
 
Exemples d'exécution :
2x1 + 3x2 -   x3 = -6
3x1 -  x2 +  2x3 = 11     
7x1 + 4x2 - 10x3 = -8

   Si vous utilisez Microsoft Excel, vous pouvez télécharger le programme : PivotXL.zip
© Serge Mehl - www.chronomath.com