对于在区间 [a , b] 上连续不断,且满足 f (a) f (b) < 0 的函数 y = f ( x) , 通过不断地把函数 f ( x) 的 零点所在的区间一分为二, 使区间的两个端点逐步逼近零点, 进而得到零点近似值的方法叫做二分法。
相关习题:
《C程序设计》(第三版)6.13
《C程序设计教程》 5.13
Solution by Mutoo:
- #include<stdio.h>
- #include<math.h>
- double F(double x) // 构造原函数
- {
- return 2*pow(x,3)-4*pow(x,2)+3*x-6; // f(x)=2x^3-4x^2+3x-6
- }
- void main()
- {
- double left,right,mid;
- left = -10; // 初始化左右边界
- right = 10;
- do
- {
- mid = (left+right)/2;
- if(F(left)==0) mid=left;
- if(F(right)==0) mid=right;
- if(F(mid)==0) break; // 如果边界或中间为零点,直接跳出循环
- else if(F(left)*F(mid)<0) right=mid; // 否则定义新的边界使范围缩小
- else if(F(mid)*F(right)<0) left=mid;
- else
- {
- printf("Error!"); // 如果给定的边界不能使函数的值异号,则无法用二分法解题=>报错。
- break;
- }
- }while(fabs(F(mid))>10e-6); // 误差指导
- printf("root=%lf/n",mid);
- }