exercice 14 // la méthode de dichotomie

exercice 14:  

écrire un programme qui trouve la solution d'une équation par la méthode de dichotomie.

pour info:

La dichotomie (« couper en deux » en grec) est, en algorithmique, un processus itératif ou récursif de recherche où, à chaque étape, on coupe en deux parties (pas forcément égales) un espace de recherche qui devient restreint à l'une de ces deux parties.

On suppose bien sûr qu'il existe un test relativement simple permettant à chaque étape de déterminer l'une des deux parties dans laquelle se trouve une solution. Pour optimiser le nombre d'itérations nécessaires, on s'arrangera pour choisir à chaque étape deux parties sensiblement de la même « taille » (pour un concept de « taille » approprié au problème), le nombre total d'itérations nécessaires à la complétion de l'algorithme étant alors logarithmique en la taille totale du problème initial.

L'algorithme s'applique typiquement à la recherche d'un élément dans un ensemble fini ordonné et organisé en séquence. La fonction de « taille » du problème sera alors le cardinal de l'espace (fini) de recherche, et à chaque étape, on coupera l'espace de recherche en deux parties de même taille (à un élément près) de part et d'autre de l'élément médian.

La dichotomie peut être vue comme une variante simplifiée de la stratégie plus générale diviser pour régner appliquée au cas particulier de la recherche itérative d'une solution, où le traitement des sous-espaces exclus de la recherche et de sa recombinaison peuvent être court-circuités.

programme 12:


#include<stdio.h>
#include<conio.h>
#include<math.h>
/* ici vous entrez votre fonction*/
float f(float x){
      return exp(x)-x*x+3*x-2;
      }
main()
{
int k;
float p,a,b;
/* vous entrez l'intervalle de recherche*/
printf("donnez l'intervalle de recherche:\n");
scanf("%f %f",&a,&b);
/* vous faites entrez la precision*/
printf("choisissez la precision <de 1 a 10>:\n");
scanf("%d",&k);
p=(a+b)/2.;
if (f(a)==0) printf("la valeur approchée de la solution est %f",f(a));
if (f(b)==0) printf("la valeur approchée de la solution est %f",f(b));
if (f(a)*f(b)<0){
                 while (fabs(a-b)>pow(10,-k)){ /* fabs c'est a fonction valeur absolue qui se trouve dans la bibliotheque "maths.h"*/
                       
                       if(f(p)==0) printf("\nla valeur approchée de la solution est %f",p);
                       if(f(a)*f(p)<0) b=p;
                       if(f(p)*f(b)<0) a=p;
                       p=(a+b)/2.;
                       }
                      
                       printf("\nla valeur approche de la solution est compris entre %f et %f",b,a);
                       
                       }
                       else printf("\n choisissez un autre intervalle");
                       getch();
                       }


1 vote. Moyenne 5.00 sur 5.