牛顿迭代法论文.docx
- 文档编号:9577296
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:54.60KB
牛顿迭代法论文.docx
《牛顿迭代法论文.docx》由会员分享,可在线阅读,更多相关《牛顿迭代法论文.docx(14页珍藏版)》请在冰豆网上搜索。
牛顿迭代法论文
南昌工程学院
课程设计
姓名:
专业:
年级:
学号:
年月日
牛顿迭代算法
摘要:
牛顿迭代法(Newton'smethod)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。
多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。
另外该方法广泛用于计算机编程中。
牛顿迭代法是一个重要的计算方法和思想。
牛顿迭代法的主要功能:
计算方程时可以比较快速方便的计算出来结果但并不影响计算出来结果的精确度,运用于多种工业设计和数学设计方面.
关键字:
牛顿迭代方程根算法
一.牛顿迭代法简介
1.1牛顿迭代法的概述
牛顿迭代法(Newton'smethod)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在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))。
1.2牛顿迭代法的优点
迭代法是求方程近似根的一个重要方法,也是计算方法中的一种基本方法,它的算法简单,是用于求方程或方程组近似根的一种常用的算法设计方法。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程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。
二.牛顿迭代法的分析
2.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.2牛顿迭代法的要求
牛顿迭代法方法简单,每次迭代都是简单的重复运算,易于编制程序;与
求解线性方程的精确法相比,简单迭代法对于字长位数较少的计算机更为适用,它可以用增加迭代次数来弥补字长位数少的不足.初值可以任取,因而中间结果偶然错误不影响最后结果的获得。
缺点:
迭代速度较慢。
2.3牛顿迭代法和其它算法的比较
(1)二分法与牛顿迭代的比较:
1.二分法二分法要求函数f(X)在有根区间连续即可,而且运算简单,易于在计算机上实现,可用二分法求f(x)=0与[a,b]内全部实根,但二分法不能起复根及偶数重根。
由于每步误差是以1/2因子下降,收敛比较缓慢。
方法:
任取两点x1和x2,判断(x1,x2)判断(x2,x2)有无实根。
如右图所示,如果f(x1)和f(x2)付号相反,说明(x1,x2)之间有一实根。
取(x1,x2)的中点x,检查f(x)和f(x1)是否同符号,如果不同号,说明实根在(x1,x)区间,x作为新x2,舍弃(x,x2)区间;若同号,则实根在(x,x2)区间,x作为新x1,舍弃(x1,x)区间。
再根据新的x1,x2,找中点,重复上述步骤。
直到|x1-x2|<10-6时,x=(x1+x2)/2为所求。
2.牛顿迭代法牛顿迭代法的收敛速度比简单迭代法快。
它的应用范围较广,可用于解代数方程和超越方程,既可求方程的实根,也可求复根,既可求单根,也可求重根。
优点是在方程单根附近具有较高的收敛速度,因此是将近似根精确化的一种相当有效的方法。
几何意义:
f(x)=a0xn+a1xn-1+….+an-1x+an=0求f(x)在X0附近的根 计算公式:
Xn+1=Xn-f(Xn)/f’(Xn)精度:
ε=|Xn+1-Xn|<1.0e-m,m=6。
所求的根:
满足精度的Xn
(2)简单迭代法与牛顿代法的比较
1.简单迭代法
将方程f(x)=0化为一个等价(同解)的方程:
x=φ(x),给定一个初值x0,代入右端可算得一个x1=φ(x0),再以x1代入右端,又可得x2=φ(x1)……如此继续下去,会得到一个序列{xk},其中:
xk+1=φ(xk) k=0,1,2,…,n
(1)
{xk}称为迭代序列,φ(x)称为迭代函数,式
(1)称为迭代格式.如果迭代序列是收敛的,且收敛于X*,则当φ(x)连续时,必有:
这说明,只要迭代序列收敛,一般总收敛于原方程的解.实际计算当然不能做无穷多步,迭代到一定程度,就取xk+1作为原方程根的近似值.这种求根法称为简单迭代法,或称逐次逼近法.
2.牛顿迭代法
设xk是f(x)=0的一个近似根,把f(x)在xk处作泰勒展开:
显然是f(x)=0的同解方程,所以迭代函数为
故在α的邻域R内,对任意初值x0,由式(4)得到的迭代序列收敛于α.迭代式(4)所确定的方法称为牛顿迭代法.
牛顿迭代法有明显的几何意义.由式(4)知xk+1是点(xk,f(xk))处y=f(x)的切线:
与X轴交点的横坐标如图1所示.也就是说,新的近似值xk+1是用代替曲线y=f(x)的切线与x轴相交得到的.继续取点(xk+1,f(xk+1)),再作切线与X轴相交,又可得xk+2……由图1可见,只要初值取得充分靠近α,这个序列就会很快收敛于α.
由于牛顿迭代法的局部收敛性,又对初值要求较高,只有初值取得充分靠近α,才能保证序列收敛
三.牛顿迭代求根的方法
牛顿迭代求根的方法:
设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),按下面步骤执行:
(1)选一个方程的近似根,赋给变量x0;
(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;
(3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤
(2)的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。
设在给定点处对函数进行二次逼近。
二次逼近q如下定义:
令是使的点,并重复这个过程:
k=0,1,2,该过程当或者时停止,其中是一个很小的数。
该方法只能用于二次可微函数,
(1).取误差限0.01,从x=4开始,用牛顿法极小化f(x)=
由于。
应用牛顿迭代法,得迭代计算格式
,(k=0,1,2,……)取x0=4为初值,
输入初始值x0:
4
输入精确值accurate:
0.01
x[1]=4.000000f(x[1])=24.000000
x[2]=-1.000000f(x[2])=-1.000000
例
(2)取误差限0.01,从x=4开始,用牛顿法极小化
步骤:
(1)选一个接近于x的真实根的近似根x1;
(2)通过令是使的点求;(3)并重复
(2)过程:
k=0,1,2,该过程当或者时停止(4)一直求下去,直到接近真正的根。
当两次求出的根之差就停止
牛顿迭代公式是:
输入初始值x0:
4
输入精确值accurate:
0.01
x[1]=4.000000f(x[1])=-512.000000
x[2]=2.800000f(x[2])=-96.588800
x[3]=2.012500f(x[3])=-16.607539
x[4]=1.507817f(x[4])=-1.794416
x[5]=1.204385f(x[5])=0.675821
x[6]=1.051791f(x[6])=0.982773
x[7]=1.004643f(x[7])=0.999870
例(3)取误差限0.01,从x=0.6开始,重做
(2)。
讨论用该方法会发生什么现象。
输入初始值x0:
0.6
输入精确值accurate:
0.01
输入初始值x0:
0.6
输入精确值accurate:
0.01
x[1]=0.600000f(x[1])=0.475200
x[2]=-0.600000f(x[2])=-0.475200
x[3]=-0.827608f(x[3])=-0.860023
x[4]=-1.158643f(x[4])=-0.815152
x[5]=-1.598022f(x[5])=3.240444
x[6]=-2.122156f(x[6])=22.616865
x[7]=-2.699757f(x[7])=80.664133
x[8]=-3.308431f(x[8])=214.573428
x[9]=-3.935325f(x[9])=475.738982
x[10]=-4.573380f(x[10])=929.789032
x[11]=-5.218623f(x[11])=1656.580672
x[12]=-5.868713f(x[12])=2750.195941
x[13]=-6.522204f(x[13])=4318.940133
x[14]=-7.178162f(x[14])=6485.341129
x[15]=-7.835963f(x[15])=9386.149140
x[16]=-8.495174f(x[16])=13172.336610
x[17]=-9.155487f(x[17])=18009.098183
x[18]=-9.816676f(x[18])=24075.850691
x[19]=-10.478573f(x[19])=31566.233158
x[20]=-11.141050f(x[20])=40688.106800
x[21]=-11.804007f(x[21])=51663.555035
x[22]=-12.467368f(x[22])=64728.883480
x[23]=-13.131069f(x[23])=80134.619961
x[24]=-13.795062f(x[24])=98145.514509
陷入死循环
牛顿迭代法的收敛性
牛顿迭代法在使用受条件限制,这个限制就是通常所说的牛顿迭代法的局部收敛性。
定理假设f(x)在x*的某邻域内具有连续的二阶导数,且设f(x*)=0,,则对充分靠近x*的初始值x0,牛顿迭代法产生的序列{xn}收敛于x*。
下面例子是牛顿迭代法不收敛的反例。
反例说明,牛顿迭代法局部收敛性要求初始点要取得合适,否则导致错误结果。
例(3)在例2基础上取误差限0.01,从x=0.6开始,重做
(2)。
讨论用该方法会发生什么现象。
对于迭代初值取x0=0.6,迭代数列中的第四项又回到初始点x0=0.6附近,算法将陷入死循环。
而迭代初值取x0=4,可以使牛顿迭代法得到收敛。
六、迭代求根应注意的事项
牛顿迭代法也有几点注意事项:
①关于初始近似的选取。
?
?
当f(x)在[a,b]上二阶连续可微时,常用下述方法判别收敛性和选取初始近似值x0。
即如果在区间[a,b]上如下条件成立:
?
?
(a)f''(x)、f'(x)在[a,b]上不变号;?
?
(b)f(a)f(b)<0,f(b)f'(b)>0(或f(a)f'(a)>0)?
?
那么,当x0=b或x0=a时,牛顿格式收敛。
②使用时x0应选的尽量靠近x*。
③当f'(x)不易求得时,不宜采用此方法。
牛顿迭代方法能够有效的基本条件是:
迭代公式必须是收敛的(也就是通过迭代运算,每一次的结果必须是更接近真实值的)具体使用迭代法求根时应注意以下两种可能发生的情况:
(1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;
(2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败
四,附录
例题
(1)程序
#include
#include
doublef(doublex)
{
returnpow(x,2)+2*x;
}
doubleg(doublex)
{
return2*x+2;
}
doubleh(doublex)
{
return2;
}
voidmain()
{
inti,j;
doublex0,accurate,x[1000],Abc;
printf("输入初始值x0:
");
scanf("%lf",&x0);
printf("输入精确值accurate:
");
scanf("%lf",&accurate);
i=1;
x[0]=x0;
x[1]=x[0]-g(x0)/h(x0);
Abc=x[i]-x[i-1];
if(fabs(Abc)>accurate)
{
do
{
x[i+1]=x[i]-g(x[i])/h(x[i]);
i++;
Abc=x[i]-x[i-1];
}while(fabs(Abc)>accurate);
}
for(j=0;j
{
printf("x[%d]=%lff(x[%d])=%lf\n",j+1,x[j],j+1,f(x[j]));
}
}
例题
(2)程序
#include
#include
doublef(doublex)
{
if(x>0)
return4*pow(x,3)-3*pow(x,4);
if(x<0)
return4*pow(x,3)+3*pow(x,4);
}
doubleg(doublex)
{
if(x>0)
return12*pow(x,2)-12*pow(x,3);
if(x<0)
return12*pow(x,3)+12*pow(x,3);
}
doubleh(doublex)
{
if(x>0)
return24*x-36*pow(x,2);
if(x<0)
return25*x+36*pow(x,3);
}
voidmain()
{
inti,j;
doublex0,accurate,x[1000],Abc;
printf("输入初始值x0:
");
scanf("%lf",&x0);
printf("输入精确值accurate:
");
scanf("%lf",&accurate);
i=1;
x[0]=x0;
x[1]=x[0]-g(x0)/h(x0);
Abc=x[i]-x[i-1];
if(fabs(Abc)>accurate)
{
do
{
x[i+1]=x[i]-g(x[i])/h(x[i]);
i++;
Abc=x[i]-x[i-1];
}while(i<100);
}
for(j=0;j
{
printf("x[%d]=%lff(x[%d])=%lf\n",j+1,x[j],j+1,f(x[j]));
}
}
五.参考文献
[1]龙熙华.数值分析[M].西安:
陕西科学技术出版社,2000.20-22.
[2]《数值分析简明教程》-2Editon-高等教育出版社-page136-算法流程图
[3]谭浩强C程序设计[M]清华大学出版社1999年12月第2版
[4]《数值计算方法》,冯天祥编著.四川科技出版社.2003
[5]XX百科牛顿迭代法
[6]《数值计算方法》杨一都编著.高等教育出版社2008.4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 牛顿 迭代法 论文