programme informatique pour résoudre f(x)=0
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

programme informatique pour résoudre f(x)=0



  1. #1
    inviteb71d221c

    programme informatique pour résoudre f(x)=0


    ------

    Bonjour
    je dois faire un programme en language pascal pour résoudre f(x)=0 sur un intervalle [a;b] donnée pour l'utilisateur, où f est une fonction monotone sur cet intervalle. Voila le texte de mon programme mais il ne fonctionne pas et je ne comprend pas pourquoi.

    PROGRAM resolvdicho;

    VAR
    a,b,m,c,d:real;

    FUNCTION f (x:real):real;
    VAR
    y:real;
    BEGIN
    y:=x-2;
    f:=y;
    END;

    FUNCTION dichotomie (a,b:real):real;
    VAR
    Inf,Sup:real;
    m:real;
    BEGIN
    Inf:=a;
    Sup:=b;
    REPEAT
    m:=(Inf+Sup)/2;
    IF f(m)*f(a)<0 THEN Sup:=m
    ELSE Inf:=m;
    Until Abs(f(Sup)-f(Inf))<0.00001;

    END;

    BEGIN
    writeln('Entrez la borne inf‚rieure a : ');readln(a);
    writeln('Entrez la borne sup‚rieure b : ');readln(b);

    If f(b)*f(a)>0 then writeln('Il n''y a pas de solution.')
    Else if f(a)*f(b)=0 then
    IF f(a)=f(b) THEN writeln('La solution est [',a,';',b,'].')
    ELSE IF f(a)=0 THEN writeln('La solution est ',a,'.')
    ELSE IF f(b)=0 THEN writeln('La solution est ',b,'.')
    else writeln('marche pas')
    Else Begin m:=dichotomie(a,b);
    writeln('La solution est : ',m,'.');
    End;
    END.


    Cordialement.
    MG

    -----

  2. #2
    invite7553e94d

    Re : programme informatique pour résoudre f(x)=0

    Bonjour.
    Il y a une erreur ici
    Code:
    IF f(m)*f(a)<0 THEN Sup:=m
    Remplace a par Inf, ça devrait déjà faire avancer le Schmilblick.

    Edit : tu oublies de retourner une valeur aussi

    Cordialement,

  3. #3
    invitea6f35777

    Re : programme informatique pour résoudre f(x)=0

    Salut

    Oui le problème doit être que la fonction dichotomie ne renvoie pas de valeur, par contre je pense que le
    Code:
     IF f(m)*f(a)<0 THEN Sup:=m
    est correct, ça dit que si f à des signes distincts en a et en m alors f s'annule entre a et m et donc la solution se trouve forcément entre a et m et le nouvelle intervalle de recherche est Inf:=a (rien à faire) et Sup:=m.

  4. #4
    zoup1

    Re : programme informatique pour résoudre f(x)=0

    Citation Envoyé par KerLannais Voir le message
    Salut

    Oui le problème doit être que la fonction dichotomie ne renvoie pas de valeur, par contre je pense que le
    Code:
     IF f(m)*f(a)<0 THEN Sup:=m
    est correct, ça dit que si f à des signes distincts en a et en m alors f s'annule entre a et m et donc la solution se trouve forcément entre a et m et le nouvelle intervalle de recherche est Inf:=a (rien à faire) et Sup:=m.
    Ce serait correct si on remplace a par Inf
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  5. A voir en vidéo sur Futura
  6. #5
    invitea6f35777

    Re : programme informatique pour résoudre f(x)=0

    Re

    Pour répondre à Zoup1, ce serait certe plus "classique" d'utiliser la condition
    Code:
    f(Inf)*f(m)<0
    mais la condition
    Code:
    f(a)*f(m)<0
    marche tout aussi bien. En fait il est facile de montrer qu'à chaque étape f(a) et f(Inf) ont le même signe. En fait il est préférable d'utiliser f(a) plutôt que f(inf) car f(inf) pourrait être nul et il n'y a pas de code qui vérifie la nullité de f(m) et quand on y réfléchit bien, comme c'est un inférieur strict dans la condition, paradoxalement le programme pourrait planter si on utilisait f(Inf) à la place de f(a) (par compte il y a un bout de code qui vérifie si f(a) est nul).

  7. #6
    zoup1

    Re : programme informatique pour résoudre f(x)=0

    Citation Envoyé par KerLannais Voir le message
    Re

    Pour répondre à Zoup1, ce serait certe plus "classique" d'utiliser la condition
    Code:
    f(Inf)*f(m)<0
    mais la condition
    Code:
    f(a)*f(m)<0
    marche tout aussi bien. En fait il est facile de montrer qu'à chaque étape f(a) et f(Inf) ont le même signe.
    Effectivement, tu as raison.
    En fait il est préférable d'utiliser f(a) plutôt que f(inf) car f(inf) pourrait être nul et il n'y a pas de code qui vérifie la nullité de f(m) et quand on y réfléchit bien, comme c'est un inférieur strict dans la condition, paradoxalement le programme pourrait planter si on utilisait f(Inf) à la place de f(a) (par compte il y a un bout de code qui vérifie si f(a) est nul).
    Ben non en fait, cela ne change pas grand chose, il n'y a pas de risque de boucle infini. Quel que soit la configuration, on réduit toujours l'intervalle de moitié et on s'arrête lorsqu'il devient plus petit qu'une valeur fixée.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  8. #7
    invitea6f35777

    Re : programme informatique pour résoudre f(x)=0

    Re

    Le risque ce n'est pas d'avoir une boucle infinie au vu du test d'arrêt mais que le programme ne calcul pas du tout la bonne solution.

    Si f(Inf)=0, cela veux dire que la solution est Inf, le test f(Inf)f(m) donne 0 qui n'est pas strictement négatif et donc on va continuer à chercher la solution dans l'intervalle [f(m),f(Sup)] ce qui est très mauvais. Ca peut très bien arriver, il suffit qu'à un moment donné f(m)=0 alors le test f(Inf)f(m) dit qu'à la prochaine étape Inf=m et f(Inf)=0. Par exemple si tu prends a=1 et b=3 dans le programme qui est donné, avec la condition f(Inf)f(m) le programme s'arrètera mais tu auras une erreurs sur la solution d'au moins 0.25 ce qui est très mauvais.

  9. #8
    zoup1

    Re : programme informatique pour résoudre f(x)=0

    J'ai peut-être mal compris le fonctionnement, mais ce que je vois c'est qu'à l'étape d'après, si f((Inf)=0 alors on change la valeur de Sup pour la mettre à m et cela jusqu'à ce que Inf-Sup soit plus petit que 10^-5.

    Quelque soit le cas de figure la procédure donnée ici ne prétend pas donner un résultat avec une meilleure précision.
    Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.

  10. #9
    invitea6f35777

    Re : programme informatique pour résoudre f(x)=0

    Re

    Ce que je voulais dire c'est que dans le morceaux de code
    Code:
    IF f(Inf)*f(m)<0 THEN bidule ELSE truc
    si f(Inf)=0 alors c'est truc qui est exécuté et non pas bidule de sorte que tu ne fais pas Sup:=m mais tu fais Inf:=m comme la solution était l'ancien Inf, la solution se trouve à une distance qui peut être pas du tout négligeable (0.25 dans l'exemple que je t'ai donné ce qui est bcp plus grand que 10^-5) du nouvel intervalle dans lequel on continue à chercher. Le fait que la solution ne se trouve plus dans l'intervalle ca veut dire que la dichotomie à foiré

  11. #10
    invite7553e94d

    Re : programme informatique pour résoudre f(x)=0

    Au temps pour moi j'ai lu un peu trop rapidement (j'ai cru à une fonction récursive :d)
    Le problème ne viendrait-il pas tout simplement qu'il n'y ait pas de retour de fonction ?

    Cordialement,

  12. #11
    erik

    Re : programme informatique pour résoudre f(x)=0

    Un autre avantage de la forme f(a)*f(m)<0 par rapport à f(Inf)*f(m)<0 est que f(a) peut n'être évaluée qu'une seule fois avant le REPEAT alors que f(Inf) doit être recalculée à chaque itération.

    Le problème ne viendrait-il pas tout simplement qu'il n'y ait pas de retour de fonction ?
    Fortement probable

  13. #12
    invitea6f35777

    Re : programme informatique pour résoudre f(x)=0

    Si c'est ça et SEULEMENT ça, je disais juste que toutes les autres modifications suggérées me semblait mal venues justement.

Discussions similaires

  1. Programme de bio-informatique
    Par invite6709e8d6 dans le forum Biologie
    Réponses: 9
    Dernier message: 08/01/2009, 15h35
  2. Programme DUT Informatique
    Par invitedae5e039 dans le forum Orientation après le BAC
    Réponses: 3
    Dernier message: 27/06/2008, 16h10
  3. programme informatique de détection des exoplanetes.
    Par invitefc84ad56 dans le forum Archives
    Réponses: 1
    Dernier message: 25/01/2006, 14h14