修正牛顿法
牛顿迭代法

牛顿迭代法李保洋数学科学学院信息与计算科学学号:060424067指导老师:苏孟龙摘要:牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,即牛顿迭代法.迭代法是一种不断用变量的旧值递推新值的过程.跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“牛顿迭代法”属于近似迭代法,本文主要讨论的是牛顿迭代法,方法本身的发现和演变和修正过程,避免二阶导数计算的Newton迭代法的一个改进,并与中国古代的算法,即盈不足术,与牛顿迭代算法的比较.关键词:Newton迭代算法;近似求解;收敛阶;数值试验;中国古代数学;九章算术;Duffing方程;非线性方程;收敛速度;渐进性0 引言:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法或者称为一次解法,即一次性解决问题.迭代法又分为精确迭代和近似迭代.“二分法”和“牛顿迭代法”属于近似迭代法.迭代算法是用计算机解决问题的一种基本方法.它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值.具体使用迭代法求根时应注意以下两种可能发生的情况:(1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制.(2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败.所以利用迭代算法解决问题,需要做好以下三个方面的工作:1、确定迭代变量.在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量.2、建立迭代关系式.所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系).迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成.3、对迭代过程进行控制,在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题.不能让迭代过程无休止地重复执行下去.迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定.对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件.1牛顿迭代法:牛顿迭代法(Newton method)又称为牛顿-拉夫逊方法(Newton-Rapfson method ),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难甚至不可能,从而寻找方程的近似根就显得特别重要.方法使用函数()f x 的泰勒级数的前面几项来寻找方程()0f x =的根.牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程()0f x =的单根附近具有平方收敛性,而且该法还可以用来求方程的重根、复根.另外该方法广泛用于计算机编程中:解非线性方程()0f x =的牛顿(Newton )法是把非线性的方程线性化的一种近似方法.把()f x 的0x 点附近展开泰勒(Taylor )级()()()()()()''20'00002!f x f x f x f x x fx x x =+-+-+;取其线性部分作为非线性方程()0f x =的近似方程,则有:()()()'0000f x f x x x +-=;设()'00f x ≠,则其解为:()()0'100f x x x f x =-;再把()f x 在1x 附近展开泰勒(Taylor )级数,也取其现行部分作为()0f x =的近似方程.若()'10f x ≠,则得:()()1'211f x x x f x =-;这样,得到牛顿(Newton )法的一个迭代序列:()()'1n n n n f x x x fx +=-;牛顿迭代有十分明显的几何意义,如图所示:当选取初值0x 以后,过()()00,x f x 做()f x 的切线,其切线方程为:()()()'000y f x f x x x -=-;求此切线方程和x 轴的交点,即得:()()'1000x x f x f x =-;牛顿法正因为有这一明显的几何意义,所以也叫切线法. 例:用牛顿法求下面方程的根()32210200f x x x x =++-=; 解:因()'23410f x x x =++,所以迭代公式为:()()3221210203410n n x x x x x x x +=-++-++;选取01x =计算结果列表:从结果可以看出,牛顿法的收敛是很快的,5x 误差1510-.但用牛顿法计算工作量比较大,因每次计算迭代除了计算函数值外还要计算微商值.为此我们提出了简化牛顿法:其公式为()()'10n n n x x f x f x +=-;用上面的公式计算,不再需要每步重新计算微商值,所以计算量小一些,但收敛也要慢一些.为了避免计算导数还可以采用差商代导数的方案:()()()()111n n n n n n n f x x x x x f x f x +--=---;关于牛顿迭代的收敛有下面结果:如果()f x 在零点附近存在连续的二阶微商,ξ是()f x 的一重零点,且初始0x 充分接近于ξ,那么牛顿迭代是收敛的,且有()()()2'''1/2n n x f f x ξξξξ+-≈•-;这表明牛顿法是二阶收敛的(平方收敛的).最后考虑()f x 是多项式的特殊情况,此时()f x ,()'f x 在某个x 值,比如x c =时的计算可用综合除法.设 ()111n n n n f x ax a x a x a +-=+++,除以x c -,得商()q x ,余r :()()()f x q x x c r =-+; (1) 其中:()120121n n n n q x b x b x b x b ----=++++;()n r b f c ==;比较(1)式两边k x 的系数便知这些k b 可以按下表进行:这一过程其实就是秦九韶算法,计算多项式值的嵌套算法:()()()()121n n f c aa c a c c a c a -=+++++;每个括号的值就是这里的0n b b .至于导数的计算,注意到(1)式可得:()()()()''f x q x q x x c =+-;于是:()()'f c q c =;因此再对0n b b 进行上述过程,或者再用一次秦九韶算法即可.2一种修正的牛顿迭代法:给出了牛顿迭代法的一种修正形式,并证明了当1/2r ≠时修正的牛顿迭代法是二阶收敛的,当参数1/2r =时是三阶收敛的,数值实验表明,与经典牛顿迭代法相比,该修正牛顿迭代法具有一定的优势.众所周知,数值求解非线性方程()0f x =的根的方法很多.经典的牛顿迭代法是非线性方程组求根的一个基本方法,它二次收敛到单根,线性收敛到重根.牛顿法因收敛速度快而得到广泛应用,也倍受学者的重视,近年来很多文献中提出各种改进的牛顿方法.文献[8]中利用Newton 迭代法和微分中值定理“中值点”的渐进性,提出了一种多点迭代法.设()f x 满足下述条件:()[]2,f x c a b ∈,()()0f a f b <; ()'0f x ≠, ()''f x 在[,]a b 上保号. (A)根据微分中值定理,存在(,)a b ξ∈,使得:()()()'f b f a f b a ξ-=-,而1lim 2b a a b a ξ→-=-.因此,当b 与a 的距离无限接近时有:()12a b a ξ≈+-.也就是说,在区间(,)a b 不甚大时,中值点ξ一定在其渐近位置 ()12a b a ξ≈+-附近,并随区间变小而趋于其渐近位置.图所示迭代法构造图本方案基于上述考虑,给出一种通过迭代点选取另一个点,利用两个点进行迭代求近似根的新方法.这种方法虽然在迭代中又只利用了一个其它点,但其计算精度却相当高,它的某一种特殊情形恰是通常的Newton 迭代法.为了更加直观起见,我们通过几何直观图来构造这种迭代法.设()f x 满足条件(A ),当选定初值0x(仅要求()()"00f x f x ⋅>),如图所示,作交点的切线交x 轴于B ()()00'0,0f x x f x ⎛⎫- ⎪ ⎪⎝⎭,AQ 线段的斜率为:()()()()()000'0000'0f x f x f x f x f x x x f x ⎛⎫-- ⎪⎝⎭⎛⎫-- ⎪⎝⎭.由微分中值定理知,存在()()000'0,f x x x f x ξ⎛⎫∈- ⎪ ⎪⎝⎭使得:()()()()()()000'0'0000'0f x f x f x f x f x f x x x f x ⎛⎫-- ⎪⎝⎭=⎛⎫-- ⎪⎝⎭;而()()()()0000''0012f x f x x x f x f x ξ⎛⎫≈-+- ⎪ ⎪⎝⎭,因此,我们取数1,12r ⎛⎫∈ ⎪⎝⎭,在点()()()()()()0000''001,1f x f x P x r f x r f x f x ⎛⎫⎛⎫---- ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭作切线PC ,图中AD 平行于PC .即用点P 的导数()()()0'0'01f x f x r f x ⎛⎫-- ⎪ ⎪⎝⎭代替点A 的导数,而仍用点A 的迭代格式得到点D 的坐标()()()()00'00'0,01f x D x f x f x r f x ⎛⎫ ⎪⎪- ⎪⎛⎫⎪-- ⎪ ⎪⎝⎭⎝⎭;重复上述过程,得到多点迭代公式()()()()1''1k k k k k k f x x x f x f x r f x +=-⎛⎫-- ⎪⎝⎭; (2)其中[,]k x a b ∈,1,2,3,k =.下面我们对上述事实,从理论上加以严格证明.定理 设()f x 满足条件(A ),则由多点迭代公式(1)产生的序列{n x }必收敛于[,]a b 上的唯一a ,这里[],n x a b ∈,()0f a =.证明 函数()f x 在上连续,由连续函数根的存在定理,从()()0f a f b <知道()f x 在[],a b 上根存在,又由条件()'0f x ≠及()''f x 保号知道,()'f x 在[],a b 上不变号,故()f x 在[],a b 上是单调函数,因此()f x 在[],a b 上根a 存在且唯一.由定理条件曲线()y f x =可有如下四种不同情况:(1) ()()()"0,0,0f a f b f x <>>,则()'f x 单调上升,()()''0f a f b >; (2) ()()()"0,0,0f a f b f x <>>,则()'f x 单调下降,()()''0f a f b >;(3) ()()()"0,0,0f a f b f x ><>,则()'f x 单调上升, ()()''0f a f b <; (4) ()()()"0,0,0f a f b f x ><<,则()'f x 单调下降,()()''0f a f b <. 通过对自变量的变号或对函数的变号可将四种情况归结为一种情况,所以我们只需对情况(一)证明迭代过程(1)收敛就可以了.若初值[]0,,,n x a b x a ∈>所以()00f x >,故有()()()()0100'00'01f x x x x f x f x r f x =-<⎛⎫-- ⎪⎝⎭;()()()()()()()()()()()()()()()''0001000'''000000'''000111f x f a f x a f x a x x x x f x f x f x f x r f x r f x r f x f x f x ξξ+--=-=-=-⎛⎫⎛⎫⎛⎫------ ⎪⎪⎪⎝⎭⎝⎭⎝⎭;一方面,()0.a x ξ∈,且()()'00f x f x a =-.下证()()()()0''0'01f x f x f x r f x ⎛⎫<-- ⎪ ⎪⎝⎭.若()()()()0''0'01f x f x f x r f x ⎛⎫>-- ⎪ ⎪⎝⎭,由()'f x 的单调性有,x ,()()()00'01f x x r f x ξ--<,又因为()()()()()0000''001f x f x x r x f x f x -->-,因此有()()()0''0'0f x f x f f x ξ⎛⎫-< ⎪ ⎪⎝⎭,与Newton 迭代法的收敛性矛盾.由(一)的假设及()()()()0''0'01f x f f x r f x ξ⎛⎫<-- ⎪ ⎪⎝⎭可得: ()()()()()()'01000'00'01f x a x x x x a a f x f x r f x ξ-=->-=⎛⎫-- ⎪⎝⎭;一般地,若n x a =,同样可以证明由式(2)得到的1n x +满足1n n a x x +<<.所以由式(1)产生的迭代序列{n x }单调下降且有下界.依极限理论必有极限.对式(2)两边取极限,由极限理论可以求得()'0f a =.再由()'0f x ≠,[],n x a b ∈,可知函数方程()0f x =在[],a b 上的根是唯一的,因此有'a a =.当1r =时,式(2)即为Newton 迭代公式.本文给出的这种多点迭代方法不仅可以被广泛应用于方程的近似求根,更重要的是它为人们提供了一种新的迭代思想,拓宽人们在方程近似求根方面的思路.例 计算()3250f x x x =--=在(2,3)区间内的一个实根.我们已知()0f x =有一个精确到十二位有效数字的实根 2.09455148154a =. 取03x =,以Newton 迭代法计算(记作1n x ),取03x =, 12r =以式(1)计算(记作2n x ),其结果列表如表1.行三次迭代就已得满足精度要求的值了,而Newton 迭代法需迭代5次才可得到满足精度要求的值.式(2)可以被广泛应用,特别是编成数学软件后,用计算机求解方程近似根效果会更加显著.3另外一种牛顿迭代法的修正:Newton 迭代法是方程求根的一种简单而直观的近似方法,但在实际运用中,我们常常觉察到,这种方法仅仅是利用了迭代点及该点的导数值,而没有充分利用其他点及其导数值.是否存在可利用的点,这些点我们应怎样确定.文[1]给出了一种方法,但这种方法求根的关键在适当地选取0x 和r 或n r .选取不适当,就会出现某次迭代的值不是迭代序列中的值.因此,我们会问这些值特别是0x 能否不依靠人为选取,而通过迭代点来选取,本文将利用Newton 迭代法和微分中值定理“中值点”的渐近性,来寻找除迭代点以外的可利用点,给出一种多点迭代方法.设()f x 满足下述条件:()[]()()2,,0f x c a b f a f b ∈<;()()'''0,f x f x ≠在[],a b 上保号. (A)根据微分中值定理,存在(),a b ξ∈,使得()()()'f b f a f b a ξ-=-而1lim 2b a a b a ξ→-=-.因此,当b 与a 的距离无限接近时有:()12a b a ξ≈+-.也就是说,在区间(),a b 不甚大时,中值点ξ一定在其渐近位置()12a b a ξ≈+-附近,并随区间变小而趋于其渐近位置.本方案基于上述考虑,给出一种通过迭代点选取另一个点,利用两个点进行迭代求近似根的新方法.设()f x 满足下列条件(A):(1) ()f x 在区间在区间[],a b 上存在二阶导数; (2) ()'f x 在[],a b 上不等于零; (3) ()''f x 在[],a b 上不变号; (4) ()()0f a f b <;为了更为直观,我们通过几何直观图来构造多点迭代法.设()f x 满足条件(A),当选定初值0x (仅要求()()''00f x f x >),如图所示:做A 点的切线交X 轴于B ()()00'0,0f x x f x ⎛⎫- ⎪ ⎪⎝⎭,AQ 线段的斜率为:()()()()()000'0000'0f x f x f x f x f x x x f x ⎛⎫-- ⎪⎝⎭⎛⎫-- ⎪⎝⎭;由微分中值定理知,存在()()000'0,f x x x f x ξ⎛⎫∈- ⎪ ⎪⎝⎭使得: ()()()()()()000'0'0000'0f x f x f x f x f x f x x x f x ⎛⎫-- ⎪⎝⎭=⎛⎫-- ⎪⎝⎭;而()()()()0000''0012f x f x x x f x f x ξ⎛⎫≈-+- ⎪ ⎪⎝⎭,因此,我们取数1,12r ⎛⎫∈ ⎪⎝⎭,在点()()()()()()0000''001,1f x f x P x r f x r f x f x ⎛⎫⎛⎫---- ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭作切线PC ,图中AD 平行于PC .即用点P 的导数()()()0'0'01f x f x r f x ⎛⎫-- ⎪ ⎪⎝⎭代替点A 的导数,而仍用点A 的迭代格式得到点D 的坐标()()()()00'0',01k k f x D x f x f x r f x ⎛⎫ ⎪⎪- ⎪⎛⎫ ⎪-- ⎪ ⎪⎝⎭⎝⎭; (3)主要对(3)式的分子()k f x 用()k f x 与()()()()''1k k k k k f x f x f x f x r f x ⎛⎫ ⎪⎪- ⎪⎛⎫⎪-- ⎪ ⎪⎝⎭⎝⎭的和代替,这样就得到新的迭代公式:()()()()()()()()''1''11k k k k k k k k k k k f x f x f x f x f x r f x x x f x f x r f x +⎛⎫ ⎪⎪+-⎪⎛⎫ ⎪-- ⎪ ⎪⎝⎭⎝⎭=-⎛⎫-- ⎪⎝⎭; (4) 如果令 ()()()()'1k k f x u x x r f x =--;()()()1'k k k kf x x w x x f u +==-;则: ()()111'k k k f x x x f u x -+-++⎛⎫⎪⎝⎭=-; 从而可知(4)式中迭代函数为:()()()()()()'f w x x w x f w x Φ=-;引理1[5] 对于迭代公式()1k k x x +=Φ,如果p Φ在所求的根*x 的邻近连续并且:()()()()1'*''**0p x x k x +Φ=Φ==Φ=,()()*0px Φ≠,则该公式在*x 的邻近是p 阶收敛的.定理1 设方程()f x 的根为*x ,函数()f x 在*x 的的邻域内有至少四阶连续导数,且()'0f x ≠,则迭代公式(4)在的*x 邻近至少是三阶收敛的.证明 迭代公式(4)的迭代函数为:()()()()()()'f w x x w x f w x Φ=-,其中()()()'k k k f x w x x f u =-,由于方程()f x 的根为*x 所以()*0f x =,从而可知()**w x x =,()'*0w x =;()()()()()()'*'*''*3''*f x u x w x f u x =对()x Φ求导数得:()()()()()()()()()()()()()()()'''''"''''*2''0f w x w x f u x f w x f u x u x x w x x f u x -Φ=-⇒Φ=; 同理可得:()()()()()()'"'"*''*''*0x x x w x w x Φ=Φ⇒Φ=-=.由引理知迭代公式(4)在*x 邻近至少是三阶收敛的.引理2([4]) 假设函数()f x 在区间[],a b 上存在二阶导数,且满足下列条件(1) ()'f x 在[],a b 上不等于零;(2) ()''f x 在[],a b 上不变号;(3) ()()0f a f b <;(4) 设[],x a b ∈,且满足条件()()"0f x f x >;则由Newton 迭代法()()'10n n n x x f x f x +=-得到的序列{}n x 收敛于()0f x =的惟一根*x .定理2 假设函数()f x 在区间[],a b 上存在二阶导数,且满足下列条件(1) ()'f x 在[],a b 上不等于零;(2) ()''f x 在[],a b 上不变号;(3) ()()0f a f b <;(4) 设[],x a b ∈,且满足条件()()"0f x f x >.则由多点迭代公式(4)得到的序列{}n x 收敛于()0f x =的惟一根*x .证明 函数()f x 在[],a b 上连续,由连续函数根的存在定理,从()()0f a f b <知道()f x 在[],a b 上根存在,又由条件()'0f x ≠及()"f x 的保号性知道,()'f x 在[],a b 上不变号,故()f x 在[],a b 上是单调函数,因此()f x 在[],a b 上的根*x 存在且惟一. 由定理条件,曲线()y f x =可有如下四种不同情况:(a) ()()()"0,0,0f a f b f x <>>,则()'f x 单调上升,()()''0f b f a ≥>;(b) ()()()"0,0,0f a f b f x <><,则()'f x 单调下降,()()''0f a f b ≥>;(c) ()()()"0,0,0f a f b f x ><>,则()'f x 单调上升,()()''0f a f b ≥<;(d) ()()()"0,0,0f a f b f x ><<,则()'f x 单调下降,()()''0f b f a ≥<.通过对自变量的变号或对函数的变号可以将四种情况归结为一种情况,所以我们只需对其中一种情况证明迭代过程(4)是收敛的就可以了.下面仅就情况(a)证明定理2,其余情况的证明类似.对情况(a)来说此时()0f x =在[],a b 上的根存在且惟一,且()f x 在[],a b 上单调递增.首先证明,对任何初始近似()*,x x b ∈,由迭代公式(4)求出的逐次近似k x 都属于()*,x b ,并且单调递减. 事实上,由引理2的证明我们可知,只要()()()()()*'1,k k k k f x u x x r x b f x =--∈,就有()*1,k x x b -+∈,即()1k k k x u x x -+<<,再由(3)式得11k k x x -++<,另一方面(3)式可化为: ()()()()()()()()()*''1*****11111'''1k k k k k k k k k f x f x f f x x x x x x x x x x f u x f u x f u x ξξ-+----+++++⎛⎫- ⎪⎛⎫⎛⎫⎛⎫⎝⎭-=--=---=-- ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭; 其中()()**11,,k k x x x u x ξ-+⎛⎫∈⊂ ⎪⎝⎭.由()'f x 单调递增且()'0f x >知()()()''1k f f u x ξ<,故*10k x x -+->因而由(4)式产生的序列{}n x 单调递减并有下界,故lim n n x →∞存在.设lim n n x x -→∞=,(4)式两边当k →∞时求极限得: ()()_____'_'____'_'101f x f x f x f x f x r f x x x f x f x r f x ⎛⎫ ⎪ ⎪ ⎪⎛⎫ ⎪ ⎪⎛⎫⎝⎭ ⎪+- ⎪⎛⎫⎛⎫⎝⎭ ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪-- ⎪⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭=-=⎛⎫⎛⎫ ⎪ ⎪⎝⎭ ⎪--⎛⎫ ⎪ ⎪ ⎪⎝⎭⎝⎭; ()()_____'_'__'_'11f x f x f x f x f x r f x f x f x r f x ⎛⎫ ⎪ ⎪ ⎪⎛⎫ ⎪ ⎪⎛⎫⎝⎭ ⎪+- ⎪⎛⎫⎛⎫⎝⎭ ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪-- ⎪⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭⎛⎫⎛⎫ ⎪ ⎪⎝⎭ ⎪--⎛⎫ ⎪ ⎪ ⎪⎝⎭⎝⎭; 可知 ()_____'_'01f x f x f x f x f x r f x ⎛⎫ ⎪ ⎪ ⎪⎛⎫ ⎪ ⎪⎛⎫⎝⎭ ⎪+-= ⎪⎛⎫⎛⎫⎝⎭ ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪-- ⎪⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭; ()()___*__'_',,1f x x x x b f x f x r f x ⎛⎫ ⎪⎝⎭-∈⎛⎫⎛⎫ ⎪ ⎪⎝⎭ ⎪--⎛⎫ ⎪ ⎪ ⎪⎝⎭⎝⎭,()f x 在[],a b 上单调递增,且()*0f x =所以:()_____'_'0,01f x f x f x f x f x r f x ⎛⎫ ⎪ ⎪ ⎪⎛⎫ ⎪ ⎪⎛⎫⎝⎭ ⎪=-= ⎪⎛⎫⎛⎫⎝⎭ ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪-- ⎪⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭⎝⎭⎝⎭;因此得:*x x -=. 本方法代方法比Newton 和文[4]的迭代法的收敛速度明显要快,而且对于1,12r ⎡⎤∈⎢⎥⎣⎦,r 越大效果越差!对于例1,用MATLAB 程序运算格式(4),当12r <时,在*0k x x →=之前迭代格式会产生负值.所以,格式(4)的收敛速度和r 的选取有关. 对于定理2中的四个条件,在MATLAB 中通过简单的程序即可验证.4 中国古代算法盈不足术与牛顿迭代算法的比较:首先介绍 盈不足术 九章算术中的第七章是盈不足术,这是求解方程的一种最古老的方法.为了说明该方法的基本思想,我们考虑该章的第一个例子:今有共买物,人出8,盈3;人出7,不足4,问人数、物价各几何?其求解过程为(见图1):(1) 把出率(8)和(7)放在第一行;(2) 把盈数(3)和不足数(4)放置在出率下面;(3) 计算维积(交差积)得(32)和(21),得和为(53);(4) 盈减去不足数为431-=;(5) 从而得物价为53531=; 用现代数学的观点,盈不足术可表示为:设1x 和2x 为两个近似物价,1R 和2R 分别表示为盈或不足数,则物价为:211212x R x R x R R -=-;人数为1212R R y x x +=-;正如白尚恕[7]指出的那样,在隋唐(581~618年AD )盈不足术在中东被广泛流传,最早的阿拉伯算术书是由al-Khowarizmi 在公元825年写的,英文中的算术一词(algorithm)来自他的名字,他应该对九章算术和其他古代中国巨著很了解,并把盈不足术称为中国方法.Khitai 指China ,类似的写法有Khatai ,Chatayn ,Chataain 等等.普遍认为中国算法是通过古代著名的意大利数学家Leonardo Fibonacci(1170?~1250?年)传给西方的,据记载Fibonacci 随他父亲周游了埃及、西西里、希腊和叙利亚,这次周游使他接触了东方和阿拉伯的计算方法.在1202年,即他回家后不久他就出版了著名的《算经Liber Abaci 》.该书也介绍了盈不足术,并把这种方法称为中国规则,这个名字来自中东,在那里中国算法称为Hisabl-Chatin ,里Chation 指China 该书中的一些例子和算法和中国古代数学巨著完全一样.如在4世纪的孙子算经:今有物不知其数,三三数之胜二,五五数之胜三,七七数之胜二,问物几何?该问题的解题方法就是数论中的中国余数定理:在Fibonacci 的《算经》中阿拉伯语DeRegulisel-Chatavn 被译成拉丁文DuarumFalsdrumPosicionumRegula 所以在西方这种方法被称作双假定方法,这实际上是九章算术中的盈不足术,即中国算法,它起源于中国是毫无疑问的,这正如钱宝琮[8]指出的那样可惜的是很多西方人认为这种方法起源于印度,并被阿拉伯人所掌握所以本作者强烈建议把双假设法改称为中国算法或中国方法.中国算法与牛顿迭代算法考虑方程()'0f x =设12,x x 为方程的两个近似解,于是我们得残量()1f x 和()2f x 应用中国算法,我们可得()()()()2112312x f x x f x x f x f x -=-; (5) 在九章算术中给出了在下列情况下的一些不等式:(1)双盈,即()10f x >和()20f x >(2)双亏,即()10f x <和()20f x <;(3)一盈一亏,即()()120f x f x ⋅<;上述算法可以根据不等式的性质确定更合适的两个数()12,x x 或()23,x x ,再进行计算定更精确的近似解,为了与牛顿迭代算法比较,我们把(5)写成如下形式:()()()()()()()()2112112311212x f x x f x f x x x x x f x f x f x f x --==---; 如果引入导数()'1f x ,它定义为()()()12'112f x f x f x x x -=-;那么我们马上可得:()()11'1f x x x f x =-; 这就是著名的牛顿迭代法,当两个近似值1x 和2x 位于真解的两侧时,即()()120f x f x ⋅<,中国算法比牛顿迭代算法具有很大的优势,牛顿迭代算法可以更进一步的优化发展,可参考文献[10,11].中国算法的改进:中国算法可以看成是通过两个近似解的线性近似方法,见图2为了提高中国算法的精度,我们用三点()123,,x x x ,而不用两点()12,x x ,用抛物线拟合该曲线,我们得近似解为:()()()()()()123213321121321233231x f f x f f x f f x f f f f f f f f f f f f =++------; 式中()i i f f x =;综合概述:迭代算法是一种用途非常广泛的方法,本文不仅介绍了这个方法很好的诠释这个方法, 而且做了牛顿迭代法的两种修正,更做了牛顿迭和与中国古代算法的比较,不仅试读者更好理解了这个方法,更开阔了读者的视野,使读者更能留下研究的空间.参考文献:[1] 徐萃薇,孙绳武.计算方法引论(第三版)[M].北京:高等教育出版社,2007.[2] 龙爱芳.避免二阶导数计算的迭代法[J].浙江工业大学学报,2005, 33(5):602~604.[3] 李庆扬,王能超.数值分析[M].武汉:华中科技大学出版社,1986.[4] 张新东,王秋华.避免二阶导数计算的Newton迭代法的一个改进[J].山东大学学报,2007,42(7):72~76.[5] 何吉欢.盈不足术与牛顿迭代算法的比较[J].应用数学和力学,2002,23(12):1256~1259.[6] 王晓峰.一种修正的牛顿迭代法[J],2010,33(1)长春理工大学学报,178~179.[7] 白尚恕.九章算术注释[M].北京:科学出版社,1983.[8] 钱宝琮.中国数学史[M].北京:科学出版社,1992.[9] 陈新一.一种多点迭代方法[J].甘肃教育学报(自然科学版),2001,15(1):13~16.[10]HeJi-huan.Improvement of Newton interation menthod [J].International Journal of Nonlinear Science and Numerical Simulation 2000,1(3):239~240.[11]HeJi-huan.Newton-like iteration menthod for solving algebraice quations[J]. Communication NumSimulation,1998,3(2):106~109Newton iterationLI Bao YangMathematical Sciences Information and Computing Science NO:060424067Instructor :SU MenglongSummary:In the 17th century,Newton introduced a method of solve equations approximately in real number domain and complex domain,that is Newton Iteration,a process of recursion new value constantly with the old value of variable. Correspond with the Iterative Method is A Direct Method or as A Solution,that is a one-time problem solving. Iteration is divided into exact iterative and approximate iterative. "Newton Iterative Method" is belong to approximate iterative methods. This article mainly focuses on the Newton Iteration. The main contents of this article include the discovery,evolution and amendment process of this methods; an improve of avoiding calculating Newton Iteration with second-order derivative; the comparison of the Chinese ancient algorithm---Yingbuzu Method and Newton Iterative Algorithms. Keywords: Newton Iterative Algorithm; approximate solution; order of convergence; numerical experimentation; Arithmetic in Nine Section ; Duffing Equation; Nonlinear equations; Convergence rate; Progressive。
用牛顿迭代法求方程的近似解课件

感谢您的观看
THANKS
阻尼牛顿法
总结词
阻尼牛顿法是一种改进的牛顿迭代法,通过引入阻尼因子来控制迭代过程中的步长,从而改善收敛性 和稳定性。
详细描述
阻尼牛顿法在每一步迭代中引入一个阻尼因子,该因子可以控制迭代过程中的步长。通过调整阻尼因 子的大小,可以有效地改善牛顿法的收敛性和稳定性,特别是在求解非线性方程时。阻尼牛顿法可以 更好地处理局部极小值和鞍点问题,提高求解精度和可靠性。
确定新的点
02
根据切线斜率和初始点的位置,确定新的迭代点。
更新切线斜率
03
根据新的迭代点,重新计算切线斜率。
判断收敛
设定收敛条件
设定一个收敛阈值,当连续两次迭代 之间的差值小于该阈值时,认为迭代 收敛。
检查收敛
在每次迭代后,检查是否满足收敛条 件,如果满足则停止迭代,否则继续 迭代计算。
04 牛顿迭代法的改进
二阶修正牛顿法
总结词
二阶修正牛顿法是在标准牛顿法基础上进行改进,通过引入二阶导数信息来加速收敛并 提高解的精度。
详细描述
二阶修正牛顿法利用二阶导数信息,在每一步迭代中构造一个更高阶的近似函数,从而 更快地逼近方程的真实解。这种方法在某些情况下可以显著减少迭代次数,提高求解效 率。然而,二阶修正牛顿法需要更多的计算资源和存储空间,因此在实际应用中需要根
用牛顿迭代法求方程 的近似解课件
目录
CONTENTS
• 引言 • 牛顿迭代法的基本原理 • 牛顿迭代法的实现步骤 • 牛顿迭代法的改进 • 实例演示 • 总结与展望
01 引言
牛顿迭代法的背景
牛顿迭代法是一种求解方程近似解的数值方法。
利用函数值信息的修正多步拟牛顿法

对于满足拟牛顿方程的 B + , 1最常用的校正公式是 B odn族校正公式 ( r e y 见文献 【 【) 67 . 】】
・ 一 + ,
维普资讯
・
1 ・ 4 4
南京大学学报数学半年刊
27 5 0 年 月 0
其 中
_ ( s
z ) ∑ c丁 ^ 褂1 ( = t)一 , 丁 (z
这 里
() 1 5
㈩j 嚣 ・ = O
,
J ≠t
( 1 6 )
() 1 7
[ 一k] 丽k Y B k s,
( 1 2 )
当 :0时, 就是 经典 的 B GS校 正公 式. F
由以上可以看出, 拟牛顿法是对 ^ X + 做线性插值, 和 k1 然后根据公式 () 2 推导出拟牛顿 方程. 尽管其形式简单, 由于只用了前一个迭代点的信息, 但 在某些情形下, 由公式 (1 得到 1)
收稿 日期: 0 60 -6 修 回日期: 0 61 -3 2 0 -52 ; 2 0- 12 .
E- a l u ii o m i :h a l @h t a l o b o m i. r cn
维普资讯
第1 期
怀丽波: 利用函数值 皇
垒生 生塑鎏
假设 通过迭 代点 线. 即 已经产 生新 的迭 代 点 X + , 义 曲线 X 为一条 过这两 个迭 代点 的直 k1定
=
.
() 2
xr = +7 () ., s 其 中
8k +1 一 Xk
() 3
这 样 ,由 () 3 式得 xo =X ,() k l并且 () kx1 =X+ ,
1 引 言
考虑 无约束 优化 问题
最优化理论与方法——牛顿法

牛顿法简介摘要:牛顿法作为求解非线性方程的一种经典的迭代方法,它的收敛速度快,有内在函数可以直接使用。
结合着matlab 可以对其进行应用,求解方程。
关键词:牛顿法,Goldfeld 等人修正牛顿法, matlab 实现1 介绍:迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法,即一次性解决问题。
但多数方程不存在求根公式,因此求解根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
迭代算法是用计算机解决问题的一种基本方法。
它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下3个方面的工作:1,确定迭代变量。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
2,建立迭代关系式。
所谓迭代关系式,是指如何从变量的前一个值推出下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
3,对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须 考虑的问题。
不能让迭代过程无休止地重复下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
牛顿迭代法(Newton ’s method )又称为牛顿-拉夫逊方法(Newton-Raphson method ),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法,其基本思想是利用目标函数的二次Taylor 展开,并将其极小化。
牛顿法使用函数()f x 的泰勒级数的前面几项来寻找方程()0f x =的根。
修正牛顿法详解

修正牛顿法(Modified Newton's Method)是一种优化算法,通常用于解决非线性最小化问题。
它是基于牛顿法(Newton's Method)的一种变种,用于解决牛顿法可能会出
现的一些问题。
在牛顿法中,我们希望通过在每一步迭代中
求解一个二阶导数矩阵(Hessian Matrix)的逆来寻找函数
的最小值。
然而,在某些情况下,这个二阶导数矩阵可能不
是正定的,这会导致算法出现问题。
为了克服这个问题,修
正牛顿法使用了一个修正项来调整牛顿法中的二阶导数矩阵
的逆。
这个修正项可以保证矩阵的正定性,从而确保算法的
稳定性和可靠性。
修正牛顿法的每一次迭代都需要计算函数的一阶导数和二
阶导数矩阵,因此它的计算复杂度比其他一些优化算法高,
但是它通常能够更快地收敛到最小值,并且可以处理更广泛
的优化问题。
在具体实现上,修正牛顿法通常包括以下步骤:
初始化:选择一个初始点x_0,以及一个足够小的正数ε。
计算一阶导数:计算函数在x_0点的一阶导数。
判断是否满足牛顿条件:如果一阶导数的范数小于ε,则
认为已经找到了最小值,结束算法。
计算修正项:如果一阶导数的范数大于ε,则计算修正项,使得矩阵正定。
更新迭代点:使用修正项更新迭代点,然后返回步骤2。
需要注意的是,修正牛顿法虽然能够保证算法的稳定性和可靠性,但是在某些情况下可能收敛较慢或者无法收敛到最小值。
因此,在实际应用中,需要结合具体问题选择合适的优化算法。
一类修正的阻尼牛顿法

一类修正的阻尼牛顿法庞军彦, 李秦(兰州交通大学 数理与软件工程学院,兰州 730070)摘要:本文在Marquardt –Levenber 方法和Goldstein –Price 方法的基础上对阻尼牛顿法(1)()2()1()[()]()k k k k k x x f x f x λ+-=-∇∇作了适当改进,得出了一种新的算法,与原来算法相比较,新算法避免了二阶导数矩阵的奇异性和非正定性,从而使迭代在二阶导数矩阵奇异和非正定的条件下也能进行.文章还给出了新算法收敛性分析和算法步骤,最后给出了数值试验.关键字:阻尼牛顿法;迭代格式;收敛性;数值试验A modified damped Newton methodPANG Jun-yan ,LI Qin(School of Mathematics, Physics and Software Engineering, Lanzhou Jiaotong University,Lanzhou 1730070, China)Abstract: In this paper,based on the two methods of Marquardt –Levenber and Goldstein –Price.The damped Newton method (1)()2()1()[()]()k k k k k x x f x f x λ+-=-∇∇ is improved properly.We proposed a new algorithm.In comparison with the original algorithm.The new algorithm avoids the singular and non positive definiteness of two order derivative matrix.The iteration can continue in the singular and non positive definite conditions of two order derivative matrix. The convergence of the new algorithm is analyzed and the algorithm steps is given.Finally,the numerical tests are presented.Key words: damped Newton method; iterative format; convergence; numerical tests1、 引言在科学和工程计算中,常常要用到数值计算方面的知识来求最优化极小值基金项目:国家自然科学基金(A020205)作者简介:庞军彦(1983-),男,甘肃省陇南市礼县人,兰州交通大学硕士研究生,主要从事数值计算方面的研究李秦(1965-),女,陕西西安人,教授,主要研究方向为算法设计与分析问题min ()f x ,而在一系列数值计算方法中,牛顿迭代法无疑是求此类问题的一种非常重要的方法,其迭代格式为(1)()2()1()[()]()k k k k x x f x f x +-=-∇∇ (k=1,2,…) 其中()()k f x ∇是函数()f x 在()k x 的一阶导数矩阵,2()()k f x ∇是函数()f x 的二阶导数矩阵(Hessian 矩阵),众所周知,牛顿法有一定的缺点,即对初值要求很苛刻,要求初值0x 必须在*x 附近取值,否则有可能迭代不收敛或收敛很慢 .阻尼牛顿法是对牛顿法的修正得到的,其迭代格式为(1)()2()1()[()]()k k k k k x x f x f x λ+-=-∇∇,其中k λ满足()()()()min k k k k k f x p f x p λλλ+=+. 阻尼牛顿法保持了牛顿法的二阶收敛性,即满足(1)*()*k k x x M x x +-≤-,而且对初值没有过于苛刻的要求。
修正牛顿法最优化C++程序

for(;i<2*n;i++)
{
t[1]+=f_xs[i]*p[i%n];
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
t[1]+=f_xs[(n+1)+n*(i+1)-i*(i+1)/2+j-i-1]*(x[i]*p[j]+x[j]*p[i]);
{
for(int j=0;j<n;j++)
{
cout<<setw(10)<<c[i][j]<<" ";
}
cout<<endl;
}
}
void xiang_cheng(double a[n][n],double b[n],double c[n])//n*n矩阵乘以n*1矩阵
int tap1=0,tap2=0;//最大列主元下标
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==j)
{
c[i][j]=1;
}
else
{
c[i][j]=0;
}
for(j=0;j<n;j++)
{
Hesse[i][j]=Q[i][j];
}
}
cout<<"Hesse 矩阵:"<<endl;
一个修正的三阶收敛的牛顿迭代法

k = 2, . 3
() 6
一 , = ( / !I ’ )f ( , c 1 k ) ( / ) 厂
本文 引入 步长 因子 , 使得 牛 顿法通 过 加 速后 ,
具 有三 阶收敛 速 度.
Y k
J
l
一 而
一
’
:
1 基 本 定 义
定义 1 … 令 。 , , 是 收 敛 于 的序 ,. …
列 , 令 e 一o 如果 存在 着数 P及 常数 C ≠ 并 = / . 0 使 得 ,
一
,
Y)
= C : +o e 为 误 差 e (P )
l
设 是 方程 ) =0的单根 , 且
一 而
;
定义 2
。,
S p 若 + l , 机, 出 近似 t e3 一 < 停 输
根 ;
是 求 O近似 解 的迭代 序列 的连 续 3 , L 项
对 迭代 公式 ( )有 5
)
y 而 一 一
一 而 ;
X k+l :
(c 2 ) ,
Xl k +
S p3 若 l t e
出近似根 ;
_c 2 2
一 l 或 >n 停机, < , 输
Y 生: +,+ e, k 丽 ) +2 。3 _ e () 一 一3 n 2 ̄ ’ c
关 于非 线性 方程 I )=0的求 解 , 典 牛顿 厂 ( 经
迭代 法是 一种 最 实 用 和最 重 要 的 方 法 , 因为 其 简
p p= 可
2 修 正 的 牛 顿 迭 代 法
2 1 算 法 . 考虑 非 线性方 程
‘ .
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值优化》实验报告
实验[2] [修正牛顿法]
专业学号姓名日期
1 实验目的
练习matlab程序设计,深刻理解修正牛顿法,通过计算机计算迭代计算近似解
2 实验内容
利用程序求解无约束优化问题
f(x)=100(x1^2-x2^2)^2+(x1-1)^2在R^2上的最小值
3 算法设计
Function[x,val,k]=revisenm(fun,gfun,hess,x0)
功能:用牛顿修正法求解无约束问题:min f()
输入:x0是初始点,fun gfun hess分别是求目标函数值梯度hesse矩阵函数输入:x val 分别是近似最优点和最优值,k是迭代次数
4 程序代码
(fun,x0)+sigma*rho^m*g'*d)
mk=m;break;
end;
m=m+1;
end;
x0=x0+rho^mk*d;
val=feval (fun,x0);
g0=g; d0=d;
k=k+1;
end;
x=x0;
val=feval (fun,x)
function f=fun(x)
f=100*(x(1)*x(1)-x(2)*x(2))^2+(x(1)-1)^2;
end;
function g=gfun(x)
g=[400*x(1)*(x(1)^2-x(2))+2*(x(1)-1),-200*(x(1)^2-x(2))]'; end;
5 运行结果
有未知错误,暂时没有运行出正确结果
6 结果分析
选初始值x0=[-1.2 1]
没有运行出正确结果。
程序可以运行,但是没有正确结果,程序存在bug 修正牛顿法避免了牛顿法的缺陷,使得在每一个迭代点处都保证f下降。