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 :

Complex Newton Raphson


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Complex Newton Raphson
    Bonjour, je suis débutant en fortran et ai l'exercice suivant qui me pose un problème :

    je dois rédiger un programme qui, utilisant la méthode de Newton-Raphson sur un polynôme f(x) de degré 3, doit me donner une racine complexe (une approximation) en moins de 100 itérations, avec pour condition de validité de la racine que la valeur absolue du polynôme soit f(racine)<0,001.
    Ce programme doit sortir l'expression du polynôme f(x), la proposition initiale de racine, la racine trouvée et le nombre d'itérations requises pour trouver cette racine.

    J'ai donc rédigé ceci :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    PROGRAM NewtonRaph
          IMPLICIT NONE
          INTEGER a0,a1,a2,a3,j
          COMPLEX X
          PRINT *,'ENTER aO,a1,a2,a3 :'
          READ *,a0,a1,a2,a3
          PRINT *,'ENTER INITIAL GUESS :'
          READ *,X
          CALL root(X)
          CALL root2(X,j)
          PRINT *,'...THE ROOT OF ',a0,'X**3','+',a1,'X**2','+',a2,'X+',a3
          PRINT *,'IS ',X
           IF (j.LE.100) THEN
             PRINT *,'AFTER ',j,'ITERATIONS...'
             ELSE
             PRINT *,'AFTER 100 ITERATIONS, WE DID NOT FIND THE ROOT...'
             PRINT *,'...TRY AGAIN WITH ANOTHER INITIAL GUESS !'
             END IF
             RETURN
          END
    C
    C
    C
          SUBROUTINE root(Y)
          COMPLEX Y
          Y=Y-((a0*Y**3+a1*Y**2+a2*Y+a3)/(3*a0*Y**2+2*a1*Y+a2))
          RETURN
          END
    C
          SUBROUTINE root2(Z)
          COMPLEX Z
          INTEGER i
          REAL R
          DO 5 i=1,100
             R=a0*Z**3+a1*Z**2+a2*Z+a3
             IF (ABS(R).LT.0.001) EXIT
                CALL root (Z)
     5          CONTINUE
             END
    Mais la valeur de la racine n'est pas la bonne (avec a0=0, a1=1,a2=2,a3=10, je devrais obtenir -1+3i ou -1-3i), et le polynôme ne sort pas sous la forme voulue et je ne suis pas sur non plus du nombre d'itérations donné !

    Et je ne vois plus d'erreure dans ce programme !

    Merci d'avance pour votre aide !

    Nulysses

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut j'ai trouvé une bêtise, mais c'est pas encore ça !
    Rebonjour,

    j'ai réparé une bêtise : les a0,a1,... étaient implicitement définis dans les subroutines, j'ai donc corrigé le tir :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    PROGRAM NewtonRaph
          IMPLICIT NONE
          INTEGER a0,a1,a2,a3
          COMPLEX N
          PRINT *,'ENTER aO,a1,a2,a3 :'
          READ *,a0,a1,a2,a3
          PRINT *,'ENTER INITIAL GUESS :'
          READ *,N
          PRINT *,'INITIAL GUESS :',N
          CALL root(N,a0,a1,a2,a3)
          CALL root2(N,a0,a1,a2,a3)
          PRINT *,'THE ROOT IS ',N
          END
    C
    C
    C
          SUBROUTINE root(Y,b0,b1,b2,b3)
          IMPLICIT NONE
          COMPLEX Y
          INTEGER b0,b1,b2,b3
          Y=Y-((b0*Y**3+b1*Y**2+b2*Y+b3)/(3*b0*Y**2+2*b1*Y+b2))
          RETURN
          END
    C
          SUBROUTINE root2(Z,c0,c1,c2,c3)
          IMPLICIT NONE
          COMPLEX Z
          INTEGER c0,c1,c2,c3
          INTEGER i
          REAL R
          DO i=1,110
             R=c0*Z**3+c1*Z**2+c2*Z+c3
             IF (ABS(R).LT.0.001) EXIT
                CALL root (Z)
     5          CONTINUE
             END DO
             IF (i.LE.100)THEN
             PRINT *,'NUMBER OF ITERATIONS :',i
             ELSE
             PRINT *,'AFTER 100 ITERATIONS, WE DID NOT FIND THE ROOT...'
             PRINT *,'...TRY AGAIN WITH ANOTHER INITIAL GUESS !'
             END IF
             RETURN
             END

    Cependant, lorsque je lance le programme, il s'affiche "erreur de segmentation", là je ne sais vraiment plus quoi faire !

    Merci d'avance,

    Nulysses

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Par défaut Wooohooo ! J'y suis quasiment !
    Rerebonjour,

    il restait la même erreur que tout-à l'heure (en appelant la 1ère subroutine à partir de la seconde ) !

    Il ne manque plus que l'affichage du polynôme...


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

Discussions similaires

  1. la methode newton-raphson sur matlab
    Par crippella dans le forum Mathématiques
    Réponses: 2
    Dernier message: 02/02/2010, 10h27
  2. Newton-Raphson et Gauss-Seidel
    Par hyacinthus dans le forum Mathématiques
    Réponses: 2
    Dernier message: 15/03/2009, 19h44
  3. pb de solution methode de newton-raphson
    Par laroche1 dans le forum MATLAB
    Réponses: 2
    Dernier message: 13/03/2008, 23h03
  4. Utilisation Newton-Raphson pour resoudre une equation
    Par laila_china dans le forum MATLAB
    Réponses: 1
    Dernier message: 13/11/2007, 12h43
  5. algorihme de newton raphson
    Par maroueneo dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 13/04/2007, 13h46

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