- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h> //pour cos, sin ou autre...
-
- int dichotomie ( double (*)(double), double, double, double*, double); //fonction
-
- int main (int argc, char *argv[])
- {
- double zero , //zero recherché
- a, b, //intervalle [a,b]
- precision ; //précision voulue
-
- printf("Exemple : \n");
-
- if ( dichotomie (sin, -1.0, 1.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;1]
- printf("Zero de la fonction sin dans l'intervalle [-1;1] a 1e-2 pres : \n%le\n", zero);
- }
- else printf("Erreur.\n");
-
- if ( dichotomie (sin, -1.0, 2.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;2]
- printf("Zero de la fonction sin dans l'intervalle [-1;2] a 1e-2 pres : \n%le\n", zero);
- }
- else printf("Erreur.\n");
-
- system("PAUSE");
- return 0;
- }
-
- int dichotomie ( double (*f)(double), double a, double b, double* zero, double precision)
- //f : fonction dont on veut trouver le zero
- //a et b : intervalle
- //zero : zero
- //precision : precision voulue
- {double m, //milieu de l'intervalle courant
- fm, //valeur de f(m)
- fa, fb ; //valeur de f(a) et de f(b)
-
- fa = (*f)(a);
- fb = (*f)(b);
- if (fa*fb>=0 || a>=b ) {printf("Intervalle incorrect.\n"); return -1;} //Intervalle incorrect
-
- while ( b-a > precision )
- {
- m = (b+a) / 2 ;
- fm = (*f)(m) ;
- if (fm==0) break; //zero trouvé
-
- if (fa*fm < 0) {
- b = m;
- fb = fm;
- }
- else {
- a = m;
- fa = fm;
- }
-
- }
-
- *zero = m;
- return 0;
- }
#include <stdio.h>
#include <stdlib.h>
#include <math.h> //pour cos, sin ou autre...
int dichotomie ( double (*)(double), double, double, double*, double); //fonction
int main (int argc, char *argv[])
{
double zero , //zero recherché
a, b, //intervalle [a,b]
precision ; //précision voulue
printf("Exemple : \n");
if ( dichotomie (sin, -1.0, 1.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;1]
printf("Zero de la fonction sin dans l'intervalle [-1;1] a 1e-2 pres : \n%le\n", zero);
}
else printf("Erreur.\n");
if ( dichotomie (sin, -1.0, 2.0, &zero, 1.0e-2) != -1 ) {// exemple avec sin dans [-1;2]
printf("Zero de la fonction sin dans l'intervalle [-1;2] a 1e-2 pres : \n%le\n", zero);
}
else printf("Erreur.\n");
system("PAUSE");
return 0;
}
int dichotomie ( double (*f)(double), double a, double b, double* zero, double precision)
//f : fonction dont on veut trouver le zero
//a et b : intervalle
//zero : zero
//precision : precision voulue
{double m, //milieu de l'intervalle courant
fm, //valeur de f(m)
fa, fb ; //valeur de f(a) et de f(b)
fa = (*f)(a);
fb = (*f)(b);
if (fa*fb>=0 || a>=b ) {printf("Intervalle incorrect.\n"); return -1;} //Intervalle incorrect
while ( b-a > precision )
{
m = (b+a) / 2 ;
fm = (*f)(m) ;
if (fm==0) break; //zero trouvé
if (fa*fm < 0) {
b = m;
fb = fm;
}
else {
a = m;
fa = fm;
}
}
*zero = m;
return 0;
}