在 (a,b) 上,若 f(x) 仅有一个零点,且在零点附近是单调的,则可以使用二分法。(不可以用二分法解决)
- 原理:在 f(x) 的零点附近 f(x) 异号,则可以利用这一特性来寻找零点。只需要不断地缩小区间范围,并且使得 f(x) 在区间端点上的值异号,当区间足够小时,得到了近似解。
- code
#include<stdio.h> #include<math.h> #define TOL 0.00001 //TOL为允许误差 double f(double x); //解决f(x)=0的问题 int main(){ int i, N0=1000; //N0是最大迭代次数 double a=0, b=1, p; //p是中点,a,b为区间端点 double FA, FP; FA = f(a); for(i=1; i<=N0; i++){ p = a+(b-a)/2; //compute pi FP = f(p); if(FP==0||(b-a)/2<TOL){ printf("%f is the root we find", p); break; } else{ printf("%d: the midpont is %f\n", i, p); i++; if(FP*FA>0){ //change a or b a