Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MANUPILATION DES MATRICES


Information sur la source

Description

Private Const errNONSOL1 As Integer = -1
Private Const errNONSOL2 As Integer = -2
Option Explicit
Public Sub MATRICE_Gauss(ByVal N As Integer, _
                         ByRef TA() As Double, _
                         ByRef TB() As Double, _
                         ByRef TX() As Double, _
                         ByRef err As Integer)
  
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim m As Integer
    Dim w As Double

  
    For k = 1 To N - 1
        m = k
        w = TA(k, k)
        For i = k + 1 To N
            If Abs(w) < Abs(TA(i, k)) Then
                m = i
                w = TA(i, k)
            End If
        Next i
        If (m <> k) Then
            For i = 1 To N
                TX(i) = TA(k, i)
                TA(k, i) = TA(m, i)
                TA(m, i) = TX(i)
            Next i
            w = TB(k)
            TB(k) = TB(m)
            TB(m) = w
        End If
        If TA(k, k) = 0 Then err = errNONSOL1: Exit Sub
        For i = k + 1 To N
            w = TA(i, k) / TA(k, k)
            For j = 1 To N
                If (j < k) Then
                    TA(i, j) = 0
                Else
                    TA(i, j) = TA(i, j) - w * TA(k, j)
                End If
            Next j
            TB(i) = TB(i) - w * TB(k)
         Next i
    Next k
    
    Call MAT_sup(N, TA(), TB(), TX(), err)
End Sub
Public Sub MATRICE_Crout(ByVal N As Integer, _
                         ByRef TA() As Double, _
                         ByRef TB() As Double, _
                         ByRef TX() As Double, _
                         ByRef err As Integer)
    
    Dim w As Double
    Dim r As Integer
    Dim i As Integer
    Dim k As Integer
    Dim Tu() As Double
    Dim Tl() As Double
    ReDim Tu(N, N), Tl(N, N)
    
    For i = 1 To N
        Tu(i, i) = 1
        Tl(i, 1) = TA(i, 1)
        If Tl(1, 1) = 0 Then err = errNONSOL1: Exit Sub
        Tu(1, i) = TA(1, i) / Tl(1, 1)
    Next i

    For r = 2 To N
        For i = r To N
            w = 0
            For k = 1 To r - 1
                 w = w + Tl(i, k) * Tu(k, r)
            Next k
            Tl(i, r) = TA(i, r) - w
        Next i
        For i = r + 1 To N
            w = 0
            For k = 1 To r - 1
                w = w + Tl(r, k) * Tu(k, i)
            Next k
            If Tl(r, r) = 0 Then err = errNONSOL1: Exit Sub
            Tu(r, i) = (TA(r, i) - w) / Tl(r, r)
        Next i
    Next r
    Call MAT_inf(N, Tl(), TB(), TX(), err)
    For i = 1 To N
        TB(i) = TX(i)
    Next i
    Call MAT_sup(N, Tu(), TB(), TX(), err)
End Sub
Public Sub MATRICE_Thomas(ByVal N As Integer, _
                          ByRef v1() As Double, _
                          ByRef v2() As Double, _
                          ByRef v3() As Double, _
                          ByRef TB() As Double, _
                          ByRef TX() As Double, _
                          ByRef err As Integer)

    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim w As Double

    v1(1) = v1(1) / v2(1)
    TB(1) = TB(1) / v2(1)
    For i = 2 To N
        w = v2(i) - v3(i) * v1(i - 1)
        If w = 0 Then err = -1: Exit Sub
        v1(i) = v1(i) / w
        TB(i) = (TB(i) - v3(i) * TB(i - 1)) / w
    Next i
    TX(N) = TB(N)
    For i = N - 1 To 1 Step (-1)
        TX(i) = TB(i) - v1(i) * TX(i + 1)
    Next i
End Sub
Public Sub MATRICE_Chebycheve(ByVal a As Double, _
                              ByVal b As Double, _
                              ByVal NPTS As Integer, _
                              ByRef TX() As Double, _
                              ByRef err As Integer)
    Dim k As Integer
    
    For k = 1 To NPTS
        TX(k) = (a + b) / 2 + ((b - a) / 2) * Cos((3.14159265 / NPTS) * (k - 1 / 2))
    Next k
End Sub
Public Sub MAT_sup(ByVal N As Integer, _
                   ByRef TA() As Double, _
                   ByRef TB() As Double, _
                   ByRef TX() As Double, _
                   ByRef err As Integer)

    Dim i As Integer
    Dim j As Integer
    Dim w As Double

    For i = 1 To N
        If TA(i, i) = 0 Then err = errNONSOL2: Exit Sub
    Next i
    TX(N) = TB(N) / TA(N, N)
    For i = N - 1 To 1 Step (-1)
        w = 0
        For j = i + 1 To N
            w = w + TA(i, j) * TX(j)
        Next j
        TX(i) = (TB(i) - w) / TA(i, i)
    Next i
End Sub
Public Sub MAT_inf(ByVal N As Integer, _
                   ByRef TA() As Double, _
                   ByRef TB() As Double, _
                   ByRef TX() As Double, _
                   ByRef err As Integer)
    
    Dim i As Integer
    Dim j As Integer
    Dim w As Double

    For i = 1 To N
        If TA(i, i) = 0 Then err = errNONSOL2: Exit Sub
    Next i
    TX(1) = TB(1) / TA(1, 1)
    For i = 1 To N
        w = 0
        For j = 1 To i - 1
            w = w + TA(i, j) * TX(j)
        Next j
        TX(i) = (TB(i) - w) / TA(i, i)
    Next i
End Sub
 

Commentaires et avis

signaler à un administrateur
Commentaire de bloom1 le 12/09/2004 01:20:07

pas de zip.. c'est moche

je voudrais que tu mettent un zip, Ca serait bcp mieux, on pourrait regarder.

signaler à un administrateur
Commentaire de Saros le 12/09/2004 17:40:33

Et colle le code au bon endroit au moins...
C'est pas que ça me dit rien de le voir comme ça, mais presque...

signaler à un administrateur
Commentaire de us_30 le 08/04/2007 21:45:49

Reste que ces fonctions sur les matrices ne sot pas courantes... Bon courage.

Amicalemet,
Us.

signaler à un administrateur
Commentaire de Saros le 09/04/2007 11:28:50

A ce propos, elles font quoi exactement ces fonctions ?

signaler à un administrateur
Commentaire de us_30 le 09/04/2007 13:01:59

Bonjour Saros,

C'est probablement pas à moi de te répondre en premier, mais comme j'en programme quelques unes actuellement...
Visiblement la fonction :
- MATRICE_Gauss : résoudre un système linéaire. Elle utilise aussi les fonctions de manipulations MAT_sup
- MATRICE_Crout : est connu en mathématique pour effectuer une décomposition d'une matrice en deux matrices tel que A=LU. On appelle aussi cela la décomposition LU. Les matrices L et U, sont respectivement de la forme triangulaire inférieur et supérieur. Cette décomposition n'est pas unique. De là, il existe plusieurs façon de réaliser cette décomposition. M. Crout lui a étudié la chose en partant de U avec une diagonale composé de 1, donc Det(U)=1... il a en donc déduit des formulations pour calculer les autres éléments...
Symétriquement, on pourrait partir avec L, avec la diagonale unitaire, c'est assimilaire... et a été étudié par M.Doolittle.
Quant à Cholesky, il pose que U=L^t (transposé de L)...
- MATRICE_Chebycheve : I don't know exactly. (peut-être une matrice de changement de base...)

Amicalement,
Us.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,577 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.