Fonction en paramettres d'une autre

Fermé
black light Messages postés 29 Date d'inscription lundi 28 octobre 2013 Statut Membre Dernière intervention 20 février 2015 - Modifié par black light le 5/11/2013 à 18:22
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 5 nov. 2013 à 22:22
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
5 nov. 2013 à 22:22
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