以下函数在函数的间隔(a,b)中返回零:f(x)= 5 * sin(x)* log(x),精度为eps。 我不明白我们有条件if(f(a)* f(x)<0的else部分。 我确实知道,如果我们有区间(a,b)并且f(a)* f(b)<0,则意味着该区间的数学函数为零,但是我不明白为什么使用二进制搜索会减少这种情况的右侧。
float zero(float a, float b, float eps){
float x = a + (b-a)/2;
float val = 5*sin(x)*log(x);
if(fabs(val) < eps){
return x;
}else{
float left = 5*sin(a)*log(a);
if(left*val < 0)
return zero(a, x, eps);
else
return zero(x, b, eps);
}
}
输入:0.9 2 0.01
输出:0.998828
答案 0 :(得分:2)
您正在使用bisection method查找零(也称为根)。使用此方法就像一次又一次地执行二进制搜索,直到该值小于epsilon。根据答案的符号,我们将继续本节的左侧或右侧,并优化此过程,直到该值足够小为止。 Here是这在数学上如何工作的详细示例。