c++实现二分法求解函数根

非线性方程求解(二分法)

1.问题描述

非线性方程的求解除了牛顿迭代法之外,二分法也是一种简单高效的求解方法。在有的地方,二分法也称之为对分法。二分法是逐次把有根区间分半,直到找到根或有根区间的长度小于给定精度为止。

2.问题分析

对于函数f(x),如果x=c时,f(c)=0,那么把x=c称之为函数f(x)的零点。求解方程就是计算该方程所有的零点。对于二分法,假定非线性方程f(x)在区间(x,y)上连续。如果存在两个实数a和b属于区间(x,y),使得满足如下式子:

f(a)*f(b)<0

也就是说f(a)和f(b)异号,这就说明在区间(a,b)内一定有零点,也就是至少包含该方程的一个解。然后,我们计算f[(a+b)/2]。此时,假设如下的条件:

f(a)<0,f(b)>0,a<b

我们可以根据f[(a+b)/2]的值来判断方程解的位置:

如果f[(a+b)/2]=0,该点就是零点。

如果f[(a+b)/2]<0,则表示在区间((a+b)/2, b)内有零点,(a+b)/2=>a,重复前面的步骤来进行判断。

如果f[(a+b)/2]>0,则表示在区间(a,(a+b)/2)内有零点,(a+b)/2<=b,重复前面的步骤来进行判断。

这样,通过上述步骤就可以不断接近零点。由于非线性方程在很多时候都没有精确解,因此我们可以设置一个精度,当f(x)小于该精度时就认为找到了零点,也就是找到了方程的解。

这种通过每次把f(x)的零点所在区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值的方法,也就是二分法

 *输入参数a和b分别为待求解的区间  
*输入参数err为误差精度  
*返回值便是通过二分法求得的解  


阅读更多
上一篇jsp跳转到servlet路径问题
下一篇常用
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭