非线性方程的Newton法求解 - 天津大学研究生e-Learning平台.DOC

非线性方程的Newton法求解 - 天津大学研究生e-Learning平台.DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
非线性方程的Newton法求解 - 天津大学研究生e-Learning平台

非线性方程的Newton法求解 姓名:赖俊云 学号:2011208070 学院:材料科学与工程 一、引言 非线性方程是指方程中未知数的次数不是一次的方程,在求解一些高次或者带对数、带三角函数的非线性方程中,很难通过解析法获得方程的精确解,因此实际应用当中大多采用数值法来近似求解非线性方程[1]。求解非线性方程的数值法主要有二分法,牛顿法,弦截法等[1-3]。 其中牛顿(Newton)法, 又称牛顿-拉弗森(Newton-Raphson) 法或切线法[2], 是求解非线性方程零点的一种重要的迭代法. 牛顿法程序简单, 其在单根附近具有二阶敛速,收敛速度快,是一种平方收敛的单步法,这是其它算法都难以比拟的。牛顿法应用范围也很广,它即可用于解代数方程和超越方程,也可用于解非线性方程组,既可求方程实根,也可求复根;既可求单根,也能求重根,因此它是近似根精确化的一种相当有效的方法[6]。但是牛顿法需要求函数导数,对于复杂的函数求导较为困难,而且牛顿法对初值的选取依赖性很大,初值选取不当有可能导致牛顿法不收敛甚至发散,从而导致迭代失败,从而使牛顿法应用受到一定限制[7]。 二、Newton法求解非线性方程的基本原理 基本概念 牛顿法是一种特殊的不动点迭代法,它的基本思想是将非线性方程逐步转化为线性方程来求解[6]。 设给定函数方程 将在作泰勒展开 取其线性部分,令,则有 设,则其解为 再将在处展开,也取其线性部分,得到 以此类推,得到牛顿法的迭代序列为 适当选取初值,就可以由上式很快的收敛得到精确的近似解。 几何意义 给定的线性方程的根在几何上的意义是曲线与轴的交点的横坐标。 如右图所示,设 是的某个近似值,曲线 上点P(, ) 处的切线方程为 此切线与x轴的交点的横坐标就是由牛顿迭代公式所确定的,此时得到的比初值进一步向逼近,然后依次得,无限逼近,最终得到满足精度要求的近似解。 所以牛顿法就是以曲线各点的切线与x轴的交点近似代替曲线与x轴的交点,因此,牛顿法又称切线法。 三、Newton法的两种变形 牛顿法至少二阶局部收敛,收敛速度快,是求解非线性方程的主要方法,但是它也存在需要求导数值、对初值选取很敏感、对重根收敛速度较慢的缺点,因此人们根据不同的需求对经典牛顿法进行一定的改进,包括简易Newton法、求重根的改进牛顿法,牛顿下山法[2],三次收敛牛顿法[7]等等,其中最为常见的两种变形为简易Newton法和求重根的改进牛顿法。 简易Newton法 经典的牛顿法因为在每次迭代的时候都要求一次相应导数值,计算量较大,过程较为复杂,简易Newton法的基本思想就是用,即简易Newton法的迭代序列为: 这种变形大大减少了Newton法的计算量,但是相对的收敛速度也变得较慢,迭代次数增加,而且对初值的要求更为严格。适用于对结果精度要求不高,初值取值范围较小的非线性方程。 求重根的改进牛顿法 在有重根的情况下,直接使用Newton法,收敛是线性收敛的,收敛速度明显变慢。为了解决这一问题,在求解有重根的非线性方程时,引入了一种改进的Newton法提高收敛速度。该方法就是将迭代序列改为如下迭代: 其中m指的是重根的数目,这种方法在有重根的情况下仍能保持的二次收敛性,有着较快的收敛速度,但是缺点是需要知道m值。 四、Matlab编程 为了具体比较经典Newton法,简易Newton法,牛顿下山法,改进的牛顿法这四种方法之间的优缺点,我们引入实例,并通过Matlab编程实现这四种方法。程序均以经典牛顿法的Matlab程序演变而来,经典Matlab程序如下: 先建立一个如下的M文件newton1.m: function nt=newton1(fx,dfx,x0,e,N) x=x0;f0=eval(fx);df0=eval(dfx); n=0; disp( [ 迭代次数n xn ] ); while n=N x1=x0-f0/df0; x=x1;f1=eval(fx); disp([n,x0]); if abs(x0-x1)e return else n=n+1; x0=x1;f0=f1; end end if n==N+1 fprintf(迭代失败,请重新选择初值和迭代次数 ), end 然后在Matlab程序上根据不同函数调用该文件即可。 简易牛顿法和求重根的改进牛顿法程序与经典牛顿法类似,简易牛顿法的程序只需将上述中的dfx改为dfx0常数即可,求重根的改进牛顿法只需将程序中的迭代方式改为x1=x0-m*f0/df0,m为重根数,以上两种方法都是由上述程序进行的略微改动,就不在此赘述了。 五、算例分析 1、以简单的方程=0为例,用Matlab程序来实现并比较比较经典牛顿法、简易牛顿法和求重根的

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档