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

相關文章
相關標籤/搜索