RECHERCHE DE ZÉRO D'UNE FONCTION PAR DICHOTOMIE

Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008 - 17 mai 2005 à 18:47
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008 - 18 oct. 2006 à 19:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31428-recherche-de-zero-d-une-fonction-par-dichotomie

fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
18 oct. 2006 à 19:15
je programme en VB.NET

si tu as des exemples ou des sources hesites pas je peux toujours voir comment on fait... car je vois pas du tout comment on pourais faire !
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
18 oct. 2006 à 18:37
Ca doit exister, des classes pour manipuler des nombres avec une précision fixée par l'utilisateur... Au pire c'est pas très compliqué à programmer.
Tu devrais en trouver à profusion sur cppfrance
fdiedler2000 Messages postés 383 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 1 décembre 2008
16 oct. 2006 à 23:09
c'est possible d'avoir plus de 28 decimales pour enncadrer la racine ? Avec la variable decimal je peux avoir maximum 28 decimales mais je voulais savoir si je pouvais en avoir plus ??

Merci
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
12 sept. 2006 à 17:47
La fonction doit être monotone au voisinage du zéro considéré, sinon tu prends la dérivée
Dans ton cas, les zéros sont aussi ceux de
2*x
et cos(x)
Par contre à programmer c'est plus chaud..
flodelarab Messages postés 2 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 11 septembre 2006
11 sept. 2006 à 18:00
Bon ben, je suis au regret de dire que ce code ne marche évidemment pas.

2 contres exemples flagrants:
x^2
sin(x)+1
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
20 mai 2005 à 21:19
oh interressant ça ncoder
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
20 mai 2005 à 18:10
Pour la fonction :

int fonction(char* fonction,int rang)
{
//calculs
return resultat;
}

J'ai réussi mais j'ai encore qques bugs avec la dichotomie....;)
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
19 mai 2005 à 17:53
Ok Ok merci
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
19 mai 2005 à 14:09
J'ai réadapté mon parser pour DevCPP, et mis à jour le zip
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
18 mai 2005 à 20:09
ah ah, meme pas besoin de se faire chier alors jad ?
jad_raad Messages postés 15 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 6 juin 2005
18 mai 2005 à 20:03
meme prob pour le parser
merci pour la remarque NCODER
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
18 mai 2005 à 18:51
Dev cpp me crée des erreurs bizarres lors de la compilation de ton parser Saros... Non pas que tu aies fait des erreurs mais Dev c++ a des pb...:/

Je vais essayer de "transcrire" pour qu'il comprenne...
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
18 mai 2005 à 18:46
jad_raad, ton code est bon, mais il pose qqes pb si l'intervalle est incorrect...( 2 zéros par ex...)
;)
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
18 mai 2005 à 18:23
Je regarde...;)
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
18 mai 2005 à 14:38
J'ai programmé un parser il y a peu, il utilise une conversion en notation suffixée (RPN)... sans vouloir faire de pub...
Il est commenté et tout et tout :
http://www.cppfrance.com/code.aspx?ID=28472
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
18 mai 2005 à 14:10
justement, c'est ce que je dis, mais je parle pas de la source Jad_Raad qui est un modele de présentation, je parle de ncoder (celle a l'origine du post)

Un parser (d'apres ce que je j'ai compris) est une sorte de fonction est capable d'avaler une fonction litterale et d'un ressortir le resultat.
ex:
int fonction(char* fonction,int rang)
{
//calculs
return resultat;
}

voila
@+ et bon codage
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
18 mai 2005 à 14:01
C'est quoi un parser ?

Il me semble qu'il n'y a pas nécessairement besoin d'un prototype si la fonction est définie avant d'être appellée, quand on lit le code de haut en bas. Il y aurait eu un problème si on l'avait mise après main.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
18 mai 2005 à 12:49
euh, ta changé la source ou je fumme, la fonction est définie apres la fonction main et en plus sans prototype .... Tu as reussi a compiler ça ?
Peux etre que je suis pas en état today, les cours c'est chiant.
Jarod1980 Messages postés 273 Date d'inscription samedi 5 juillet 2003 Statut Membre Dernière intervention 31 mars 2015 2
18 mai 2005 à 10:37
Salut,
J'ai moi aussi codé et publié sur ce site une source sur la recherche de zéro par la méthode de dichotomie il y a un bon moment de ça.
http://www.cppfrance.com/code.aspx?ID=27919

Ca peut être aussi t'interesser. Par contre pour le parser j'en ai pas sur vu sur site. Donc si tu décides de le faire ça serais un beau challenge!
jad_raad Messages postés 15 Date d'inscription lundi 14 mars 2005 Statut Membre Dernière intervention 6 juin 2005
17 mai 2005 à 23:15
j'ai lu tous vos commentaires ici mais est ce qu'il y a quelqu'un peut me donner un exmeple du source sur le parser
message pour l'auteur du source en fait ta methode pour la dichotomie et avec la definition des variables est tres compliqué et tu peux la faire autrement j'ai deja codé ce programme avant et je pense que cette methode va t'interesser


//dichotomie
#include<math.h>
#include<stdio.h>

double f(double x)//la fonction f
{
return (exp(2*x)-exp(x)-1);
}

int main()
{
int n;//n = nombre d'iteration
double a,b,c,e;//les points a et b sont l'intervalles à choisir
//e est la precision
printf("Saisir respectivement a,b,e:\n");
printf("a=");
scanf("%lf",&a);
printf("b=");
scanf("%lf",&b);
printf("e=");
scanf("%lf",&e);

n=0;
while(fabs(b-a)>e)
{
n++;

c=(a+b)/2;
if(f(a)*f(c)<0)
b=c;
else a=c;

}//end while
printf("\nle resultat est:%lf\niteration:%d\n",c,n);
system("pause");
}
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
17 mai 2005 à 20:41
Oui c'est parfaitement compréhensible, je ne savais pas que c'est possible. Par contre je maintiens que ce serait encore mieux avec un parser d'expression mathématiques ;)
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
17 mai 2005 à 19:49
Si ya 2 zéros dans l'intervalle donné ça renvoie "Intervalle incorrect" ...
ncoder Messages postés 244 Date d'inscription vendredi 6 mai 2005 Statut Membre Dernière intervention 6 avril 2008 1
17 mai 2005 à 19:36
Je peux déclarer une fonction à l'intérieur d'une autre mais alors je peux utiliser la fonction déclarée que par la fonction dans laquelle elle a été déclarée...

Euh, c'est compréhensible ce que j'ai mis ? :/
Cyberboy2054 Messages postés 173 Date d'inscription jeudi 20 décembre 2001 Statut Membre Dernière intervention 22 août 2008
17 mai 2005 à 18:47
Plus qu'à coder le parser d'expression qui va avec pour plus avoir a coder les fonctions en dur, et ce serait excellent :)
Un petit probleme par contre, mais qui vient de l'algo lui même: et si la fonction a plusieurs zéros dans l'intervalle donné :p ?
Sinon, je comprends pas comment le compilo accepte de compiler le code avec une declaration de fonction à l'intérieur d'une autre fonction (cf dichotomie dans main)
Voilou
Rejoignez-nous