要使用二分法求解方程f(x)=x^3−x−1=0在区间[1, 2]内的一个实根,并且使得误差不超过0.0001,可以按照以下步骤进行计算:
- 确定初始区间[a, b],在本例中即为[1, 2]。
- 计算初始区间的中间点x,即x=(a+b)/2。
- 计算f(x)的值。
- 如果f(c)的绝对值小于指定的误差(即∣f(x)∣<0.0001),则停止计算,x即为所求的实根。
- 否则,根据f(x)的符号确定新的区间:
- 如果f(x)与f(a)的符号相同,说明实根位于区间[x, b]内,因此更新a=x;
- 否则,实根位于区间[a, c]内,因此更新b=x。
- 重复步骤2至步骤5,直到满足指定的误差要求。
下面是Java代码实现:
public class BinarySearch {
public static void main(String[] args) {
double a = 1.0;
double b = 2.0;
double x = (a + b) / 2;
int n = 1;
System.out.println("n a b x f(x)");
while(Math.abs(f(x)) >= 0.001) {
System.out.printf("%2d%11f%11f%11f%11f\n",n++, a, b, x, f(x));
x = (a + b) / 2;
if((f(x) >= 0 && f(a) >= 0) || (f(x) <= 0 && f(a) <= 0)) {
a = x;
} else {
b = x;
}
}
}
public static double f(double x) {
return Math.pow(x, 3) - x - 1;
}
}
运行结果:
n a b x f(x)
1 1.000000 2.000000 1.500000 0.875000
2 1.000000 1.500000 1.500000 0.875000
3 1.250000 1.500000 1.250000 -0.296875
4 1.250000 1.375000 1.375000 0.224609
5 1.312500 1.375000 1.312500 -0.051514
6 1.312500 1.343750 1.343750 0.082611
7 1.312500 1.328125 1.328125 0.014576
8 1.320313 1.328125 1.320313 -0.018711
9 1.324219 1.328125 1.324219 -0.002128
10 1.324219 1.326172 1.326172 0.006209
11 1.324219 1.325195 1.325195 0.002037