当前位置:文档之家› 迭代法

迭代法

题目:Newton-Raphson 迭代法 (1)计算原理 (2)编出计算机程序 (3)给出算例(任意题型) (1)计算原理:牛顿-拉夫森(Newton-Raphson)迭代法也称为牛顿迭代法,它是数值分析中最重要的方法之一,它不仅适用于方程或方程组的求解,还常用于微分方程和积分方程求解。

用迭代法解非线性方程时,如何构造迭代函数是非常重要的,那么怎样构造的迭代函数才能保证迭代法收敛呢?牛顿迭代法就是常用的方法之一,其迭代格式的来源大概有以下几种方式:1设()[]2,f x C a b ∈,对()f x 在点[]0,x a b ∈,作泰勒展开:略去二次项,得到()f x 的线性近似式:()()()()000f x f x f x x x '≈+- 由此得到方程()0f x =的近似根(假定()00f x '≠),()()000f x x x f x =-' 即可构造出迭代格式(假定()00f x '≠):()()1k k k k f x x x f x +=-' 这就是牛顿迭代公式,若得到的序列{}k x 收敛于α,则α就是非线性方程的根。

2 牛顿迭代法牛顿切线法,这是由于()f x 的线性化近似函数()()()()000l x f x f x x x '≈+-是曲线()y f x =过点()()00,x f x 的切线而得名的,求()f x 的零点代之以求()l x !2))((''))((')()(20000x x f x x x f x f x f -+-+=ξ的零点,即切线与x 轴交点的横坐标,如左图所示,这就是牛顿切线法的几何解释。

实际上,牛顿迭代法也可以从几何意义上推出。

利用牛顿迭代公式,由k x 得到1k x +,从几何图形上看,就是过点()(),k k x f x 作函数()f x 的切线k l ,切线k l 与x 轴的交点就是1k x +,所以有()()1k k k k f x f x x x +'=-,整理后也能得出牛顿迭代公式:3 要保证迭代法收敛,不管非线性方程()0f x =的形式如何,总可以构造:作为方程求解的迭代函数。

因为: 而且在根附近越小,其局部收敛速度越快,故可令:若0(即根不是0的重根),则由得:,因此可令,则也可以得出迭代公式:。

4 迭代法的基本思想是将方程改写成等价的迭代形式,但随之而来的问题却是迭代公式不一定收敛,或者收敛的速度较慢。

运用前述加速技巧,对于简单迭代过程,其加速公式具有形式:,其中 记,上面两式可以合并写成:这种迭代公式称作简单的牛顿公式,其相应的迭代函数是:。

需要注意的是,由于是的估计值,若取,则实际上便是的估计值。

假设,则可以用代替上式中的,就可得到牛顿法的迭代公式:。

)(')(1k k k k x f x f x x -=+)()()(x f x k x x x -==ϕ)0)((≠x k )(')()()('1)('x f x k x f x k x --=ϕ)('x ϕα0)('=αϕ≠)('αf α=)(x f 0)('=αϕ)('1)(ααf k =)('1)(x f x k =)(')(1k k k k x f x f x x -=+0)(=x f )(x x ϕ=)(1n n n x f x x +=+θθϕ--=+1)(1n n n x x x )(111n n n x x x --+=++θθ)(1n n x x ϕ=+1-=θL L x f x x n n n )(1-=+L x f x x )()(-=ϕL )('x ϕ)()(x f x x +=ϕ)('x ϕ)('x f 0)('≠x f )('x f L )(')(1n n n n x f x f x x -=+牛顿迭代法实质上是一种线性化方法,其基本思想是将非线性方程逐步归结为某种线性方程来求解。

牛顿迭代法的收敛性牛顿迭代公式可以看成是由而获得的不动点迭代格式。

这样就可以应用不动点迭代的收敛原则,只须证明在根附近的迭代函数是一个压缩映象。

由于:, 这里的根是单根,即且,于是:。

那么由的连续性可知,存在一个邻域,对这个邻域内的一切,有:,其中O <<1,因此为区间上的一个压缩映象,于是有以下结论:定理3.4.1设,是的精确解,且,则存在的邻域,对于任何迭代初值,迭代序列收敛于。

牛顿迭代法具有较高的收敛速度,它的收敛阶数为=2;而牛顿迭代法的局部收敛性较强,只有初值充分地接近,才能确保迭代序列的收敛性。

为了放宽对局部收敛性的限制,必须再增加条件建立以下收敛的充分条件。

定理3.4.2设,且满足:在区间上,⑴;⑵;⑶不变号;⑷,满足条件:则牛顿迭代序列,单调地收敛于方程的唯一解。

由条件⑴至条件⑷可归结为四种情形: ①,,,;②,,,;)(')()(x f x f x x -=ϕα222)]('[)(")()]('[)(")()]('[1)('x f x f x f x f x f x f x f x =--=ϕα0)(=αf 0)('≠αf 0)]('[)(")()('2==ααααϕf f f )('x ϕ),(δαδα+-x q x <)('ϕq )(x ϕ),(δαδα+-],[)(2b a C x f ∈*x 0)(=x f 0*)('≠x f *x δ)*,*(δδ+-x x )*,*(0δδ+-∈x x x }{n x *x p *x ],[)(2b a C x f ∈],[b a 0)()(<b f a f 0)('≠x f )("x f ],[0b a x ∈0)(")(00>x f x f }{n x 0)(=x f *x 0)(<a f 0)(>b f 0)('>x f 0)(">x f 0)(<a f 0)(>b f 0)('>x f 0)("<x f③,,,; ④,,,。

对定理的几何意义作如下说明:条件⑴保证了根的存在性;条件⑵表明函数单调变化,在区间内有惟一的根;条件⑶表示函数图形在区间上的凹向不变。

条件⑶和条件⑷一起保证了每一次迭代值都界于区间内。

在不满足上述收敛充分条件时,有可能导致迭代值远离所求根的情况或死循环的情况(如下图所示)。

0)(>a f 0)(<b f 0)('<x f 0)(">x f 0)(>a f 0)(<b f 0)('<x f 0)("<x f ],[b a ],[b a ],[ba(2)牛顿迭代法 matlab 程序)1、本程序采用牛顿法,求实系数高次代数方程()1011=a a a a 0n n n n f x x x x --++++=K (a 0n ≠ )的在初始值0x 附近的一个根。

2.使用说明a 函数语句Y=NEWTON_1(A,N,X0,NN,EPS1) 调用M 文件newton_1.m 。

b 参数说明A n+1元素的一维实数组,输入参数,按升幂存放方程系数。

N 整变量,输入参数,方程阶数。

X0 实变量,输入参数,初始迭代值。

NN 整变量,输入参数,允许的最大迭代次数。

EPS1 实变量,输入参数,控制根的精度。

3.方法简介解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。

把f(x)在x0点附近展开成泰勒级数取其线性部分,作为非线性方程f(x)=0的近似方程,则有 f(x0)+f ˊ(x0)(x -x0)=0 设f ˊ(x0)≠0则其解为 x1=x0-f(x0)/f ˊ(x0)再把f(x)在x1附近展开成泰勒级数,也取其线性部分作f(x)=0的近似方程。

若f(x1)≠0,则得 x2=x1-f(x1)/f ˊ(x1)这样,得到牛顿法的一个迭代序列 xn+1=xn -f(xn)/f ˊ(xn) 4.newton_1.m 程序function y=newton_1(a,n,x0,nn,eps1) x(1)=x0;!2))((''))((')()(20000x x f x x x f x f x f -+-+=ξb=1;i=1;while(abs(b)>eps1*x(i))i=i+1;x(i)=x(i-1)-n_f(a,n,x(i-1))/n_df(a,n,x(i-1));b=x(i)-x(i-1);if(i>nn)error(ˊnn is fullˊ);return;endendy=x(i);i程序中调用的n_f.m和n_df.m文件如下:function y=n_df(a,n,x)%方程一阶导数的函数y=0.0;for i=1:ny=y+a(i)*(n+1-i)*x^(n-i);endfunction y=n_df(a,n,x)y=0.0;for i=1:ny=y+a(i)*(n+1-i)*xˆ(n-i);end5.程序附注(1)程序中调用n_f.m和n_df.m文件。

n_f.m是待求根的实数代数方程的函数,n_df.m是方程一阶导数的函数。

由使用者自己编写。

(2)牛顿迭代法的收敛速度:如果f(x)在零点附近存在连续的二阶微商,ξ是f(x)的一个重零点,且初始值x0充分接近于ξ,那么牛顿迭代是收敛的,其收敛速度是二阶的,即平方收敛速度。

(3)算例:f1[x, y] = x*x + y*y - 5 = 0f2[x, y] = (x + 1)*y - (3*x + 1) = 0用牛顿法求在(x0, y0) = (1, 1)附近的解1.程序清单:Clear[x, y, x0, y0]n = 4;f1[x_, y_] := x*x + y*y - 5;f2[x_, y_] := (x + 1)*y - (3*x + 1);(*定义矩阵*)g1[x_, y_] := Det[{{D[f1[x, y], x], D[f1[x, y], y]}, {D[f2[x, y], x], D[f2[x, y], y]}}];g1[x, y];j1[x_, y_] := Det[{{D[f1[x, y], y], f1[x, y]},{D[f2[x, y], y], f2[x, y]}}];j2[x_, y_] := Det[{{f1[x, y], D[f1[x, y], x]},{f2[x, y], D[f2[x, y], x]}}];x0 = 1 // N;y0 = 1 // N;for [i = 1,i<= n,i ++,x0=(x0+j1(x,y)/g1(x,y))/.{x → x0,y → y0};y0=(y0+ j2(x,y)/g1(x,y))/.{x → x0,y → y0};Print [“x [“,i ,”]=”,x0, “y[“,i,”]=”,y0]]print [“The root is :”,{x0, y0}];2.运行结果:x[1]=1.25 y[1]=2.15584x[2]=1.00294 y[2]=2.0028x[3]=1 y[3]=2x[4]=1 y[4]=2The root is : {1,2}。

相关主题