Résolution de systèmes linéaires par la méthode de gauss

Contenu du snippet

Code à insérer dans un module.

Source / Exemple :


'Resolution d'un système matriciel A.X = B par la méthode de Gauss, la
'matrice A étant une matrice carrée d'ordre n, B est un vecteur colonne
'1 x n et X le vecteur solution.
'Dans la procédure ci dessous, "Matrice" est une matrice de n lignes et
'n+1 colonnes obtenue par la juxtaposition de la matrice A et du vecteur B
'La procédure rajoute une colonne à cette matrice et stockera le vecteur
'solution X dans cette Colonne.

Public Sub GaussReso(ByRef Matrice() As Double)
    Dim M(), X() As Double
    Dim Tampon As Double
    Dim n, I, J, K, T, Max As Long
    n = UBound(Matrice, 1)
    If UBound(Matrice, 2) <> n + 1 Then Exit Sub
    ReDim X(n)
    ReDim M(n, n + 1)
    ReDim Preserve Matrice(n, n + 2)
    For I = 1 To n
       For K = 1 To n + 1
         M(I, K) = Matrice(I, K)
       Next K
    Next I
    
    For I = n To 2 Step -1
       Max = I
       
       For J = 1 To I - 1
         If Abs(M(J, I)) > Abs(M(Max, I)) Then Max = J
       Next J
       
       If Max <> I Then
                     For K = 1 To n + 1
                       Tampon = M(I, K)
                       M(I, K) = M(Max, K)
                       M(Max, K) = Tampon
                     Next K
       End If
       
       For J = 1 To I - 1
         M(J, n + 1) = M(J, n + 1) - M(I, n + 1) * M(J, I) / M(I, I)
         For K = 1 To I
           M(J, K) = M(J, K) - M(I, K) * M(J, I) / M(I, I)
         Next K
       Next J
       
     Next I
     
     X(1) = M(1, n + 1) / M(1, 1)
     For I = 2 To n
       X(I) = M(I, n + 1)
       For K = 1 To I - 1
         X(I) = X(I) - M(I, K) * X(K)
       Next K
       X(I) = X(I) / M(I, I)
     Next I
     
     For I = 1 To n
       Matrice(I, n + 2) = X(I)
     Next I
End Sub

Conclusion :


Le code ci avant est à utiliser, de préférence, pour la résolution de systèmes qui n'ont aucune particularité. Pour les systèmes ayant des propriétés particulières, il existe des algorithmes plus appropriés, quoique ce code fonctionne, mais il sera plus long. ( Par exemple, matrice symétrique, matrice à bande etc...)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.