快速弦截法解方程

/**
***快速弦截法***
 
  公式:x(k+1) = x(k) - ( x(k) - x(k-1) ) * f( x(k) ) / f( x(k) - f(x(k-1) )

  属性:两步迭代法

  描述:计算x(k+1)时需要利用前两步信息x(k),x(k-1).免去了Newton法中需要求解一阶导函数的繁琐

  《数值分析简明教程》-2 Editon -高等教育出版社 -page 140 -无算法流程图

  代码维护:2005.6.14  DragonLord
**/

#include
#include
#include

//范例程序中方程为:x*exp(x)-1=0

double f(double x)
{
 return x-exp(-x);
}

int main()
{
 double x0,x1,x2,e,temp;
 int N,k;
 while(cin>>x0>>x1>>e>>N)
 {
  k=1;
   
  loop: if(f(x1)-f(x0)==0){cout<<"函数异常!"<  else
  {
   temp=f(x1)/(f(x1)-f(x0));
  
   x2=x1-(x1-x0)*temp;
  
   printf("x%d=%.5f/n",k+1,x1);
  }
  
  if(x1-x0-e){printf("final result:x%d=%.5f/n",k+1,x1);break;}
  else
  { 
   if(k!=N)
   {
    k++;
    x0=x1;
    x1=x2;
    goto loop;
   }
   else
      cout<<"迭代失败!"<  }
 }
 return 0;
}

你可能感兴趣的:(计算方法)