黑马程序员技术交流社区

标题: 什么是牛顿迭代法 [打印本页]

作者: 卓礼敏    时间: 2013-4-8 16:19
标题: 什么是牛顿迭代法
用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。
这道题我无从下手,也不了解用什么算法算好,这类题目通常怎么算,求思路
作者: 王大伟    时间: 2013-4-8 16:52
牛顿迭代法是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。

利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main()
  4. {
  5. double x0,x=1.5;
  6. do
  7. {
  8. x0=x;
  9. x=x0-(2*pow(x0,3)-4*pow(x0,2)+3*x0-6)/(6*pow(x0,2)-8*x0+3);
  10. } while (fabs(x-x0)>1e-5);
  11. printf("x=%f",x);
  12. return 0
  13. }
复制代码
牛顿迭代法是先给定方程f(x)=0的一个较好的近似根x,然后用迭代公示:xn+1=xn-f(xn)/f'(xn)
直至xn与xn+1相差很小为止

作者: 杜鹏飞    时间: 2013-4-8 19:28
这种逼近高次方程解的方法是切线法。
牛顿迭代法更为人所知的是求根。
作者: 陈丽莉    时间: 2013-4-8 21:04
还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】哦~
作者: 王大伟    时间: 2013-4-8 21:27
王大伟 发表于 2013-4-8 16:52
牛顿迭代法是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此 ...

多谢大美女了   多谢支持啊
作者: 王大伟    时间: 2013-4-8 21:29
陈丽莉 发表于 2013-4-8 21:04
还有问题,继续追问; 没有的话,请将帖子分类改成【已解决】哦~

多谢版主了   多谢支持啊
作者: 滔哥    时间: 2013-4-8 22:37
版主辛苦了
作者: 陈丽莉    时间: 2013-4-8 23:52
滔哥 发表于 2013-4-8 22:37
版主辛苦了

啊,多谢滔哥,这都是我应该做的~  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2