Méthode de dichotomie

Résolu
LACHHABFADOUA Messages postés 24 Statut Membre -  
LACHHABFADOUA Messages postés 24 Statut Membre -
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 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 587
 
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 24 Statut Membre
 
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 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 587 > LACHHABFADOUA Messages postés 24 Statut Membre
 
si le problème est résolu, peux-tu marquer la discussion comme résolue?
0
Dalfab Messages postés 638 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 24 Statut Membre
 
merci pour la réponse ,j'ai résolu ce prb
0