首页 > 试题广场 >

用牛顿迭代法求下面方程在1.5附近的根: 2x^3-4

[问答题]

用牛顿迭代法求下面方程在1.5附近的根:

2x^3-4x^2+3x-6=0

推荐

#include<stdio.h>

#indude<math.h>

int main( )

{double x1,x0,f,f1;

x1=1.5;

do

{x0=x1;

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

f1=(6*x0-8)*x0+3;

x1=x0-f/f1;

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

printf("The root of equation is %5.2f\n",x1):

return 0;

}


发表于 2018-03-25 10:57:43 回复(0)
#include<stdio.h>
#include<math.h>
int main(){
	float x=1.5,x0,f,f1;
	do{			//具体方法参考牛顿迭代法
		x0=x;
		f=2*pow(x0,3)-4*pow(x0,2)+3*x0-6;
		f1=6*pow(x0,2)-8*x0+3;
		x=x0-f/f1;
	}while(fabs(x-x0)>=1e-5);	//精确度1e-5 
	printf("函数在1.5附近的根为:%f",x);
	return 0;
} 

发表于 2021-01-17 17:05:30 回复(0)
#include <stdio.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 = 0;//根据题目所要求的根的范围确定起止点
 double end = 3.0;
 double average = 1.5;//中点
 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)
   return average;
  if(sgn(result - 0) < power(10,-3))//确定误差范围
   return average;
 }
}
int main(){
 printf("%.5lf\n", root());
}
发表于 2019-12-23 23:36:14 回复(0)