Fonction en paramettres d'une autre

black light Messages postés 36 Statut Membre -  
fiddy Messages postés 441 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

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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