C语言编程,指针,编写函数,用牛顿迭代法求方程f(x)=2x3-4x2+3x-6=0在1.5附近的根。请给出运算结果

牛顿迭代公式为:xn+1=xn-f(xn)/f'(xn)
其中,f'(xn) 是f在xn处的导数。
结束条件:|f(xn+1)|< eps与|xn+1-xn|< eps同时成立(eps是一个很小的正数,从键盘入)
同时编写主函数,在主函数中调用并输出函数值。
函数原型如下:
double root(double (*f)(double),double (*f1)(double),double x,double eps);
其中,形参f接收原函数f(x),形参f1接收导函数f'(x)

如输入:
1e-8
如输出结果为:
2.000000

#include <stdio.h>
#include <math.h>
double root(double (*f)(double),double (*f1)(double), double x,double eps);
double fx(double x){
return 2*x*x*x-4*x*x+3*x-6;
}
double fp(double x){
return 6*x*x-8*x+3;
}
int main()
{
double x=1.5,y,eps=1e-08;
printf("input eps 1e-08\n"); scanf("%lf",&eps);
y = root(fx,fp,x,eps);
printf("%lf\n",y);

return 0;
}
double root(double (*f)(double x),double (*f1)(double x), double x,double eps){
double x0,x1;
x0=x;
while(1){
x1= x0 - (*f)(x0)/ (*f1)(x0);
if (fabs(x1-x0)<eps) break;
x0=x1;
};
return x1;
}

运行与输出:
input eps 1e-08
1e-08
2.000000
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-05-18
2x³-4x²+3x-6=0
(2x³-4x²)+(3x-6)=0
2x²(x-2)+3(x-2)=0
(x-2)(2x²+3)=0
x1=2
2x²+3=0
2x²=-3
x²=-3/2
x=±√6i/2
相似回答