5 votes

Recherche d'un maximum local dans C

J'aimerais trouver le maximum local dans l'intervalle de 0 à 3,1416 pour cette fonction Sin(x). Mais elle affiche toujours 0 comme valeur maximale, c'est-à-dire que la valeur maximale est égale à 0. Veuillez m'aider à trouver mes erreurs.

merci.

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#ifndef max
    #define max(a,b) ((a)>(b)?(a):(b))
#endif
double f(double x){
return sin(x);
}
double bisection(double a,double b)
{
double Fa=f(a);
double Fb=f(b);
double midpoint=(a+b)/2;
double Fmidpoint=f(midpoint);
while(abs(b-a)>1e-6){
double left=(a+midpoint)/2;
double right=(b+midpoint)/2;
double Fleft=f(left);
double Fright=f(right);
if(midpoint>max(Fleft,Fright)){
    a=left;
    Fa=Fleft;
    b=right;
    Fb=Fright;
}
else{
    if(Fleft>Fright)
    {
        b=midpoint;
        Fb=Fmidpoint;
        midpoint=left;
        Fmidpoint=Fleft;
    }
    else{
        a=midpoint;
        Fa=Fmidpoint;
        midpoint=right;
        Fmidpoint=Fright;
    }
}
}
return midpoint;
}
int main(){
double maximum;
double rangeleft=0;
double rangeright=3.1416;
maximum=bisection(rangeleft,rangeright);
printf("%d",maximum);
return 0;
}

3voto

Yuri Stuken Points 2347

Vous avez commis une erreur en appelant le printf fonction.

Vous ne devez pas utiliser %d car cela signifie que l'identificateur de format printf devrait produire un entier alors que votre maximum est double.

Utilisation %f et votre programme produira 1.5708, ce qui est correct.

Vous pouvez trouver la liste de toutes les possibilités printf les identificateurs de format sur Wikipedia (en anglais) .

2voto

Martin Ch Points 732

Si vous déboguez, vous verrez que les variables ont une valeur correcte, donc le problème doit se situer au niveau de l'impression de cette valeur %d fait de votre double - entier - utilisez %f

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X