牛顿迭代法的步骤大概是这样的:首先给定一个初始值x0,用它来进行迭代。迭代的方法就是在点(x0,f(x0))处做曲线的切线,与横轴得到一个交点(x1,0),x1就是第一次迭代的结果,也就是方程解的一个近似。要想更靠近实际解就要继续迭代,再在点(x1,f(x1))上做切线,与横轴又会得到一个交点,然后重复这个步骤,直到达到满意的精度为止。你说的这个式子就是对式求导得到的
#include
#include
#include
#define N 100
#define PS 1e-5//定义精度
#define TA 1e-5//定义精度
float Newton(float (*f)(float),float(*f1)(float),float x0 )
{ float x1,d=0;
int k=0;
do
{ x1= x0-f(x0)/f1(x0);
d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
x0=x1;
printf("x(%d)=%f\n",k,x0);
}
while((fabs(d))>PS&&fabs(f(x1))>TA) ;
return x1;
}
float f(float x)
{ return 2*x*x*x-4*x*x+3*x-6; }
float f1(float x)
{ return 6*x*x+8*x+3; }//对方程求导
void main()
{ float f(float);
float f1(float);
float x0,y0;
printf("Input x0: ");//输入x0为1.5即求1.5附近的根
scanf("%f",&x0);
printf("x(0)=%f\n",x0);
y0=Newton(f,f1,x0);
printf("\nThe root is x=%f\n",y0);
getch();
}