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 :

Méthode de Simpson


Sujet :

Fortran

  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Par défaut Méthode de Simpson
    Bonjour,
    Après avoir fait le programme pour calculer une intégrale sur un domaine ]a,b[ par la méthode de Simpson, je me casse la tête pour savoir où est l'erreur.
    Pouvez-vous alors m'aider ?
    Merci
    Voilà mon code :
    Code : 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
     
              program simpsone
              real inte
              CALL simpson(0.0,1.0,100,F,inte)
              print*,'integrale entre 0 et 1 de F =',inte
              end
     
              real function F(X)
              real X
              F = X
              return
              end
     
     
     
              subroutine simpson(A,B,m,F,REP)
              real A,B,REP,S,V
              integer m,j,i
              S=0.0
              V=0.0
              do i=1,m
                 S=S+F(A+(2*i-1)*(B-A)/(2*m))
              enddo
              do j=1,m
                 V=V+F(A+j*(B-A)/m)
              enddo
              REP=((B-A)/(3*m))*(F(A)+F(B)+2*S+V)
              end

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Par défaut
    C est résolu,
    il fallait enlevé ce méchant F de la subroutine
    merci

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Par défaut
    Malgré ca si je donne m=1000000 le programme diverge
    pourquoi?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Citation Envoyé par feynman Voir le message
    Malgré ca si je donne m=1000000 le programme diverge
    pourquoi?
    En lisant en diagonale ton code, c'est possiblement parce qu'en découpant en millionnième l'interval, tu dépasses la précision des réels simples. Fais un test en augmentant la précision des reals à double precision...

    En décimale, les reals ont un peu moins de 7 chiffres de précision. Donc, quand tu découpe l'intervalle en 1 000 000, tu produis une sommation dont les termes sont de l'ordre du millionnième de la somme. Dès lors, il est possible que la somme tourne « dans le vide », que les termes ne soit plus compter dans le total.

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Par défaut
    J ai changé tout en double precision et ca na pas marché

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Montre nous ton code source, sans quoi toute tentative d'explication serait totalement spéculative.

  7. #7
    Membre éclairé
    Inscrit en
    Juillet 2007
    Messages
    386
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 386
    Par défaut
    Code : 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
     
             program simpsone
              real inte
              CALL simpson(0.0,1.0,100,F,inte)
              print*,'integrale entre 0 et 1 de F =',inte
              end
     
              double precision function F(X)
              double precision X
              F = X
              return
              end
     
     
     
              subroutine simpson(A,B,m,F,REP)
              double precision A,B,REP,S,V
              integer m,j,i
              S=0.0
              V=0.0
              do i=1,m
                 S=S+F(A+(2*i-1)*(B-A)/(2*m))
              enddo
              do j=1,m
                 V=V+F(A+j*(B-A)/m)
              enddo
              REP=((B-A)/(3*m))*(F(A)+F(B)+2*S+V)
              end

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Il y a plusieurs erreurs dans ton programme :
    • Aucune procédure ne contient de « implicit none », ce qui est une mauvaise habitude de travail
    • L'appel à la routine Simpson passe des variables real alors que la routine s'attend à des double precision
    • La fonction F doit être déclaré comme double precision et external dans les proédures où elles est référencée

    Ces erreurs peuvent être détectées si tu actives le mode « debug » de ton compilateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. méthode de Simpson
    Par humanite dans le forum Mathématiques
    Réponses: 7
    Dernier message: 19/01/2011, 08h23
  2. méthode de simpson intégrale multidimension
    Par matlabsimpson dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/04/2008, 15h18
  3. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  4. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26
  5. Cryptage en C selon la méthode de césat
    Par shenron dans le forum C
    Réponses: 2
    Dernier message: 31/05/2002, 08h22

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