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

Fortran Discussion :

resolution de AX=B ou Inversion de matrice


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 7
    Points
    7
    Par défaut resolution de AX=B ou Inversion de matrice
    Bonjour,

    Voila j'ai écrit sur Fortran un programme qui calcule la distribution de la température 2d avec la méthode implicite.
    (conduction rayonnement instationnaire).

    J'ai utilisé un sous programme que j'ai trouvé sur internet qui calcule la matrice inverse A-1 à l'aide de la factorisation LU.
    Mon programme est tellement lent malheureusement (((.


    Pour cela je cherche un sous programme qui fait la résolution linéaire AX=B directement, et permet d'aller plus vite.
    sachant que ma matrice est de 1000*1000 et elle est de type matrice bande.

    Je vous remercie par avance ).
    J'ai vraiment besoin que mon programme aille vite .
    et besoin de votre aide donc
    qui peut m'aiderrrrrrrrrr??

  2. #2
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    Dans le cas présent, si X et B sont des vecteurs et non des matrices, il faut prendre en compte le fait que A-1 n'est pas nécessaire à construire, ce qui le cas échéant économiserait pas mal de calculs (temps de calcul divisé par n ou n est la dimension du système quand même). De plus si A est bandée, il y a peut-être des routines spécialisées (voir lapack) à la "banditude" de A, ce qui pourrait aussi économiser en temps de calcul (et en mémoire).

    Après, dans les cas de gros systèmes, et en particulier lorsqu'ils sont creux (matrice bande), les méthodes itératives sont souvent efficaces. Parmi ces dernières, les méthodes de type gradient reformulent le problème en un problème de minimisation (minimisation du résidu r=AX-B): méthode de la descente (steepest descent) ou gradient conjugué (conjugated gradient). Pour une intro à ces méthodes, je conseille le livre "numerical recipes". Pas pour reprendre les codes qui ne sont pas très optimisés (et dont la licence est par ailleurs assez restrictive j'ai cru comprendre) mais pour avoir une idée des méthodes possibles, de leur signification et de leur mise en œuvre, et pourquoi pas un exemple d'implémentation.
    Elles ne sont pas toujours applicables (certaines conditions sur A notamment, symétrique définie positive pour A dans le cas des gradients conjugués par ex.).

    Bon courage.
    xflr6

  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
    Par défaut
    Salut!
    Pour choisir la méthode de résolution, il faut connaître les propriétés de la matrice. Tu as écrit que c'est une matrice bande. Mais est-elle symétrique et définie positive?
    Jean-Marc Blanc
    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)

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut,

    tout d'abord merci pour vos réponses,

    Non ma matrice est ni positive ni symétrique.

    J'ai vu qu'il y a sur lapack des routines qui permettent de résoudre le système linéaire AX=b pour des matrices bandes générale.
    Le problème est que je n'arrive pas à savoir comment importer et utiliser la librairie lapack ou le kit MKL que j'ai trouvé sur mon PC (installé par défaut avec Fortran), et quelle est la routine qui correspond le mieux.
    sachant que je travail sur visualstudio 10, Windows7.

    Merci d'avance...

  5. #5
    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
    Par défaut
    Salut!
    Tout d'abord, je te conseille d'utiliser la bibliothèque linpack plutôt que lapack: elle est plus ancienne et offre moins de possibilités, mais elle est plus simple et plus facile à utiliser. Pour y accéder, tu vas sur le site netlib.org, tu cliques sur browse puis sur linpack et tu télécharges les sous-programmes sgbfa et sgbsl (ou dgbfa et dgbsl).
    Jean-Marc Blanc
    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)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Merci bcp pour vos réponses .

    J'ai finalement pu utilisé la librairie MKL qui contient lapack, j'ai utilisé les routine Getrf Getrs.
    Et je pense que ça fonctionne pour le moment .

    call getrf ( mata ,ipiv) ! Factorize A
    call getrs( mata, ipiv, T1) ! Solve A.x = b x=T1(output)

    Malheureusement je n'ai pas trouvé plus de détails sur ces routines.
    Pouviez vous me dire si elle sont recommandées ou non dans mon cas?? (matrice bande)

    Merci par avance.
    Ayyoub

  7. #7
    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
    Par défaut
    Salut!
    Tu vas sur le site netlib.org, tu cliques sur browse puis sur lapack et tu trouveras tous les renseignements nécessaires.
    Jean-Marc Blanc
    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)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci bcp

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Août 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 57
    Points : 91
    Points
    91
    Par défaut
    Sinon, en 2D instationnaire, on peut aussi essayer avec une méthode des directions alternées (ADI, alternate direction implicit).

    Si le calcul est fait avec une dépendance de chaque point uniquement aux points voisins (et comme il y a du rayonnement, je ne sais pas si c'est le cas. Ca dépend aussi du schéma de discrétisation), ça donne deux inversions de matrices tridiagonales par pas de temps, ce qui se fait très bien et rapidement avec un algorithme de Thomas.

    Maintenant, ça reste de l'inversion directe, ce qui peut poser des problèmes quand le système devient grand...

Discussions similaires

  1. Inversion de matrice
    Par mhooreman dans le forum Mathématiques
    Réponses: 6
    Dernier message: 26/10/2006, 18h35
  2. Probleme d'inversion de matrice subtil
    Par babycrash dans le forum C
    Réponses: 2
    Dernier message: 02/08/2006, 17h41
  3. inversion de matrice?
    Par babycrash dans le forum C
    Réponses: 17
    Dernier message: 21/06/2006, 22h18
  4. Comment inverser une matrice H(2,2) ?
    Par fafa624 dans le forum Langage
    Réponses: 4
    Dernier message: 29/06/2005, 10h23
  5. Calculer un inverse de matrice avec boost?
    Par Clad3 dans le forum Bibliothèques
    Réponses: 6
    Dernier message: 02/06/2005, 18h38

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