yx O x * x 1 x 0关于牛顿迭代法的课程设计实验指导非线性方程(或方程组)问题可以描述为求 x 使得f (x ) = 0。
在求解非线性方程的方法中,牛顿迭代法是求非线性方程(非线性方程组)数值解的一种重要的方法。
牛顿是微积分创立者之一,微积分理论本质上是立足于对世界的这种认识:很多物理规律在微观上是线性的。
近几百年来,这种局部线性化方法取得了辉煌成功,大到行星轨道计算,小到机械部件设计。
牛顿迭代法正是将局部线性化的方法用于求解方程。
一、牛顿迭代法及其收敛速度牛顿迭代法又称为牛顿-拉夫逊方法(Newton-Raphson method ),是一种在实数域和复数域上通过迭代计算求出非线性方程的数值解方法。
方法的基本思路是利用一个根的猜测值x 0做初始近似值,使用函数f (x )在x 0处的泰勒级数展式的前两项做为函数f (x )的近似表达式。
由于该表达式是一个线性函数,通过线性表达式替代方程中的求得近似解x 1。
即将方程f (x ) = 0在x 0处局部线性化计算出近似解x 1,重复这一过程,将方程f (x ) = 0在x 1处局部线性化计算出x 2,求得近似解x 2,……。
详细叙述如下:假设方程的解x *在x 0附近(x 0是方程解x *的近似),函数f (x )在点x 0处的局部线化表达式为)()()()(000x f x x x f x f '-+≈由此得一次方程 0)()()(000='-+x f x x x f求解,得 )()(0001x f x f x x '-= 如图1所示,x 1比x 0更接近于x *。
该方法的几何意义是:用曲线上某点(x 0,y 0)的切线代替曲线,以该切线与x 轴的交点(x 1,0)作为曲线与x 轴的交点(x *,0)的近似(所以牛顿迭代法又称为切线法)。
设x n 是方程解x *的近似,迭代格式)()(1n n n n x f x f x x '-=+ ( n = 0,1,2,……) 就是著名的牛顿迭代公式,通过迭代计算实现逐次逼近方程的解。
牛顿迭代法的最大优点是收敛速度快,具有二阶收敛。
以著名的平方根算法为例,说明二阶收敛速度的意义。
例1.已知4.12≈,求2等价于求方程f (x ) = x 2 – 2 = 0的解。
由于x x f 2)(='。
应用牛顿迭代法,得迭代计算格式)/2(211n n n x x x +=+,(n = 0,1,2,……) 取x 0= 1.4为初值,迭代计算3次的数据列表如下 迭代次数 近似值 15位有效数误差 01.4 1.41421356237310 -1.42e-002 11.41428571428571 1.41421356237310 7.21e-005 21.41421356421356 1.41421356237310 1.84e-009 31.41421356237309 1.41421356237310 -2.22e-016图1 牛顿迭代法示意图其中,第三栏15位有效数是利用MA TLAB 的命令sqrt(2)计算结果。
观察表中数据,第一次迭代数据准确到小数点后四位,第二次迭代数据准确到小数点后八位,……。
二阶收敛速度可解释为,每迭代一次,近似值的有效数位以二倍速度递增。
对于计算任意正数C 的平方根,牛顿迭代法计算同样具有快速逼近的性质。
二、牛顿迭代法的收敛性牛顿迭代法在使用受条件限制,这个限制就是通常所说的牛顿迭代法的局部收敛性。
定理 假设f (x )在x *的某邻域内具有连续的二阶导数,且设f (x *)=0,0)(*≠'x f ,则对充分靠近x *的初始值x 0,牛顿迭代法产生的序列{x n }收敛于x *。
下面例子是牛顿迭代法不收敛的反例。
反例说明,牛顿迭代法局部收敛性要求初始点要取得合适,否则导致错误结果。
例2用牛顿迭代法解方程 f (x ) = x 3 – x – 3 = 0。
分析:利用MA TLAB 求多项式零点命令roots(p),计算得三次方程的三个根如下表 r 1 r 2 r 31.6717 -0.8358 - 1.0469i -0.8358 + 1.0469i1为了使用牛顿迭代法计算,对于 f (x ) = x 3 – x – 3 ,首先求导数,得13)(-='x x f 。
取x 0 = 0和x 0 = 1取分别用牛顿迭代法计算,得 x 00 1 x 1-3.0000 2.5000 x 2-1.9615 1.9296 x 3-1.1472 1.7079 x 4-0.0066 1.6726 x 5-3.0004 1.6717 x 6-1.9618 1.6717 …… …… ……对于迭代初值取x 0=0,0附近,算法将陷入死循环。
x 0 yx 1x 2 x 3 y=x 3 – x – 3x图2 牛顿迭代法初值不收敛示意图而迭代初值取x 0=1,可以使牛顿迭代法得到收敛。
三、特殊代数方程的牛顿迭代法收敛区域将牛顿迭代法用于求解高阶代数方程时,首先回顾一个代数基本定理,即“一个n 阶多项式在复数域内有n 个根”。
根据牛顿迭代法的局部收敛性质,任意取一个数据做为牛顿迭代的初值,可能导致迭代不收敛,即使这一个初值可以使迭代法收敛,下一个有趣的问题是“迭代序列将收敛于哪一个根”,其规律如何?例3牛顿迭代法的收敛区域问题:Newton 迭代法可以用于求解复数方程 z 3 – 1 = 0,该方程在复平面上三个根分别是11=z ,i z 23212--=,i z 23213+-= 选择中心位于坐标原点,边长为4的正方形内的任意点作初始值,进行迭代,将不收敛的点定义为第一类,给它们标一种颜色;再把收敛到三个根的初值分为三类,并分别标上不同颜色。
对充分多的初始点进行实验,绘出牛顿迭代法对该方程的收敛域彩色图。
图3 牛顿迭代法收敛区域色图问题分析:记f (z ) = z 3 – 1,则23)(z z f =',所以牛顿迭代公式为 3/)/1(21n n n n z z z z --=+由于牛顿迭代法的二阶收敛速度,对于一个取定的初值z 0,如果z 0是一个可以导致迭代收敛的初值,则迭代10次已经达到足够精度,故可以取迭代次数为10。
考虑以坐标原点为中心的正方形区域}22,22|),{(≤≤-≤≤-=y x y x Ω取步长h =0.02,在区域内取离散网格点⎩⎨⎧⨯+-=⨯+-=h k y h j x kj 22,( j ,k =0,1,…,200) 由此可以构造出规则的复数z jk = x j + i y k ,( j ,k =0,1, (200)对于这些点,逐一用牛顿迭代法取初值进行迭代实验,判断是否收敛?如果收敛,到底以该点为初值的迭代序列收敛到哪方程的一个根?为了记录实验结果,构造四个阶数均为201×201矩阵:Z 0、Z 1、Z 2、Z 3,开始时这四个矩阵都设为全零矩阵。
如果以z jk 为初值的迭代实验结果是不收敛,则将Z 0的第j 行第k列的元素改写为1;如果以z jk为初值的迭代实验结果是收敛到第一个根,则将Z1的第j行第k列的元素改写为1;如果以z jk为初值的迭代实验结果是收敛到第二个根,则将Z2的第j行第k列的元素改写为1;如果以z jk为初值的迭代实验结果是收敛到第三个根,则将Z3的第j行第k列的元素改写为1。
首先分析矩阵Z0的数据,由于该矩阵在开始时刻为全零矩阵,而在迭代实验结束后,不收敛的点对应元素被改写为“1”。
所以,矩阵的元素只可能是“0”或“1”,根据该矩阵的全部的非零元素所在的位置可以使用MA TLAB的图形绘制命令spy()或pcolor()等显示出一个特殊的图形。
根据Z0数据绘的图形如下所示图4 牛顿迭代法不收敛区域色图导致牛顿迭代法不收敛的初始点所形成的平面点集是一个著名的集合,称为茹莉亚集(为纪念法国女数学家茹莉亚而命名)。
为了得到全局的收敛或不收敛情况,需要对四个矩阵进行叠加。
如果直接相加将导致一个全“1”矩阵,不可能得出希望的结果。
故,对矩阵做如下组合处理,令Z = Z0 + 2Z1 + 3Z2 + 4Z3则矩阵Z的元素由“1”、“2”、“3”、“4”这四个元素组成。
该矩阵的某一位置上数据为“1”,说明这一位置上的复数做初值导致牛顿迭代法不收敛;位置上数据为“2”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第一个根;位置上数据为“3”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第二个根;位置上数据为“4”,说明这一位置上的复数做初值导致牛顿迭代法收敛到第三个根。
所以该矩阵包含了矩阵区域内离散点集合做为牛顿迭代法收敛实验结果的全部信息。
将这一矩阵用MA TLAB作图命令pcolor()作用,将绘出图3所示的收敛区域色图。
导致牛顿迭代法收敛到第一个根的初始点所形成的平面点集,可以根据Z1数据绘图形四、关于实验的注记1.MA TLAB相关命令介绍(1)求多项式零点命令roots()该命令用于求多项式P(x) = a1x n + a2 x n-1 + …+ a n x + a n+1的全部零点。
例如z3– 1 = 0的三个零点,只需用命令:roots([1 0 0 -1]),可得ans =-0.5000 + 0.8660i-0.5000 - 0.8660i1.0000(2)绘伪彩色图命令pcolor()该命令主要用于绘制矩阵色图,根据矩阵中元素数据的大小不同绘不同颜色。
常常与命令shading interp结合使用效果会更好。
在MATLAB命令窗口中键入help pcolor,可获得英文帮助信息。
2. 例题3所用MA TLAB 程序及注释:X=roots([1,0,0,-1]); %利用MATLAB 命令求三次方程的根r1=X(1);r2=X(2);r3=X(3);h=0.02;N=1+4/h; %确定网格步长及网格点规模z0(N,N)=0;z1=z0;z2=z0;z3=z0; %定义四个大矩阵为全零矩阵t=(-2:h:2)+eps;[x,y]=meshgrid(t); %确定网格点坐标z=x+y*i;for j=1:Nfor k=1:Np=z(j,k); %提取迭代初始点for n=1:10p=p-(p-1/p^2)/3; %牛顿迭代操作endif abs(p-r1)<0.01z1(j,k)=1; %确定收敛到第一个根的初始点elseif abs(p-r2)<0.01z2(j,k)=1; %确定收敛到第二个根的初始点elseif abs(p-r3)<0.01z3(j,k)=1; %确定收敛到第三个根的初始点elsez0(j,k)=1; %确定不收敛的初始点endendendZ=z0+2*z1+3*z2+4*z3;figure(1)pcolor(x,y,Z),shading interp %绘牛顿迭代法收敛域figure(2)pcolor(x,y,z0),shading interp %绘牛顿迭代法不收敛域课程设计实验题目1.牛顿迭代法解复方程z n + 1 = 0的收敛域问题。