8.12牛顿迭代法求根

什么是牛顿迭代法:ide

牛顿法是牛顿在17世纪提出的一种求解方程f(x)=0.多数方程不存在求根公式,从而求精确根很是困难,甚至不可能,从而寻找方程的近似根就显得特别重要。

   设r是f(x)=0的根,选取x0做为r初始近似值,过点(x0,f(x0))作曲线y=f(x)的切线L,L的方程为y=f(x0) f'(x0)(x-x0),求出L与x轴交点的横坐标 x1=x0-f(x0)/f'(x0),称x1为r的一次近似值,过点(x1,f(x1))作曲线y=f(x)的切线,并求该切线与x轴的横坐标 x2=x1-f(x1)/f'(x1)称x2为r的二次近似值,重复以上过程,得r的近似值序列{Xn},其中Xn 1=Xn-f(Xn)/f'(Xn),称为r的n 1次近似值。上式称为牛顿迭代公式。it

 

#include<stdio.h>
#include<math.h>
io

double value(double a,double b,double c,double d,double x)
{
 return (a*x*x*x+b*x*x+c*x+d);
}
class

double daovalue(double a,double b,double c,double d,double x)
{
 return (3*a*x*x+2*b*x+c);
}
di

int main()
{
 double x1=0,x2,a,b,c,d;
 printf("Please insert the value of a,b,c,d:");//a,b,c,d¸³Öµ
 
 scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
 printf("Please insert the intial value of x:"); //ÊäÈëXµÄ³õÖµ(ÄãÊäÈëµÄÊÇ1).
 scanf("%lf",&x2);
 x1=x2-value(a,b,c,d,x2)/daovalue(a,b,c,d,x2);
 while(fabs(x1-x2)>=10e-6)
 {
  x2=x1;
  x1=x2-value(a,b,c,d,x2)/daovalue(a,b,c,d,x2);
 }
 printf("%lf\n",x1);
 return 0;
}
view