Fonction en paramettres d'une autre

black light Messages postés 29 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
bonjour,

je doit écrire une fonction qui calcul la racine d'une autre fonction (mathématique predéfinie de type double qui a un double comme paramètres) avec le théorème des accroissement finis.voici mon code le résultat doit etre 1,.... mais le mien affiche 3.1...... !! svp

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double racine_f (double(*p)(double),float a, float b,int nbiteration)
{ int i; double fx,rslt;
if ((*p)(a)*(*p)(b)<0)///f(a)*f(b) doit etre <0
{ rslt=a+b/2; ///calcul de x0 la moitié de l'interval [a,b]
fx=(*p)(rslt); ///f(x0)
for(i=0;i<nbiteration;i++)
{
if(fx*(*p)(a)<0)
{
b=rslt;
rslt=a+b/2;
fx=(*p)(rslt);
}else if(fx*(*p)(b)>0)
{
a=rslt;
rslt=a+b/2;
fx=(*p)(rslt);
}
}
return(rslt);}return(0);
}

int main()
{ double y=racine_f(cos,(3.14/2),(3.15/2),5);
printf("%lf",y);
return 0;

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Je ne vois pas trop le rapport avec le théorème des accroissements finis ???
Ici il s'agit plutôt de la dichotomie. Tu divises l'intervalle en deux jusqu'à trouver la solution.
La moyenne ce n'est pas a+b/2 mais (a+b)/2.
Ensuite, l'algorithme est à revoir.
Un exemple plus concis :

Pour i de 0 à Iteration Faire
moy<-(a+b)/2
Si f(a)*f(moy) > 0 Alors
b <- moy
Sinon
a <- moy
Fin Si
Fin Pour

Ce n'est pas printf("%lf",...) mais printf("%f", ...)
Et, il faut mettre un \n avant le return 0; (par exemple printf("%f\n",...) ou alors fflush(stdout).
0