Algorithme de la méthode de la bissection en langage C :
Le but est de trouver la solution de l’équation Ln(x) = 0 (i.e. vérifier que x = 1.0 comme solution).
L’intervalle est [0,5].
Le but est de trouver la solution de l’équation Ln(x) = 0 (i.e. vérifier que x = 1.0 comme solution).
L’intervalle est [0,5].
#include <stdio.h> #include <stdlib.h> #include<math.h> #define A 0.0 // Borne Inférieure #define B 5.0 // Borne Supérieure #define N 100 // Nombre d'itérations #define EPS 1.0e-15 // Précision demandée double f(double x) { return log(x); // fonction à tester Ln(x) = 0 dans [0, 5] } void main() { double *a, *b, *x; a = (double *)calloc(N,sizeof(double)); b = (double *)calloc(N,sizeof(double)); x = (double *)calloc(N,sizeof(double)); a[0] = A; // Initialisation du pointeur *a b[0] = B; // Initialisation du pointeur *b x[0] = (a[0]+b[0])/2.0; // Initialisation du pointeur *x int k=0; while( k>=0 &&fabs(b[k] - a[k]) > EPS ) // Arrêt si un des deux critères est faux { if( f(x[k])*f(a[k]) < 0 ) { a[k+1] = a[k]; b[k+1] = x[k]; } if( f(x[k])*f(b[k]) < 0 ) { a[k+1] = x[k]; b[k+1] = b[k]; } x[k+1] = (a[k+1]+b[k+1])/2.0; printf("K = %d \t X = %18.16g\n", k, x[k]); // Impression du nombre d'itérations, et la solution à Ln(x) = 0 k++; } delete [] a; // Libération de la mémoire delete [] b; // Libération de la mémoire delete [] x; // Libération de la mémoire } |
Aucun commentaire:
Enregistrer un commentaire