一 .牛顿迭代法简介
1.牛顿迭代法的产生背景
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻方程f(x)=0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。
利用牛顿迭代法来解决问题需要做好的工作:
(1)确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
(2)建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式
(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
(3)对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
2.牛顿迭代法的概述
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson
method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻方程f(x)=0的根。设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=f(x)的切线L,L的方程为
y=f(x0)f'(x0)(x-x0),求出L与x轴交点的横坐标 x1=x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴的横坐标 x2=x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x)=f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。
3.牛顿迭代法的优点
迭代法是求方程近似根的一个重要方法,也是计算方法中的一种基本方法,它的算法简单,是用于求方程或方程组近似根的一种常用的算法设计方法。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。牛顿法是方程求根的一个有力方法,常常能快速求出其他方法求不
出或者难以求出的解。假定有一个函数y=f(x),方程f(x)=0在x=r处有一个根,对于此根,先估计一个初始值 Xo(可以是猜测的)。得到一个更好的估计值X1。为此f(X)=Xo处作该曲线的切线,并将其延长与 x 轴相交。切线与x轴的交点通常很接近r,我们用它作为下一个估计值X1,求出X1后,用X1代替Xo。重复上述过程,在x=X1处作曲线的另一条切线,并将其延长至与x轴相交,用切线的x轴截距作为下一个近似值X2……这样继续下去,所得出的这个x轴截距的序列通常迅速接近根r。
缺点:选定的初值要接近方程的解,否则有可能的不到收敛的结果。再者,牛顿迭代法计算量比较大。因每次迭代除计算函数值外还要计算微商值。
二 .牛顿迭代法的分析
1.牛顿迭代法的思想
多数情况下是得不到一般数学方法所需的函数表达式,或难以到原函数。线性方程组的求解更是让人望而生畏,往往因为计算机工作量太大而无法实施。对这些问题,都可以利用数值方法来求解,在计算机中实现的数值方法也称为数值算法。牛顿迭代法是数值分析中一个重要的计算方法和思想。迭代法的主要功能:计算方程时可以比较快速。
在工程实践中,有许多问题往往归结为求一元非线性方程的实根、求函数的定积分、求线性方程组的解等。而即使对于求一元方程实根这类问题,也只有在少数简单的情况下,才可以用传统的方法得到根的数学表达式。对于需要计算定积分的问题,便的计算出来结果但并不影响计算出来结果的精确度,运用于多种工业设计和数学设计方面。
牛顿迭代法用到导数f'(x),但有时求导困难,如果导数用差商(y2-y1)/(x2-x1)逼近,便是一种快速的截弦法。取两个x值作试探,判断f(x)是否副近于0,如果f(x)不理想,用经过(x1,y1)、(x2,y2)的直线(截弦)代替f(x)求根,近似根x外推=x1-(x2-x1)*y1/(y2-y1),此x靠性会更好些。求根过程:是叠代过程,即由(x1,x2)→f(x1)、f(x2)、f(x中)或f(x外推)→(X1,X2),大写X1,X2就是下一轮计算的小写x1,x2,二分法、截弦法、牛顿迭代法计算公式不同,一个用中值外推,后二者用直线外推,二者用直线外推,但它们计算过程几乎相同,具体程序详见本源代码。对截弦法而言,x1,y1是起点,x2,y2直的控制点,,x1,y1是起点,x2,y2直的控制点,x2不能与x1相等,否则直线画不出来,但x1与x2应尽量靠近,远了作出的直线准确度下降。在求根过程中会用到牛顿迭代伪代码:牛顿迭代法伪代码:
x1=-2,y1=f(x1)
x2=-2,y2=f(x2)
while(){//循环
x=x1-(x2-x1)*y1/(y2-y1),y=f(x)
如果|x-x2|<0.01或y为0则跳出循环
x1=x2,y1=y2
x2=x,y2=y
2.牛顿迭代法的要求
牛顿迭代法方法简单,每次迭代都是简单的重复运算,易于编制程序;与 求解线性方程的精确法相比,简单迭代法对于字长位数较少的计算机更为适用,它可以用增加迭代次数来弥补字长位数少的不足.初值可以任取,因而中间结果偶然错误不影响最后结果的获得。缺点:迭代速度较慢。
三. 牛顿迭代求根的方法
牛顿迭代求根的方法:设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),按下面步骤执行:
(1)选一个方程的近似根,赋给变量x0;
(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
(3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算 若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根
四、Newton迭代法具体例子的实现
设在给定点x1处对函数进行二次逼近。二次逼近q如下定义:
令x2是使q=0的点,并重复这个过程:
该过程当 或者 时停止,其中 是一个很小的数。该方法只能用于二次可微函数, =0
(1).取误差限0.01,从x=4开始,用牛顿法极小化f(x)= 由于 。应用牛顿迭代法,得迭代计算格式 (k= 0,1,2,……)取x0= 4为初值,
输入初始值x0:4
输入精确值accurate:0.01
x[1]=4.000000 f(x[1])=24.000000
x[2]=-1.000000 f(x[2])=-1.000000
例(2)取误差限0.01,从x=4开始,用牛顿法极小化
步骤:
(1) 选一个接近于x的真实根的近似根x1;
(2) 通过
令x2是使q=0的点求x2;
(3) 并重复(2)过程: k=0,1,2,…… 该过程当 或者 时停止
(4)一直求下去,直到接近真正的根。当两次求出的根之差 就停止
牛顿迭代公式是:
输入初始值x0:4
输入精确值accurate:0.01
x[1]=4.000000 f(x[1])=-512.000000
x[2]=2.800000 f(x[2])=-96.588800
x[3]=2.012500 f(x[3])=-16.607539
x[4]=1.507817 f(x[4])=-1.794416
x[5]=1.204385 f(x[5])=0.675821
x[6]=1.051791 f(x[6])=0.982773
x[7]=1.004643 f(x[7])=0.999870
例(3)取误差限0.01,从x=0.6开始,重做(2)。讨论用该方法会发生什么现象。 c语言牛顿迭代法求根
输入初始值x0:0.6
输入精确值accurate:0.01
输入初始值x0:0.6
输入精确值accurate:0.01
x[1]=0.600000 f(x[1])=0.475200
x[2]=-0.600000 f(x[2])=-0.475200
x[3]=-0.827608 f(x[3])=-0.860023
x[4]=-1.158643 f(x[4])=-0.815152
x[5]=-1.598022 f(x[5])=3.240444
x[6]=-2.122156 f(x[6])=22.616865
x[7]=-2.699757 f(x[7])=80.664133
x[8]=-3.308431 f(x[8])=214.573428
x[9]=-3.935325 f(x[9])=475.738982
x[10]=-4.573380 f(x[10])=929.789032
x[11]=-5.218623 f(x[11])=1656.580672
x[12]=-5.868713 f(x[12])=2750.195941
x[13]=-6.522204 f(x[13])=4318.940133
x[14]=-7.178162 f(x[14])=6485.341129
x[15]=-7.835963 f(x[15])=9386.149140
x[16]=-8.495174 f(x[16])=13172.336610
x[17]=-9.155487 f(x[17])=18009.098183
x[18]=-9.816676 f(x[18])=24075.850691
x[19]=-10.478573 f(x[19])=31566.233158
x[20]=-11.141050 f(x[20])=40688.106800
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论