一元多次方程近似根 二分法 C

二分法求解方程f(x)=0根 用二分法求解方程f(x)=0根的前提条件是:f(x)在求解的区间[a,b]上是连续的,且已知f(a)与f(b)异号,即 f(a)*f(b)<0

令[a0,b0]=[a,b],c0=(a0+b0)/2,若f(c0)=0,则c0为方程f(x)=0的根;否则,若f(a0)与f(c0)异号,即 f(a0)*f(c0)<0,则令[a1,b1]=[a0,c0];若f(b0)与f(c0)异号,即 f(b0)*f(c0)<0,则令[a1,b1]=[c0,b0]。
依此做下去,当发现f(cn)=0时,或区间[an,bn]足够小,比如| an-bn |<0.0001时,就认为找到了方程的根。
用二分法求一元非线性方程f(x)= x3/2+2x2-8=0(其中^表示幂运算)在区间[0,2]上的近似实根r,精确到0.0001.算法如下:

#include <stdio.h>
#include <math.h>
int main()
{
	float x,a,b,f1,f2,f;
	printf("input a,b\n");  
	scanf("%f%f",&a,&b);
  	f1=a*a*a/2+2*a*a-8; 
  	f2=b*b*b/2+2*b*b-8;
  	if(f1*f2>0)
	{
		printf("No root\n");
		return 0;
	}
	else
	{
		do
 		{
			x=(a+b)/2;
   			f=x*x*x/2+2*x*x-8;
   			
 			if(f==0)break;
 			else if(f1*f>0)
			{
				a=x;
				f1=f;
			}
 			else
			{
				b=x; 
				f2=f;
			}
		}while(fabs(a-b)>=1e-4); 
		printf("root=%f",x);
	}
}



猜你喜欢

转载自blog.csdn.net/weixin_44916213/article/details/112319315
今日推荐