牛顿迭送法

来源:百度知道 编辑:UC知道 时间:2024/09/24 08:54:36
#include<stdio.h>
#include<math.h>
double f(double a,double b,double c,double d,double x)
{ return a*x*x*x+b*x*x+c*x+d;
}
double df(double a,double b,double c,double x)
{ return 3*a*x*x+2*b*x+c;
}
double Newton(double a,double b,double c,double d,double x0)
{double x=x0,t;
do{
t=f(a,b,c,d,x)/df(a,b,c,x);
x=x0-t;
x0=x;}
while (fabs(x-1)>=1e-6);
return x;
}
void main()
{ double a,b,c,d;
printf("\nInput a,b,c,d\n");
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
printf("\nx=%10.7f\n",Newton(a,b,c,d,1));
}

大虾们 我问问这个是怎么回事啊 在调试的时候X的值都已经得到了 为什么最后不能输出

fabs(x-1)>=1e-6 这个条件不对。
应当是相邻两次迭代结果误差小于。。。
把 do ... while 改成:
Lab:
t=f(a,b,c,d,x)/df(a,b,c,x);
x=x0-t;
if (fabs(x-x0)>=1e-6) { x0=x; goto Lab;};