用二分法求方程的近似解
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; }