Нахождение локального максимума в C - PullRequest
5 голосов
/ 31 мая 2011

Я хотел бы найти локальный максимум в интервале от 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 голосов
/ 31 мая 2011

Ошибка при вызове функции printf.

Вы не должны использовать %d идентификатор формата здесь, потому что это означает, что printf должен выводить целое число, в то время как ваша переменная maximum равна double.

Вместо этого используйте %f, и ваша программа выведет 1.5708, что является правильным.

Список всех возможных идентификаторов формата printf можно найти в Wikipedia .

2 голосов
/ 31 мая 2011

Если бы вы отладили его, вы могли видеть, что переменные имеют правильное значение, поэтому проблема при печати должна заключаться в том, что значение% d получается из вашего двойного целого числа - используйте% f

...