指向函数的指针
编写函数,用牛顿迭代法求方程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>
int main()
{
double root(double(*f)(double), double(*f1)(double), double x, double eps);
double y(double);
double d(double);
double x = 1.5;
double eps;
scanf_s("%lf\n",&eps);
double h;
h=root(y, d, x, eps);
printf("%f\n", h);
}
double root(double(*f)(double), double(*f1)(double), double x, double eps)
{
while (fabs((*f)(x) / (*f1)(x)) >= eps)
{
x = x - (*f)(x) / (*f1)(x);
}
if (fabs((*f)(x)) < eps)
return x;
else
do
{
x = x - (*f)(x) / (*f1)(x);
} while (fabs((*f)(x))>=eps);
return x;
}
double y(double x)
{
double z;
z= 2*x*x*x - 4*x*x + 3*x - 6;
return z;
}
double d(double x)
{
double r;
r = 6*x*x - 8*x + 3;
return r;
}