2011-05-31 86 views
5

我想在这个Sin(x)函数的0到3.1416区间内找到局部最大值。但它始终显示0作为最大值.i.e最大值= 0;请帮我找到我的错误。查找局部最大值C

谢谢。

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

回答

3

您在调用printf函数时出错。

这里不应该使用%d格式标识符,因为这意味着printf应该输出一个整数,而maximum变量是双精度。

改为使用%f而您的程序将输出1.5708,这是正确的。

你可以在Wikipedia找到所有可能的printf格式标识符的列表。

+0

谢谢,我没看到它...非常感谢 – Gorge 2011-05-31 19:08:42

2

,如果您调试它,你可以看到,变量有正确的值,所以问题必须通过打印该值 %d从你的双让 - 整 - 使用%F