非线性方程求解(二分法)
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)的零点所在区间收缩一半的方法,使区间的两个端点逐步迫近函数的零点,以求得零点的近似值的方法,也就是二分法。
*输入参数err为误差精度
*返回值便是通过二分法求得的解