C中的函数二分法-函数不';不要在任何一个间隔内改变符号

C中的函数二分法-函数不';不要在任何一个间隔内改变符号,c,function,C,Function,大家好,谢谢阅读 我遇到了一个问题,它要求我在C语言中实现二分法。我知道它相当容易完成,但给我的任务增加了一点“扭曲” 二分法用于求函数的根。它的工作原理是将给定的间隔减半为两个子间隔。我们首先检查函数在三个点(A-开始,C-中点,B-结束)中的任何一个点是否为零,如果不是,我们然后确定函数在哪个子间隔改变符号。例如,如果f(A)*f(C)0.001){ C=(A+B)/2; if(fabs(f(A))如果你的函数对分(A,B)在从A到B的区间内搜索根,并且您已经计算了一个中点C,您可以做什么来

大家好,谢谢阅读

我遇到了一个问题,它要求我在C语言中实现二分法。我知道它相当容易完成,但给我的任务增加了一点“扭曲”

二分法用于求函数的根。它的工作原理是将给定的间隔减半为两个子间隔。我们首先检查函数在三个点(A-开始,C-中点,B-结束)中的任何一个点是否为零,如果不是,我们然后确定函数在哪个子间隔改变符号。例如,如果f(A)*f(C)0.001){ C=(A+B)/2;
if(fabs(f(A))如果你的函数
对分(A,B)
在从
A
B
的区间内搜索根,并且您已经计算了一个中点
C
,您可以做什么来搜索从
A
C
的根,以及从
C
B
的根?您能想出一个可以进行的函数调用来搜索根从
A
C
的时间间隔?我明白了。我在递归方面遇到了一些问题。谢谢。

double bisect(double A, double B)
{
    double epsilon=0.0001
    double C;
    while(fabs(B-A)>0.001) {
        C=(A+B)/2;



         if(fabs(f(A))<epsilon) {   //root is A
            return A;

        }

        else if(fabs(f(B))<epsilon) { //root is B
            return B;
        }

        else if(fabs(f(C))<epsilon) { // root is C
            return C;
        }

        if(f(A)*f(C)<0 && f(C)*f(B)<0) { // function changes sign in both subintervals
                                         //if that is the case, we take the first one
            B=C;
        }

        else if(f(C)*f(B)<0) { // the function changes signs only in second interval
            A=C;
        }
        else {
                    // ?? here comes the part I am having problems implementing.
          A=H;
           }


    }



    return 0;
}