首页 > 试题广场 >

用二分法求下面方程在(一10,10)之间的根: 2x^

[问答题]
用二分法求下面方程在(一10,10)之间的根:
2x^3-4x^2+3x-6=0
推荐

#include<stdio.h>

#indude<math.h>

int main()

{float x0,x1,x2,fx0,fx1,fx2;

do

{printf("enter x1 & x2:");

scanf("%f,%f",&x1,&x2);

fx1=x1*((2*x1-4)*x1+3)-6;

fx2=x2*((2*x2-4)*x2+3)-6;

}while(fx1*fx2>0);

do

{x0=(x1+x2)/2;

fx0=x0*((2*x0-4)*x0+3)-6;

if((fx0*fx1)<0)

{x2=x0;

fx2=fx0;

}

else

{x1=x0;

fx1=fx0;

}

}while(fabs(fx0)>=1e-5);

printf("x=%6.2f\n”,x0);

return 0;

}


发表于 2018-03-25 10:57:49 回复(0)
#include<stdio.h> 
#include<math.h>
int fun(float low,float high);
int main(){
	float low=-10,high=10;
	printf("方程2x^3-4x^2+3x-6=0在(一10,10)之间的根:");
	fun(low,high);
	return 0;
}
	//递归函数 
	int fun(float low,float high){
		float mid;
			mid=(high+low)/2;
			float f0=2*low*low*low-4*low*low+3*low-6;
			float f=2*mid*mid*mid-4*mid*mid+3*mid-6;
			
			if(fabs(f)<1e-5){	//求得解 
				printf("%f  ",mid);
				return 0;
			}
			
			float f1=2*high*high*high-4*high*high+3*high-6;
			if(f0*f<0)	//递归左半边 
				fun(low,mid);
			if(f*f1<0)	//递归右半边 
				fun(mid,high);
	}

发表于 2021-01-17 18:14:03 回复(0)
#include <stdio.h>//求方程的根用二分法去逼近
#include <stdlib.h>
double sgn(double x){//模拟绝对值函数
 if(x > 0)
  return x;
 else
  return -1 * x;
}
double power(double x,int n){//模拟幂函数
 double k = 1.0;
 if(n > 0){//增长型幂函数
  for(int i = 0; i < n; i ++){
   k = k * x;
  }
 }
 else{//衰减性幂函数
  for(int i = 0; i > n; i --){
   k = k / x;
  }
 }
 return k;
}
double *root(){
 double start = -10;//根据题目所要求的根的范围确定起止点
 double end = 10;
 double average = (start + end) / 2;//中点
 double* record = malloc(sizeof(double) * 1);
    int t = 0;
 while(1){
  double result = 2 * power(average, 3) - 4 * power(average, 2) + 3 * average - 6;
  //记录函数结果
  if(result > 0)//这个边界的缩小要根据函数变化来判断,result大于零,可能是end缩,也可能是start缩
   end = average;
  if(result < 0)
   start = average;
  average = (start + end) / 2.0;
  if(result == 0){
   *record = average;
   t ++;
  }
  if(sgn(result - 0) < power(10,-1)){//确定误差范围
   *record  = average;
   t ++;
  }
  if(t == 1)
      break;
 }
 *(record + t) = 0;
 return record;
 free(record);
}
int main(){
 printf("%.5lf\n", *root());
}
发表于 2019-12-24 00:05:55 回复(0)