当前位置:文档之家› 二分法求方程的根

二分法求方程的根

【例5.21】二分法求方程的根。

求方程x3+4x2+x+1=0在[-5,5]之间的近似根,误差为10-4。

若函数有实根,则函数的曲线应和x轴有交点,在根附近的左右区间内,函数的值的符号应当相反。

利用这一原理,逐步缩小区间的范围,保持在区间的两个端点处函数值的符号相反,就可以逐步逼近函数的根。

设f (x)在[a, b]上连续,且f (a) f (b)<0, 找使f (x)=0的点。

如图5-7-2所示。

图5-7-2 二分法示意图
二分法的步骤如下:
①取区间[a, b]中点x=(a+b)/2。

②若f (x)=0, 即(a+b)/2为方程的根。

③否则,若f (x)与f (a)同号,则变区间为[x,b];异号,则变区间为[a,x]。

④重复①~③各步,直到取到近似根为止。

#include "stdio.h"
#include "math.h"
main()
{ float a,b,x;
float fa,fb,fx;
a=-5;
b=5;
fa=a*a*a+4*a*a+a+1;
fb=b*b*b+4*b*b+b+1;
do
{ x=(a+b)/2;
fx=x*x*x+4*x*x+x+1;
if(fa*fx<0)
{ b=x;
fb=b*b*b+4*b*b+b+1;
}
else
{ a=x;
fa=a*a*a+4*a*a+a+1;
}
}while(fabs(fa-fb)>1e-4);
printf("x=%f\n",(a+b)/2);
printf("f(%f)=%f",(a+b)/2,fa);
}
运行结果:
x=-3.806303
f(-3.806303)=-0.000059
经过多次迭代,当x= -3.806 303时,f(x)的结果为-0.000 059已经接近0,误差小于10- 4数量级。

读者可进行简单的改写,输出每一次的迭代结果。

相关主题