一千萬個為什麽

搜索

在C中查找局部最大值

我想在這個Sin(x)函數的0到3.1416的區間內找到局部最大值。但它始終顯示0作為最大值.i.e最大值= 0;請幫我找出錯誤。

謝謝。

#include
#include
#include
#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;
}

最佳答案

調用 printf 函數時出錯。

您不應在此處使用%d 格式標識符,因為這意味著 printf 應輸出整數,而 maximum 變量為double。

改為使用%f ,程序將輸出正確的1.5708。

您可以在 Wikipedia printf 格式標識符的列表。 >。

轉載註明原文: 在C中查找局部最大值