2011-05-31 91 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