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...)
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.