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 :

Problème pour calculer un nombre complexe en Fortran


Sujet :

Fortran

  1. #1
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème pour calculer un nombre complexe en Fortran
    Bonjour tout le monde,

    Je rencontre un problème pour calculer une nombre complexe en Fortran.
    Le code source est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    program ProgComplex
      implicit none
      complex(8) :: NbrComp
      NbrComp  =  (5.0,8.0)
      write(6,"('ProgComplex: real(NbrComp) = ',f5.2,3x,'aimag(NbrComp) = ',f5.2)") real(NbrComp), aimag(NbrComp)
      NbrComp  =  CMPLX((-1.0)**(2.25))
      write(6,"('ProgComplex: real(NbrComp) = ',f5.2,3x,'aimag(NbrComp) = ',f5.2)") real(NbrComp), aimag(NbrComp)
    end program ProgComplex
    et il retourne à l'écran les 2 lignes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ProgComplex: real(NbrComp) =  5.00   aimag(NbrComp) =  8.00
    ProgComplex: real(NbrComp) =   NaN   aimag(NbrComp) =  0.00
    La 1ère instruction 'write' imprime à l'écran la partie réelle et imaginaire de x = 5 + 8i.
    On voit que les valeurs retournées correspondent bien au nombre défini.

    Le 2ème nombre défini correspond à x = (-1)^(2.25).
    En utilisant, Matlab, je trouve :

    x = (-1)^(2.25) = 0.7071 + 0.7071i

    Je n'arrive pas à retrouver ce résultat en Fortran.
    En effet, le code ci-dessus me retourne un "NaN" pour le partie réelle et 0.0 pour la partie imaginaire.

    Où se trouve mon erreur ?
    Comment puis-je calculer un nombre complexe en Fortran ?
    Merci d'avance.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Salut,

    Je ne suis pas le plus expert pour répondre à ta question, mais pour ma part, en réalisant les syntaxes suivantes:

    program TEST
    implicit none
    complex(8)::TESTCMP

    TESTCMP=(-1,0)**2.25
    print*,TESTCMP

    end program
    Le programme me renvoit les valeurs : (0.707106769084930,0.707106769084930)
    Ce qui, je pense correspond à celles données par matlab.

    Ensuite, en utilisant la fonction CMPLX, il semblerait que tu l'ais mal formulée. En recourrant à un tuto trouvé sur :
    http://www.polytech-lille.fr/cours-f.../complexes.htm
    et en écrivant cette fois-ci:

    TESTCMP=CMPLX(-1,0)**2.25
    Le programme me renvoit bien :
    (0.707106769084930,0.707106769084930)
    Il semblerait donc qu'il te manque le second argument dans ton appel de fonction.

    En espérant avoir pu t'aider,

    Plus,

    Marlan

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci. Ta réponse m'a débloqué.

    Mon problème vient du fait que j'appliquais un exposant réel à un réel négatif.

    Or, à ce sujet, le standard est très claire: "Raising a negative-valued primary of type real to a real power is prohibited." (paragraphe 7.1.8. du Fortran 2003 Standard)

    Dans ton exemple, tu appliques l'exposant à un complexe: X=(-1,0)**2.25
    alors que dans le mien, je l'appliquais à un réel: X=(-1.0)**2.25

    Une autre solution consiste à convertir le réel en complexe avant d'appliquer l'exposant: X=(cmplx(-1.0))**(-2.25)

    La différence se situe uniquement au niveau du point/virgule entre le "1" et le "0".

    Concernant la function "compx", ma formulation est correcte. D'après le livre "Modern Fortran Explained", sa définition est : complx (x [,y] [,kind])
    Si y est absent, x peut être du type entier, réel ou complexe.

    Merci encore pour ta réponse.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    programmation
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Maroc

    Informations professionnelles :
    Activité : programmation
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Points : 0
    Points
    0
    Par défaut
    s'ils vous plais un programme qui calcul les contraintes est les deformation et deplacement pour une plaque 2d en essai de traction
    par la methode des elements finis par éléments quadrilatéral et enshel et barssoum +++++++ en code matleb plizzzz urgent j'ai un PFE de master je suis bloquée pendent 4 mois

Discussions similaires

  1. Réponses: 6
    Dernier message: 12/01/2008, 18h21
  2. [8.5]Problème pour calculer le nombre des personnes d'une liste
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 9
    Dernier message: 21/06/2007, 09h47
  3. [MySQL] problème pour calculer âge - code erronné
    Par Christophe93250 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 12/02/2007, 18h54
  4. Réponses: 4
    Dernier message: 11/06/2006, 19h04

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