IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mathématiques Discussion :

probleme de matrice


Sujet :

Mathématiques

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Points : 18
    Points
    18
    Par défaut probleme de matrice
    salut
    Y a t-il moyen de résoudre un système d'équation linéaire par la méthode de gauss-seidel en séparant la matrice (ou n'importe quelle autre méthode)
    c'est à dire résoudre le système en manipulant la matrice bloc par bloc et non en manipulant la matrice entière
    Merci!

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Suppose que ta matrice M soit écrite sous la forme de 2 blocs diagonaux comme ceci

    M=
    A 0
    0 B
    où A et B sont des matrices carrées.
    Soir r la dimension de A et s la dimension de B.
    Soit N le second membre du système et N1 le vecteur formé des r premières composantes de N et N2 celui formé des s dernières.
    Cela veut dire que l'homomorphisme f représenté par la matrice M est le produit de deux homomorphismes g et h opérant sur des sous-espaces F et G de E respectivement en somme directe. g est la restriction de f à F et h est la restriction de f à G.
    Il va de soi que si M est à diagonale dominante A et B le sont aussi.
    Partons d'une approximation x0 de F et d'une approximation y0 de G.
    Si nous faisons des itérations successives par Gauss-Seidel les itérés de x0 convergent vers une solution de AX=N1, les itérés de y0 convergent vers une solution de BX=N2 (peut être pas à la même vitesse) mais globalement le vecteur somme d'un itéré de x0+y0 converge vers une solution de MX=N.
    Ceci se généralise à n blocs, donc aux matrices bandes.
    Je réponds donc OUI avec la restriction suivante:
    Décomposition de M en blocs DIAGONAUX.
    Si tu pratiques un peu Python tu peux le vérifier en utilisant ce script:
    (reconstitue A à partir de deux blocs DiagDom A1 et A2- Applique G-S à A d'une part à A1 et A2 d'utre part et compare les résultats).
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    from scipy import linalg
    from random import randint
    from scipy import randn
    from numpy import array, matrix
     
    ### Méthode des itérations successives de Gauss-Seidel
     
    def DiagDom(n):
        """Genère une matrice aléatoire à diagonale dominante"""
        M = randn(n,n) #matrice aléatoire
        for i in range (0,n):
            L1=[abs(M[i,j]) for j in range(0,n) if j !=i]
            L2=[abs(M[j,i]) for j in range(0,n) if j !=i]
            s= reduce(lambda x,y:x+y,L1+L2)
            M[i,i]=s+randint(1,3)
        return matrix(M)
     
    def MatD(A):
        """Matrice D de A"""
        D=A.copy()
        n=len(D)
        for i in range(0,n):
            for j in range(0,i):
                if j<i:
                    D[i,j]=0
        return matrix(D)
     
    def MatM(A):
        """Matrice extraite de A triangulaire inférieure"""
        M=A.copy()
        for i in range(0,len(A)):
            for j in range(i,len(A)):
                M[i,j]=0
        return M
     
    def Seidel(D,M,B,X):
        """itérateur de Gauss-Seidel"""
        yield X
        while True:
            X=D*B-D*M*X
            yield X
     
    def main():    
        n=4
        A=DiagDom(n) # matrice du système
        B=matrix(randn(n,1)) # second membre
        D=MatD(A)
        D=linalg.inv(D)
        M=MatM(A)
        X=matrix( [[0] for i in range(0,n)])
        Seid=Seidel(D,M,B,X)
        for i in range(0,10):# 10 itérations par Gauss Seidel
            S1=Seid.next()    
        S2=linalg.solve(A,B)# solution 'exacte'
        print linalg.norm(S1-S2)
     
    if __name__== "__main__":
        main()
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  3. #3
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

Discussions similaires

  1. Probleme de matrices
    Par pilotlbe dans le forum MATLAB
    Réponses: 4
    Dernier message: 28/09/2008, 21h09
  2. dev c++ probleme grande matrice
    Par elekis dans le forum C++
    Réponses: 3
    Dernier message: 16/11/2007, 09h15
  3. probleme initialisation matrice
    Par sneb5757 dans le forum C
    Réponses: 23
    Dernier message: 18/11/2006, 18h30
  4. Réponses: 2
    Dernier message: 09/01/2006, 16h53
  5. Probleme de matrice
    Par Johngame dans le forum DirectX
    Réponses: 1
    Dernier message: 07/02/2005, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo