二分法求近似方程的解的原理我就不讲了,就是类似于零点存在定理之类的东西。
所以直接以实例来讲述:
例1:用二分法求方程x^3+4x-10=0在区间[1,2]内的根(精确到0.00001)
首先我们要判断一下能不能用二分法来求解,把首末两端代入式子中去计算可以得出,代入1得-6,代入2得6,满足二分求方程的解;
#include <stdio.h>
#include <math.h>
double f(double x)
{
return pow(x,3)+4*x-10;
}
int main()
{
double a=1,b=2,limit=0.00001;//a,b为区间,limit为精确程度
if(f(a)*f(b)>0)
printf("无法用二分法求解\n"); //假设f(a)=7,f(b)=13,f(x)=0?
else
{
while((b-a)>limit)
{
if(f((a+b)/2)*f(b)<0) //一边为正,一边为负
a=(a+b)/2;
else //同号
b=(a+b)/2;
}
printf("%.5f\n%.5f",a,b);
}
return 0;
}
如果mid*右边小于0,那么则说明零点肯定是在右半部分,所以mid移到右边去。
如果mid*左边小于0,那么则说明零点肯定是在左半部分,所以mid移到左边去。
至于上面那个函数调用是直接返回了方程,这样就会比较简便了。
例二: