Méthode de dichotomie

Résolu
LACHHABFADOUA Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
LACHHABFADOUA Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, svp j'ai essaye d'écrire un code qui permet de résourdre les fonctions non liénaire(f(x)=0) en utilisant la méthode de dichotomie.ms malheureusement, il ne renvoie aucun valeur aprés l'exécution ,svp aide moi a résourde ce prb et merci d'avance.
#include <stdio.h>
#include <stdlib.h>

double f(double x){
      double y;
      y=(x*x*x)-(x*x)+x+1;// la fonction x^3-x^2+x+1
      return y;}
void dichotomie(){
    double a,b,x;
    double E;// la précision epsilon

      printf("\ndonner l'interval [ a  b ] : ");
      scanf("%lf %lf",&a,&b);
      printf("donner E : ");
      scanf("%lf",&E);
do
{    
  x=(b-a)/2;
  if(f(a)*f(x)<0){
   b=x;
   
  }
   if(f(b)*f(x)<0)
  {
   a=x;
 }
} while(b-a > E);
printf(" %lf ",x);
 }



int main(int argc, char *argv[])
{
  dichotomie();

  system("PAUSE");
  return 0;
}




Configuration: Windows / Chrome 86.0.4240.198

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
"il ne renvoie aucun valeur": à quelle ligne penses-tu "retourner" une valeur?
quelle fonction devrait-elle retourner une valeur?
0
LACHHABFADOUA Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
Il faut qu'il retourne la valeur de la solution x la plus proche de alpha (f(alpha)=0), j'ai résolu ce prb , et j'ajoute d'autre instructions dans le code .
En tout cas Merci pour votre réponse :)
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > LACHHABFADOUA Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
si le problème est résolu, peux-tu marquer la discussion comme résolue?
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,
Le comportement de ta fonction dépend de l'intervalle que tu choisis. Il me semble qu'elle peut fonctionner dans certains cas à condition de remplacer la ligne 18 par
x = (a+b)/2;
, mais dans d'autres elle va se mettre dans une boucle infinie. Par exemple si
f(a)
,
f((a+b)/2)
et
f(b)
ont le même signe.
0
LACHHABFADOUA Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
merci pour la réponse ,j'ai résolu ce prb
0