二分法

来源:互联网 发布:老外 淘宝 编辑:程序博客网 时间:2024/05/17 03:38

对于在区间 [a , b] 上连续不断,且满足 f (a) f (b) < 0 的函数 y = f ( x) , 通过不断地把函数 f ( x) 的 零点所在的区间一分为二, 使区间的两个端点逐步逼近零点, 进而得到零点近似值的方法叫做二分法

相关习题:

《C程序设计》(第三版)6.13

《C程序设计教程》 5.13

Solution by Mutoo:

Code:
  1. #include<stdio.h>  
  2. #include<math.h>  
  3.   
  4. double F(double x) // 构造原函数  
  5. {  
  6.     return 2*pow(x,3)-4*pow(x,2)+3*x-6;    // f(x)=2x^3-4x^2+3x-6  
  7. }  
  8.   
  9. void main()  
  10. {  
  11.     double left,right,mid;  
  12.     left = -10; // 初始化左右边界  
  13.     right = 10;  
  14.      
  15.     do  
  16.     {  
  17.         mid = (left+right)/2;  
  18.         if(F(left)==0) mid=left;  
  19.         if(F(right)==0) mid=right;  
  20.         if(F(mid)==0) break// 如果边界或中间为零点,直接跳出循环  
  21.         else if(F(left)*F(mid)<0) right=mid; // 否则定义新的边界使范围缩小  
  22.         else if(F(mid)*F(right)<0) left=mid;  
  23.         else  
  24.         {  
  25.             printf("Error!"); // 如果给定的边界不能使函数的值异号,则无法用二分法解题=>报错。  
  26.             break;  
  27.         }  
  28.     }while(fabs(F(mid))>10e-6); // 误差指导  
  29.     printf("root=%lf/n",mid);  
  30. }