牛顿迭代法求方程的解

  
  

迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代法又分为精确迭代和近似迭代。”二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。

     

利用迭代算法解决问题,需要以下三个步骤:

  
 <代码> 1。确定迭代变量
  在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
  2 .建立迭代关系式
  所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。
  3 .对迭代过程进行控制
  在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来,另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。 
  

头文件:

  
 <代码>/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *版权:悦工作站
  *
  *文件名:Iterate.h
  *
  *功能:迭代算法数据定义
  *
  *作者:亚伯·李
  *
  * CreateOn: 2012-2-19
  *
  *日志:2012-2-19由阿贝尔李创建
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */的ifndef ITERATE_H
  #定义ITERATE_H
  
  # include“global.h”
  
  #定义1.0 e-6ε
  
  int GetTheEquationRoot(无效);
  浮动MySqrt (x)浮动;
  
  # endif  
  

源文件:

  
 <代码>/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  *版权:悦工作站
  *
  *文件名:Iterate.c
  *
  *功能:迭代法的应用实例
  *
  *作者:亚伯·李
  *
  * CreateOn: 2012-2-19
  *
  *日志:2011-5-3由阿贝尔李创建
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */# include“. ./公司/Iterate.h”
  # include & lt; math.h>/****************************************************************************************************
  *函数名:GetTheEquationRoot
  *
  *功能:用牛顿迭代法求方程2 * * * * 4 * x * x + 3 * x 6=0的根
  *
  *参数:无
  *
  *返回值:成功返回0,失败返回1
  *
  *作者:亚伯·李
  *
  *日志:2012-2-19
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */int GetTheEquationRoot(空白)
  {
  浮动x1, x0=1.5;
  x1=x0 - (2 * x0 * x0 * x0-4 * x0 * x0 + 3 * x0-6)/(6 * x0 * x0-8 * x0 + 3);
  而(晶圆厂(x1-x0>=ε))
  {
  x0=x1;
  x1=x0 - (2 * x0 * x0 * x0-4 * x0 * x0 + 3 * x0-6)/(6 * x0 * x0-8 * x0 + 3);
  }
  printf("根是:% f \ n”, x1);
  返回0;
  }/****************************************************************************************************
  *函数名:MySqrt
  *
  *功能:迭代法求一个数的平方根
  *
  *参数:x:要求平方根的数
  *
  *返回值:成功返回根植,失败返回1
  *
  *作者:亚伯·李
  *
  *日志:2012-2-19
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */浮动MySqrt (x)浮动
  {
  浮动,x0, x1;
  
  如果(x & lt;0)
  {
  返回1;
  }=x;
  x0=/2;
  x1=(x0 + a/x0)/2;
  
  而(晶圆厂(x1-x0)祝辞=ε)
  {
  x0=x1;
  x1=(x0 + a/x0)/2;
  }
  
  返回x1;
  } 

牛顿迭代法求方程的解