二分法的原理其实还是零点定理的应用。
首先必须要有一个初试区间,而且区间端点的函数值异号,由零点定理可以知道在次区间内至少存在一个零点。然后取区间的中间值,这样就把一个区间分成了两个区间,再运用零点定理判断零点存在与哪个区间中,再在含有零点的区间取中间值,就以这样一次一次的取中间值,判断零点是否存在,当区间两端点的差的绝对值符合精度是即可停止。
//————————————————————
//二分法求近似的方程根
#include <stdio.h>
#include <math.h>
double funY(double x);
int main(){
double x1 = -10, x2 = 10;//初试区间[-10,10]
double x;
double y1, y2,y;
y1 = funY(x1);
y2 = funY(x2);
while (y1*y2 < 0 && fabs(x2 - x1) >= 1e-6) {
x = (x1 + x2) / 2;
y = funY(x);
if (y*y1 < 0) {
x2 = x;
y2 = y;
}
else if (y*y2 < 0) {
x1 = x;
y1 = y;
}
else if (y == 0)
break;
printf("%lf\n", x);
}
}
double funY(double x) {
double y;
y = 2 * x*x*x - 4 * x*x + 3 * x - 6;
return y;
}