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