http://www.pep.com.cn/gzsx/jszx_1/czsxtbjxzy/xkbsyjc/jxsj/bx1/201008/t20100826_757055.htm
我们已经知道,函数在区间(2,3)内有零点,且<0,>0.进一步的问题是,如何找出这个零点?
1.二分法的意义
对于在区间[,]上连续不断且满足·<0的函数,通过不断地把函数的零点所在的 区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫做二分法(bisection).
2.给定精确度,用二分法求函数零点近似值的步骤如下:
(1)确定区间,,验证·<0,给定精确度;
(2)求区间,的中点;
(3)计算:
1若=,则就是函数的零点;
2若·<0,则令=(此时零点);
3若·<0,则令=(此时零点);
(4)判断是否达到精确度;即若<,则得到零点近似值(或);否则重复步骤2-4.
#include<cstdio> #include<cstring> #include<iostream> #include<string> #include<algorithm> #include<cmath> using namespace std; //lnx + 2x - 6 = 0 //x=3 >0 //x=2 <0 double eps=1e-6; int sgn(double x) { if(x<-eps) return -1; else return x>eps; } int main() { double x1=2, x2=3; while(sgn(x1-x2)) { double x=(x1+x2)/2; cout<<x<<endl; int si=sgn(log(x)+2*x-6); if(si>0) x2=x; else if(si<0) x1=x; else//==0 { x1=x; break; } } cout<<x1<<endl; return 0; }