Méthode du point fixe avec un pointeur de fonction
Bonjour,
pouvez vous m'aider à comprendre pourquoi ce code ne donne pas le bon résultat ?
J'attends 0.66 comme solution finale, et j'obtiens quelque chose qui varie avec la valeur de départ de x.
Merci beaucoup.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define a 3.0
#define b -5.0
#define c 2.0
/*
* Il s'agit ici de resoudre par le point fixe
* l'equation du second degre 3x^2 - 5x + 2
* La solution exacte est donnee par
* delta = 25 - 24 = 1
* 5 - 1 5 + 1
* s1 = -------- s2 = ---------
* 6 6
*
* s1 = 1 ; s2 = (2/3)
*
* La methode du point fixe resout une equation
* du type x=f(x)
*
* Ici, on cherche
* -2
* x = --------
* 3x - 5
*
*/
/*prototypes*/
double fonction(double) ;
double point_fixe(double (*)(double), double) ;
int main(void)
{
/* fonction principale */
double x_depart = 0. ;
puts("resolution de 3x**2 + 5x + 2 = 0 par le point fixe") ;
printf("la solution est %lf",point_fixe(&fonction, x_depart)) ;
return 0 ;
}
double point_fixe( double (*a_function)(double) , double start )
{
/*algorithme itératif du point fixe x_n+1 = f(x_n)*/
double epsilon ;
double x_0 ;
double x_1 ;
epsilon = 1 ;
x_0 = start ;
while ( epsilon > 0.00001)
{
x_1 = x_0 ;
x_0 = (*a_function)(x_0) ;
epsilon = abs( x_0 - x_1 ) ;
}
return x_0 ;
}
double fonction(double x)
{
/*fonction a utiliser pour trouver la racine du polynome*/
double resultat ;
resultat = ( -c / ( a*x + b ) ) ;
return resultat ;
} |