Erreurs de débutant, programme de bissection en Fortran
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Erreurs de débutant, programme de bissection en Fortran



  1. #1
    invitece1a8a19

    Red face Erreurs de débutant, programme de bissection en Fortran


    ------

    Bonjour à tous,
    je suis nouveau sur le forum et en programmation aussi. Je suis étudiant et j'ai essayé d'écrire un programme sur la méthode de la bissection en Fortran90, pouvez- vous me dire si j'ai fais beaucoup de fautes (syntaxe, raisonnement...)?


    program bisection

    implicit none

    double precision function f(x)
    double precision:
    f=0.0384206*exp(-69.3147*log(51.4969*x-10.7175)**2)+0.00563536*exp(-10420.5*(x-0.251618)**2)+0.019148*exp(-11488.6*(x-0.298222)**2)+0.00370491*exp(-20424.2*(x-0.27026)**2)+0.00735134*exp(-45954.4*(x-0.322302)**2)+0.0659085*exp(-56733.8*(x-0.583288)**2)+0.0322327*exp(-12729.7*(x-0.707568)**2)+0.0155021*exp(-5106.04*(x-0.649312)**2)+0.00563539*exp(-5464.28*(x-0.629893)**2)+0.00584987*exp(-45954.4*(x-0.667177)**2)+0.00778034*exp(-1366.07*(x-0.998847)**2)+0.00263244*exp(-7978.2*(x-0.939038)**2)+0.00241796*exp(-2171.77*(x-0.892433)**2)+0.00198896*exp(-1366.07*(x-0.845052)**2)+0.00241795*exp(-1994.55*(x-0.793786)**2)+0.00284692*exp(-4487.69*(x-0.758056)**2)+0.00349041*exp(-3356.79*(x-0.557656)**2)+0.00284695*exp(-4781.99*(x-0.504837)**2)+0.00241795*exp(-1023.71*(x-0.424055)**2)+0.00263243*exp(-127651*(x-0.395316)**2)+0.00284693*exp(-93784.6*(x-0.446581)**2)+0.00241794*exp(-8687*(x-0.369683)**2)+0.00263244*exp(-37978.9*(x-0.349488)**2)+0.00434841*exp(-1.14886e+06*(x-0.338613)**2)+0.00327592*exp(-127651*(x-0.333953)**2)-0.0002
    end function f

    double precision:: a,b,c,d,e,imax,f_a,f_b,f_c
    integer:: i,imax
    10 continue
    write(*,*) 'enter the interval'
    read(*,*) a,b
    write(*,*) 'enter the precision'
    read(*,*) e
    write(*,*) 'enter the maximum number of iterations'
    read(*,*) imax

    f_a=f(a)
    f_b=f(b)
    f_c=f(c)

    if (f_a*f_b>0)
    exit
    write(*,*) 'no root in this interval'
    goto 10
    end if
    do i=1,imax
    c=a+(b-a)/2

    if (abs(a-c)/2<t)
    exit
    if (f_a*f_c<0)
    b=c
    if (f_a*f_c>0)
    a=c
    end if
    end do
    end program

    -----

  2. #2
    invite7303f824

    Lightbulb Re : Erreurs de débutant, programme de bissection en Fortran

    Bonjour,
    Je ne pratique plus le Fortran depuis de nombreuses années (Fortran IV et Fortran 74 était en service à cette époque) mais je suis toujours dans le développement et la maintenance des logiciels en ce moment je bosse sur Grands Systèmes IBM et c'est plutôt Cobol et PACBASE. Donc toujours dans les langages super moderne !

    Je me permets de te conseiller d'utiliser des noms de variables qui veulent dire quelque chose et non des "a, b, z, k, n1, n2, et autres" au moment où tu développes tu sais à quoi ça correspond mais quand tu reviens dessus quelques mois après tu n'y comprends plus rien.
    Avec les langages modernes il n'y a plus la limitation des lignes de code à 80 caractères (taille des cartes perforées). Il est possible de raconter sa vie sur une seule ligne quasiment.
    Ce que tu as mis en commentaire peut être un nom de variable ou de constante...

    Même remarque pour le nom de la fonction.

    Et dans la fonction (je pense que FORTRAN90 permet cela) :
    Code:
    f=0.0384206*exp(-69.3147*log(51.4969*x-10.7175)**2)
     +0.00563536*exp(-10420.5*(x-0.251618)**2)
     +0.019148*exp(-11488.6*(x-0.298222)**2)
     +0.00370491*exp(-20424.2*(x-0.27026)**2)
     +0.00735134*exp(-45954.4*(x-0.322302)**2)
     +0.0659085*exp(-56733.8*(x-0.583288)**2)
     +0.0322327*exp(-12729.7*(x-0.707568)**2)
     +0.0155021*exp(-5106.04*(x-0.649312)**2)
     +0.00563539*exp(-5464.28*(x-0.629893)**2)
     +0.00584987*exp(-45954.4*(x-0.667177)**2)
     +0.00778034*exp(-1366.07*(x-0.998847)**2)
     +0.00263244*exp(-7978.2*(x-0.939038)**2)
     +0.00241796*exp(-2171.77*(x-0.892433)**2)
     +0.00198896*exp(-1366.07*(x-0.845052)**2)
     +0.00241795*exp(-1994.55*(x-0.793786)**2)
     +0.00284692*exp(-4487.69*(x-0.758056)**2)
     +0.00349041*exp(-3356.79*(x-0.557656)**2)
     +0.00284695*exp(-4781.99*(x-0.504837)**2)
     +0.00241795*exp(-1023.71*(x-0.424055)**2)
     +0.00263243*exp(-127651*(x-0.395316)**2)
     +0.00284693*exp(-93784.6*(x-0.446581)**2)
     +0.00241794*exp(-8687*(x-0.369683)**2)
     +0.00263244*exp(-37978.9*(x-0.349488)**2)
     +0.00434841*exp(-1.14886e+06*(x-0.338613)**2)
     +0.00327592*exp(-127651*(x-0.333953)**2)
     -0.0002
    end function f
    Cette présentation serait beaucoup plus claire et je pense qu'il est possible d'ajouter des espaces pour encore améliorer la présentation et surtout faciliter la maintenance...
    Quant à corriger ce programme, c'est toi le scientifique matheux !

    Autre principe, si une donnée fixe (dite constante) et surtout si elle est utilisée plusieurs fois, même si ce n'est pas supporté par le langage on lui donne comme nom "C_NomExplicite" (C_ comme constante) on l'initialise en début de programme ou on lui donne une valeur à la déclaration. Cela permet de faire qu'une seule modif dans un programme de plusieurs centaines de lignes pour une donnée utilisée une vintaine de fois par exemple.
    Cette préconisation est indispensable pour les COBOLISTES où il existe dans les programmes une zone pour les déclarations de données et une zone pour le code exécutable où il est possible de préciser des valeurs numériques ou alphanumériques. et plusieurs valeurs identiques citées en zone de programmes sont déclarées en zone de données par le compilateur comme des constantes différentes d'où pertes de places en mémoire... Mais c'est une autre histoire.
    @+
    Jean-Michel

Discussions similaires

  1. Programme Fortran 90
    Par invitedd105795 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 25/05/2011, 19h29
  2. programme fortran/matlab
    Par invite78b1557a dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 11/03/2011, 13h00
  3. programme fortran
    Par invite221de832 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 12/01/2011, 17h07
  4. comment utiliser les résultats d'un programme fortran dans un autre programme
    Par invitedb78a3a3 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/09/2010, 19h21
  5. Programme Fortran
    Par invite852c2439 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 28/01/2009, 10h34