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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 755 fois - Téléchargée 72 fois

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

Ajouter un commentaire

Commentaires

Je suis ingénieur du btp.j'ai essayé cet algo dans un projet vba utilisant AUTOCAD pour traiter les problèmes de structure.en général,dans le cas des structures 3d, la matrice peut avoir une dimension de l'ordre du million et ça prend un temps fou pour procéder à la résolution
sisouheil
Messages postés
1
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
18 mai 2009

bonjour,
tu pourrais m'expliquer en detail comment faire pour executer le code: interface, boutons...
je suis encore debutant en vb
merci
moon8257
Messages postés
1
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
9 juin 2006

Bonjour,

J'ai testé rapidement le code et je pense qu'il est buggé. N'ayant plus la méthode en tête, je verrai pour un correction ultérieurement.

Résolution du système testé :
- - -
|x 1 |x 0 | x = 1
|x + y 2 donne |y 2 au lieu de | y = 1
|x + y + z 3 |z 1 | z = 1
- - -

voici le code de test :

Sub TestGaussReso()

Dim M() As Double
Dim i As Long
Dim strRes As String

ReDim M(0 To 2, 0 To 3)
M(0, 0) 1: M(0, 1) 0: M(0, 2) = 0: M(0, 3) = 1
M(1, 0) 1: M(1, 1) 1: M(1, 2) = 0: M(1, 3) = 2
M(2, 0) 1: M(2, 1) 1: M(2, 2) = 1: M(2, 3) = 3

Call GaussReso(M)
For i = 0 To 2
strRes strRes & Chr(120 + i) & " " & M(i, 4) & Chr(13)
Next i
Call MsgBox(strRes)

End Sub
chasseurdedemon
Messages postés
60
Date d'inscription
mardi 23 décembre 2003
Statut
Membre
Dernière intervention
15 novembre 2010

slt je suis débutan et je voudrais savoir si kelk1 peu m'expliqué ce code car je ne compren pa tré bi1.j'aimeré faire un sudoku en vb é pr cela il me faire une matrice mais je ne c'est pas comment on fait une matrice en vb (je suis un débutan ne l'oublié pas). j'ai ma petit idée de la fasson dont je programmeré le sudoku avec une matrice et j'ariveré a le faire mais le tt c'est de savoir comment la faire cete matrice.
donc voila koi je voudrais une expliquation tré détaillé de cette source si c'est possible.
j'ai msn pour ce qui veulent discuter ou m'aidé en direct voicis mon adresse : mocktarm@hotmail.com.

merci d'avence

cordialement


MokMap
cs_syndibad
Messages postés
1
Date d'inscription
dimanche 12 novembre 2000
Statut
Membre
Dernière intervention
30 mars 2005

merci infiniment
mais est ce que je peut trouver le programmation d autre methode comme cholski ou l equat de la chaleur

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.