在C语言中寻找局部最大值

5
我希望在0到3.1416的区间内找到这个Sin(x)函数的局部最大值。但它总是显示最大值为0,即最大值=0。请帮助我找到我的错误。
谢谢。
#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;
}
2个回答

3

在调用printf函数时出现错误。

您不应在此处使用%d格式标识符,因为它意味着printf应输出一个整数,而您的maximum变量是双精度浮点型。

改用%f,您的程序将输出正确的1.5708。

您可以在维基百科上找到所有可能的printf格式标识符列表。


2

如果您进行调试,您会发现变量的值是正确的,因此问题必须在打印此值时出现了错误。 %d代表将您的双精度浮点数转换为整数,请使用%f。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接