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 :

Exponentielle d'une matrice complexe


Sujet :

Fortran

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut Exponentielle d'une matrice complexe
    Bonjour !

    je cherche à calculer l'exponentielle d'une matrice complexe (8x8). pour l'instant, j'ai simplement utilisé la somme de 1/(k!)*A^k, en variant k de 0 à la valeur maximale supportée...

    cependant, mon programme de simulation "part aux fraises" pour certaines valeurs.

    j'en conclus que la somme que j'utilise n'est pas précise. il ne m'est pas possible d'augmenter la précision en prenant des k plus grands.

    que faire pour m'en sortir ?

    quelqu'un connaitrait un algorithme fiable pour calculer l'exponentielle d'une matrice ? Merci d'avance pour votre aide

  2. #2
    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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    calculer l'exponentielle d'une matrice
    Que veux-tu faire avec?
    Jean-Marc Blanc

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    j'ai besoin de l'exponentielle d'une matrice afin de calculer l'évolution de la matrice densité (rho) d'un système de spin :

    rho(t+tau_1) = exp(-i*H*tau_1)*rho(t)*exp(i*H*tau_1)

    où H est l'Hamiltonien qui comprend les interactions qui régissent mon système. les dimensions de l'Hamiltonien sont (2^N)x(2^N), où N est le nombre de spins qui forment mon système. mon programme actuel utilise 3 spins, et il me faut donc effectuer les calculs sur des matrices 8x8 (mais j'ai dans l'espoir de l'étendre à un nombre de spins supérieur).

    une fois que j'obtiens le propagateur (P = exp(-i*H*tau_1)), j'effectue une boucle de n cycles, et j'ai l'impression que je propage une erreur, qui donne des résultats aberrants avec un nombre de cycle élevé.

    j'espère que mon explication n'est pas trop "fouilli"

    merci d'avance pour votre aide !

  4. #4
    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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    rho(t+tau_1) = exp(-i*H*tau_1)*rho(t)*exp(i*H*tau_1)
    Ceci ressemble à s'y méprendre à une formule de récurrence. Est-ce que par hasard tu ne serais pas en train d'essayer d'intégrer un système différentiel par la méthode d'Euler?
    Jean-Marc Blanc

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Est-ce que par hasard tu ne serais pas en train d'essayer d'intégrer un système différentiel par la méthode d'Euler?
    Jean-Marc Blanc
    euh... ça dépasse mes compétences...
    l'équation de départ (Liouville - von Neumann) est la suivante :

    d(rho(t))/dt=-i*[H(t), rho(t)]
    dans tous les textbooks de résonance magnétique nucléaire, on nous dit "simplement" que la solution est :

    rho(t)=U(t)*rho(0)*U(t)^-1 où U est le propagateur...

    j'ai écrit un programme en matlab qui fonctionne parfaitement (la fonction expm étant déjà implémentée), mais lorsque je l'écris en Fortran, j'ai dû créer la fonction et j'ai utilisé la somme décrite plus haut dans ce fil.


  6. #6
    Membre émérite
    Avatar de Ladgalen
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2007
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 466
    Par défaut
    Si ça peut t'aider, tu peux chercher dans les méthodes de propagations de paquets d'ondes.

    C'est une problématique classique pour les gens qui calculent la dynamique quantique de molécules. Dans leurs cas ils ont des choses très précises avec des matrices énormes vu qu'ils prennent en compte beaucoup de niveau de vibrations. Et le propagateur est quasiment le même donc ton problème doit déjà avoir une subroutine quelque part

    Bon courage

  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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    ça dépasse mes compétences...
    Dommage! Mais il n'est jamais interdit d'apprendre.
    on nous dit "simplement" que la solution est :
    rho(t)=U(t)*rho(0)*U(t)^-1
    Ce qui veut dire simplement qu'ils ont choisi une solution analytique. Personnellement, j'utiliserais plus volontiers une solution numérique (RK4 ou autre) pour intégrer le système
    d(rho(t))/dt=-i*[H(t), rho(t)]
    Jean-Marc Blanc

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2009
    Messages : 4
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Dommage! Mais il n'est jamais interdit d'apprendre.
    entièrement d'accord avec toi !

    j'admets très volontiers que la façon dont j'ai abordé le problème n'est pas la meilleure.

    quels seraient les avantages d'une approche différente (solution numérique) ?

    pour l'approche analytique, en fortran, ce qui me pose problème c'est (uniquement) de calculer l'exponentielle d'une matrice, car sous Matlab, tout fonctionne parfaitement.

    en tout cas, merci pour votre aide !
    a+

  9. #9
    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 : 85
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    quels seraient les avantages d'une approche différente (solution numérique) ?
    Le principal avantage, c'est que les méthodes numériques, je connais, alors que l'exponentielle d'une matrice, je n'avais jamais vu.
    pour l'approche analytique, en fortran, ce qui me pose problème c'est (uniquement) de calculer l'exponentielle d'une matrice
    Si tu peux me donner une définition rigoureuse de l'exponentielle d'une matrice (ce qu'on ne trouve malheureusement pas dans le help de Matlab), j'essaierai de te proposer un moyen de le calculer.
    Jean-Marc Blanc

  10. #10
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Citation Envoyé par Niko95 Voir le message
    pour l'approche analytique, en fortran, ce qui me pose problème c'est (uniquement) de calculer l'exponentielle d'une matrice, car sous Matlab, tout fonctionne parfaitement.
    Matlab utilise apparemment des routines assez sophistiquées pour ce calcul. Il y a une discussion qui est parue sur la ML Numpy qui discutait de cela, et Matlab implémenterait les algorithmes de cet article : http://eprints.ma.man.ac.uk/1217/01/...S_ep2009_9.pdf

  11. #11
    Membre Expert
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Par défaut
    Un petit cours d'algèbre linéaire qui couvre l'exponentielle d'une matrice.
    L'exercice corrigé n°10 donne une technique de calcul rapide de l'exponentielle, à l'aide d'une diagonalisation.

Discussions similaires

  1. vecteur propre d'une matrice complexe
    Par takout dans le forum Mathématiques
    Réponses: 2
    Dernier message: 02/01/2013, 16h58
  2. exponentielle d'une matrice
    Par hibouchka dans le forum MATLAB
    Réponses: 7
    Dernier message: 11/03/2011, 15h27
  3. triangulation d'une matrice complexe
    Par lili81 dans le forum Mathématiques
    Réponses: 9
    Dernier message: 14/06/2008, 16h12
  4. Réponses: 1
    Dernier message: 14/05/2007, 22h52

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