不动点迭代法非线性方程求解
- 格式:docx
- 大小:70.73 KB
- 文档页数:14
非线性方程求根——不动点迭代法一、迭代法的基本思想迭代法是一种逐次逼近的方法,用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果。
例:求方程x 3-x -1=0 在x =1.5 附近的一个根。
解:将所给方程改写成31x x =+假设初值x 0=1.5是其根,代入得33101 1.51 1.35721x x =+=+=x 1≠x 0,再将x 1代入得33211 1.357211 1.33086x x =+=+=x 2≠x 1,再将x 2代入得33321 1.330861 1.32588x x =+=+=如此继续下去,结果如下:k x kk x k 01234 1.51.357211.330861.325881.324945678 1.324761.324731.324721.32472仅取六位数字,x 7与x 8相同,即认为x 8是方程的根。
x *≈x 8=1.32472这种逐步校正的过程称为迭代过程。
这里用的公式称为迭代公式,即311k k x x +=+k =0,1,2,……若x *满足f (x*)=0,称x *为ϕ(x )的一个不动点。
将连续函数方程f (x )=0改写为等价形式:x=ϕ(x ),其中ϕ(x )也是连续函数。
1()k k x x ϕ+=(k =0,1,……)不动点迭代法就是指以迭代格式二、不动点迭代法进行迭代求解的方法。
其中ϕ(x )称为迭代函数。
三、不动点迭代法的实现——MATLAB程序function[root,n]=stablepoint_solver(phai,x0,tol) if(nargin==2)tol=1.0e-5;enderr=1;root=x0;n=0;while(err>tol)n=n+1; %迭代次数r1=root;root=feval(phai,r1); %计算函数值err=abs(root-r1);end程序应用示例:function testmain% x^3-x-1=0% =>x^3=1+x% =>x=(1+x)^(1/3)ph=inline(‘(1+x)^(1/3)’,’x’);[root,n]=stablepoint_solver(ph,1)运行结果:root=1.3247n=8若对任意x 0∈[a , b ],由不动点迭代格式lim *k k x x →∞=则称迭代过程收敛,且x *=ϕ(x *)即f (x*)=0,x *为不动点。
长沙学院CHANGSHA UNIVERSITY 本科生毕业论文摘要非线性方程在工程实践、经济学信息安全和动力学等方面的大量实际问题中有着极为广泛的应用,而不动点迭代算法作为数学研究的一个新方向,是求解非线性方程问题的一个最基本而又重要的方法.本文主要介绍了非线性方程求解的不动点算法及其研究,首先,综述了非线性方程求解的不动点算法的研究背景、并阐述了本文的主要工作以及介绍了误差、有限差等基本知识;然后,详细介绍了不动点迭代算法的基本思想、在什么条件下方程存在不动点的收敛定理、不动点的收敛阶定理和Atiken加速公式;最后,考虑到方程可能会不满足不动点迭代收敛定理的两个条件的情况提出了反函数法、牛顿迭代法、Steffensen 迭代法和松弛法这四中处理方法.关键词:非线性方程,不动点原理,迭代法ABSTRACTA large number of practical problems of nonlinear equations in engineering practice,economics of information security and other the dynamics has a very wide range of applications.As a new direction in the study of mathematics,fixed point iterative algorithm is a basic and important methods to solving nonlinear equations problem.This paper describes the solving nonlinear equations fixed point algorithm and research. First, the research background of solving nonlinear equations fixed point algorithm and the main word are introduced, the basic knowledge of errors,finite difference are introduced ; Second, the fixed point iterative basic idea, algorithm convergence and convergence rate and the aitken formula are detailed; Last, inverse function method, the newton iterative method,Steffensen iterative method and the relaxation method are proposed when the equation dose not satisfy the fixed point iteration convergence conditions.Keywords:Nonlinear Equation, Fixed Point Theorem, Iterative Method目录摘要 (I)ABSTRACT (I)第1章绪论 (1)1.1 研究背景 (1)1.2 预备知识 (2)1.2.1 误差 (2)1.2.2 有限差 (3)第2章非线性方程求解的不动点迭代算法 (5)2.1不动点迭代算法的基本思想 (6)2.2 不动点迭代算法的收敛性 (7)2.3 不动点迭代算法的收敛速度 (11)2.4 加速不动点迭代算法及其收敛性 (12)第3章非收敛不动点迭代格式的几类处理方法与比较 (14)3.1 非收敛不动点迭代格式的几类处理方法 (15)3.1.1 反函数法 (15)3.1.2 牛顿迭代法 (15)3.1.3 Steffensen迭代法 (15)3.1.4 松弛法 (16)3.2 数值实例 (17)结论 (21)参考文献 (23)附录 (24)致谢 (35)第1章绪论1.1 研究背景非线性数值解的问题是现代数学的主要研究课题之一,这不仅是由于科学技术发展的需要,而且也是由于计算技术的高速发展提供了解决这类问题的可能,利用计算机解决非线性问题时,最终总是将其化成为有限维非线性问题,或称为非线性代数问题.对于求解非线性方程,无论从理论上还是从计算机上,都比解线性问题要复杂的多,一般的非线性方程是很难求出精确解的,往往只能求出近似解、数值解,而长期以来,人们为了得到满足条件的近似值,许多计算工作者致力于研究求解非线性方程的有效方法,尤其是计算机出现后函数方程求根的数值解法得到了蓬勃发展,十七世纪,微积分出现时,Newton和Halley发明了各自的新的数学工具去解非线性方程,十八世纪,随着微积分的快速蓬勃发展,Euler和Lagrange分别找到了一个无穷级数来表示方程解,并以各自的名字来命名,十九世纪,人们开始注重问题分析的严密性,柯西建立了优级数技巧,该技巧不断的被以后的事实证明对于研究方程近似解序列的收敛性是很有成效的,在分析严密性发展的时代,Ostrowski对Newton迭代法的收敛性问题规定了一个合理的假设和一个令人满意的解法,在软件分析完善的年代,Kantorovich把Newton迭代法和Ostrowski的结果推广到Banach空间,从而使许多用硬分析去做非常棘手的有关问题被轻轻松松地推论中得到了令人满意的解决,等等,总之,这些方法不断地被后人完善,但在目前,实际问题中可能还需要求方程的负根,求非线性方程(组)的迭代法,求微分方程迭代法等等,迭代方法还需要更深入的研究,同时意味着迭代法的发展空间将会更广阔.本文将着重介绍求解非线性方程的不动点算法,其中文献[3]是由王则柯先生于1988年总结的单纯不动点算法,他简述了不动点在非线性方程数值解、微分方程初值问题、边值问题、分支问题等许多应用问题方面的十多年的发展,以及对单值连续映射的不动点或零点问题进行了讨论,在文献[4]中,许炎先生简单的阐述了国内外有关不动点理论的发展状况,并主要讨论了L-Lipschitz映射的不动点迭代逼近定理,[3][4]这两篇文献都总结出了不动点问题的研究和解决在实际问题中起到了至关重要的作用,这一系列的文献还有[5][6][7][8],而秦小龙先生在文献[9]中介绍了迭代法的发展情况以及相关定理,为本篇论文提供了大量的基础信息,王公俊先生在文献[10]中分别介绍了常用的求解非线性方程的方法以及收敛性,在文献[11]中,张卷美主要研究了一类不动点迭代法的求解,在迭代格式不满足迭代条件的情况下,运用的几种处理方法,并且用C语言编程上机进行了计算,对迭代收敛结果进行了分析和比较,为本文提供了大量的信息,另外,本文还借鉴了2本不同出版社的《数值分析》教材的大量内容.本文主要介绍了非线性方程求解的不动点算法及其应用,第一章为绪论部分,主要介绍了为什么要研究本文的一些原因、目的,以及价值,也准备了一些预备知识作为对正文的补充;第二章介绍迭代法与不动点的相关思想原理、定理以及迭代法的收敛条件,是本文的一个主要章节和工作重心,并且举出了几个实例来辅助证明了运用不动点迭代法求解非线性方程的方便以及准确性;第三章作为对第二章节的一个完善,非常具有实用性,主要讨论了非收敛不动点迭代格式的几类处理方法,并通过数值实例给予了证明.1.2 预备知识1.2.1 误差误差的来源有多个方面,主要有模型误差、观测误差、截断误差、舍入误差等.例1.1 可微函数)(x f 用泰勒(Taylor)多项式 ,!)0(...!2)0(!1)0()0()()(2n n n x n f x f x f f x p +''+'+= 近似代替,则数值方法的截断误差是 ,)!1()()()()(1)1(+++=-=n n n n x n f x p x f x R ξ ξ在0与x 之间.也就是说,截断误差就是近似值与精确值之间的误差.例1.2 用3.14159近似代替π,表示舍入误差..0000026.014159.3⋅⋅⋅=-=πR同样,可以定义舍入误差是指由于计算机字长有限在表示时产生的误差.定义1.1[1] 设x 为准确值,*x 为x 的一个近似值,称x x e -=**为近似值的绝对误差,简称误差.然而,在实际中,人们是无法准确计算出误差*e 的精确值的,一般是根据需要估计出误差的绝对值不超过某正数*ε,也就是误差绝对值的一个上界,*ε叫做近似值的误差限,它总是正数.对于一般情形,**||ε≤-x x ,即,****εε+≤≤-x x x (1.1)这个不等式有时也表示为.**ε±=x x (1.2)误差的大小有时还不能完全表示近似值的好坏,例如,有两个量110±=x ,51000±=y ,则.5,1000;1,10****====y x y x εε虽然*y ε是*x ε的5倍,但是%5.0**=y y ε比%10**=xx ε小得多,这就说明了*y 近似y 的程度比*x 近似x 的程度要好得多,因此,除了需要考虑误差的大小之外,还应该考虑准确值本身的大小.我们把近似值的误差*e 与准确值x 的比值 ,**xx x x e -= (1.3) 称为近似值*x 的相对误差,记作*r e .在实际计算中,由于真值x 总是不知道的,通常取 ,*****xx x x e e r -== (1.4) 作为*x 的相对误差,条件是***xe e r =较小,此时 ,)(1)()()()(**2*****2*******x e x e e x x e x x x x e x e x e -=-=-=- (1.5) 是*r e 的平方项级,故可忽略不计.相对误差也可正可负,它的绝对值上界叫做相对误差限,记作*r ε,即 .||***x r εε= (1.6) 根据定义,上例中 %10||**=x x ε与%5.0||**=y y ε分别为x 与y 的相对误差限,很显然*y 近似y 的程度比*x 近似x 的程度好得多.在实际运算中,为了避免误差危害,数值计算中通常不采取数值不稳定算法,在设计算法是应该尽量避免误差危害,防止有效数字损失,通常要避免两个相近数字相减和用绝对值很小的数做除数,还要注意运算次序和减少运算次数.1.2.2 有限差定义1.2[2] 分别称),()()(x f h x f x f -+=∆ (1.7) ),()()(h x f x f x f --=∇ (1.8) ⎪⎭⎫ ⎝⎛--⎪⎭⎫ ⎝⎛+=22)(h x f h x f x f δ (1.9)为函数)(x f 在点x 的一阶向前差分,一阶向后差分和一阶中心差分,或者分别简称为一阶前差,一阶后差,一阶中心差,统称为(一阶)有限差,其中)0(>h 表自变量的有限增量,称为步长,∇∆,和δ分别成为(一阶)前差算子、(一阶)后差算子和(一阶)中差算子,统称为(一阶)有限差算,仿此,可以定义高阶有限差,例如,二阶前差记作)(2x f ∆,定义为[]).()()()(2x f h x f x f x f ∆-+∆=∆∆=∆ (1.10) 于是,有).()(2)2()(2x f h x f h x f x f ++-+=∆ (1.11) n 阶前差记作)(x f n ∆,定义为[]).()()()(111x f h x f x f x f n n n n ---∆-+∆=∆∆=∆ (1.12) 同样,二阶后差)(2x f ∇和n 阶后差)(x f n ∇分别定义为[])()()()(2h x f x f x f x f -∇-∇=∇∇=∇ (1.13)和[]).()()()(111h x f x f x f x f n n n n -∇-∇=∇∇=∇--- (1.14) 二阶中心差 )(2x f δ 和n 阶中心差)(x f n δ分别定义为[],22)()(2⎪⎭⎫⎝⎛--⎪⎭⎫ ⎝⎛+==h x f h x f x f x f δδδδδ (1.15)和[].22)()(111⎪⎭⎫⎝⎛--⎪⎭⎫⎝⎛+==---h x f h x f x f x f n n n n δδδδδ (1.16)我们规定0()()f x f x ∆=, 0()()f x f x ∇=, 0()()f x f x δ=.有限差有下列一下性质:(1)常数的有限差恒为零.(2)有限差算子为线性算子,即对任意的实数α,β恒有()),()()()(x g x f x g x f ∆+∆=+∆βαβα (1.17) ()),()()()(x g x f x g x f ∇+∇=+∇βαβα (1.18)()).()()()(x g x f x g x f βδαδβαδ+=+ (1.19)(3)用函数值表示高阶有限差:()),)((1)(0h i n x f C x f ni in i n -+-=∆∑= (1.20)()),(1)(0ih x f C x f n i in i n --=∇∑= (1.21)()),)2((1)(0h i hx f C x f n i i n i n -+-=∑=δ (1.22)其中 .!)1()1(i i n n n C i n +-⋅⋅⋅-= (4)用有限差表示函数值 .)()(0∑=∆=+n i i i nx f C nh x f (1.23)第2章 非线性方程求解的不动点迭代算法2.1不动点迭代算法的基本思想首先讨论解非线性方程)(x g x = (2.1) 的问题. 方程(2.1)的解又称为函数g 的不动点. 为求g 的不动点,选取一个初始值0x ,令⋅⋅⋅==-,2,1),(1k x g x k k (2.2) 已产生序列}{k x . 这一类迭代法称为不动点迭代. )(x g 又被称为迭代函数, 很显然,若迭代序列}{k x 收敛,即有,lim p x k k =∞→ (2.3) 且)(x g 连续,则p 是g 的一个不动点.例2.1[2] 方程042)(23=-+=x x x f 在区间[]2,1中有唯一跟. 我们可以用不同的方法将它化为方程:(1);42)(231+--==x x x x g x(2);22)(212⎥⎦⎤⎢⎣⎡⎪⎭⎫ ⎝⎛-==x x x g x (3);22)(2133⎪⎪⎭⎫ ⎝⎛-==x x g x (4);212)(214⎪⎭⎫ ⎝⎛+==x x g x (5),4342)(2235xx x x x x g x +-+-== 等等.取初始值5.10=x ,分别用式(2.2)的迭代格式计算,结果如下表.表2.1 例2.1迭代公式计算结果从表2.1中可以看到,选取迭代函数为)(4x g ,)(5x g ,分别12次和4次,得到方程的近似根1.130395435.若选取)(3x g 作为迭代函数,则k 为奇数时迭代子序列单调增加,k 为偶数时迭代子序列单调减小,迭代120次得到近似根1.130395436. 若选取)(1x g 作为迭代函数,则迭代序列不收敛, 若选取)(2x g 为迭代函数,则出现了负数开方,因而无法继续进行迭代.2.2 不动点迭代算法的收敛性通过例2.1,可以总结出,对于同一个非线性方程的求解问题,在转化为迭代方程时应该要使其解的迭代次数达到最小,且得到的解应该最精确. 在选择迭代函数)(x g 的基本原则是,首先必须保证不动点迭代序列⋅⋅⋅⋅⋅⋅,,,21k x x x 在)(x g 的定义中,以使迭代过程不至于中断;其次要求迭代序列}{k x 收敛且尽可能收敛得快.定理2.1[2] 假设)(x g 为定义在有限区间[]b a ,上的一个函数,它满足以下条件 (1)对任意[]b a x ,∈有[];,)(b a x g ∈ (2.4) (2))(x g 的导数)(x g '在[]b a ,上有界,且存在正数1<L 使得对一切[]b a x ,∈有 ,1|)(|<≤'L x g (2.5) 那么对于任意初始值[]b a x ,0∈由不动点迭代(2.2)产生的序列都收敛于g 在[]b a ,的唯一不动点p ,并且有误差估计式|,|1||01x x LL e kk --≤,1≥k (2.6) 其中p x e k k -=.证明 首先证明g 的不动点存在且唯一. 令 ).()(x g x x h -= (2.7)据条件(1),0)()(≤-=a g a a h .0)()(≥-=b g b b h又据条件(2),在)(x g '上存在,因此)(x g 在[]b a ,上连续,从而)(x h 在[]b a ,上也连续,因此方程0)(=x h 在[]b a ,上至少有一个跟.现假设方程0)(=x h 在[]b a ,上有两个根q p q p ≠,,,则由Lagrange 中值定理知,在p 与q 之间存在ξ使得|,||)(||))((||)()(|||q p g q p g q g p g q p -'=-'=-=-ξξ 再由(2.5).|||||||)(|q p q p L q p g -<-≤-'ξ这就得到矛盾式:.||||q p q p -<- 因此q p =,即0)(=x h 在[]b a ,中的根是唯一的.其次证明由不动点迭代格式(2.2)产生的序列}{k x 是收敛于p 的.根据定理条件(1)[]b a x k ,∈,⋅⋅⋅=,2,1,0k ,因此不动点迭代过程不会中断.由(2.5)式有).()(1p g x g p x k k -=-- (2.8) 应用Lagrange 中值定理,并根据(2.5)式有|||||)(||)()(|||111p x L p x g p g x g p x k k k k -≤-'=-=----ξ.||0p x L k -≤⋅⋅⋅≤ (2.9) 因为10<<L ,所以,0||lim ||lim 0=-≤-∞→∞→p x L p x k k k k即.lim p x k k =∞→ (2.10)最后,推导估计式(2.6).应用收敛性的证明过程,有|||)()(|||111-++-+++++-≤-=-j k j k j k j k j k j k x x L x g x g x x|,|01x x L j k -≤⋅⋅⋅≤+ (2.11) 于是()∑∑-=+++-=++++-≤-=-11101||m j j k j k m j j k j k k m k x x x xx x||1)1(||010110x x LL L x x Lm k m j jk ---=-≤∑-=+.||101x x LL k--≤ (2.12)在上式中令∞→m ,得.1||||01x x L L p x e kk k --≤-= (2.13) (2.6)式得证.例2.2[2] 讨论例2.1中不动点迭代⋅⋅⋅=⎪⎪⎭⎫ ⎝⎛-==--,2,1,22)(213113k xx g x k k k (2.14) 的收敛性. 为使解的近似值的误差不超过810-,试确定迭代次数.解 迭代法(2.14)的迭代函数为.22)(2133⎪⎪⎭⎫⎝⎛-=x x g )(3x g 的定义域为]4,(3-∞.取初始值5.10=x ,由不动点迭代(2.21)得559016994.01=x ,因此取区间[][]5.1,5.0,=b a .由于,02243)(22133<⎪⎪⎭⎫ ⎝⎛--='-x xx g [],5.1,5.0∈x 因此)(3x g 在[]5.1,5.0上单调减小. 而[],559.0)5.1()(min 335.1,5.0≈=∈g x g x[],399.1)5.0()(max 335.1,5.0≈=∈g x g x于是,当[]5.1,5.0∈x 时,[]5.1,5.0)(3∈x g ,但,04432243)(232333<⎪⎭⎫⎝⎛+-⎪⎪⎭⎫ ⎝⎛--=''-x x x xx g [],5.1,5.0∈x )(3x g '在[]5.1,5.0上单调减小,因此 [][]{}3330.5,1.50.5,1.5max |()|max |(0.5)|,|(1.5)|x x g x g g ∈∈'''=.019.3)5.1(3≈'=g 因此,定理2.1的条件(2)不成立.从表2.1看到,取133074649.130=x 作为初始值0x ,128116321.131=x 作为1x .当[]3031,x x x ∈时,[]303132,31,x x x x ∈从而[]30313,)(x x x g ∈.又由于[]313033,|()|max |()|x x x g x g x ∈''≤{}331330max |()|,|()|g x g x ''= ,1853541077.0)(303<=≈'=L x g因此定理2.1的条件成立.故迭代过程收敛[]3031,x x 中任意取初值,为使解p 的近似值k x 的误差不超过810-,根据误差估计式(2.6)|,|1||01x x L L p x kk --≤- 只要.10||1801-<--x x L L k因此,k 应取为810||lg10lg1lg x x L k L ---->853541077.0lg 146458923.0128116321.1133074649.1lg 8⎪⎭⎫⎝⎛---≈.69977.137≈取138=k .于是迭代138+30=168次必可使近似解的误差不超过810-. 实际上,从表2.1中可以看到,只要迭代110次便可达到所要求解的精度.(2.6)式右端是最大可能的误差界. 就本例来说,估计的迭代次数偏大了.2.3 不动点迭代算法的收敛速度定理2.2[2] 在定理2.1的假设条件下,再设函数)(x g 在区间[]b a , 上)2(≥m 次连续可微,且在方程(2.1)的跟p 处,0)()(=p g j ,1,,1-⋅⋅⋅=m j ,0)()(≠p g m (2.15) 则不动点迭代为m 阶收敛.证明 据定理2.1知,方程(2.1)在[]b a ,上有唯一根p .且对任意初始值[]b a x ,0∈,不动点迭代序列{}k x 收敛于p 由于),()()()(11p g e p g p g x g p x e k k k k -+=-=-=++ (2.16) 据Taylor 公式和定理条件有()mkk k m m k m k k k e e p g m e p g m e p g e p g e )(!1)()!1(1)(!21)()(1121θ++-+⋅⋅⋅+''+'=--+ ,)(!1)(mk k k m e e p g m θ+=其中10<<k θ. 易知,对于充分大的k ,若 01≠-k e ,则 ),1,(0⋅⋅⋅+=≠k k i e k ,从而()).(!1lim 1p g m e e m m k k k =+∞→ (2.17)故证得不动点迭代为m 阶收敛.关于不动点的迭代,还有下面的局部收敛定理.定理2.3[2] 设p 是方程(2.1)的一个根,)(x g 在p 的某领域内m 次连续可微,且 ,0)()(=p g j ,1,,1-⋅⋅⋅=m j ,0)()(≠p g m ),2(≥m则当初始值0x 充分接近p 时(存在正数r ,对一切[]r p r p x +-∈,0),不动点迭代序列{}k x 都收敛于p ,且收敛阶数为m .证明 由于假设()x g '在p 的某领域内连续且()0='p g ,因此必存在0>r 使得对一切[]r p r p x +-∈, 有.1|)(|<≤'L x g 又据Lagrange 中值定理,有),)(()()(p x g p g x g -'=-ξ ξ在x 与p 之间,从而,|||||)(||)()(|r p x p x g p g x g ≤-<-'=-ξ 即.|)()(|r p g x g <- (2.18) 因此当[]r p r p x +-∈,时,[]r p r p x g +-∈,)(.据定理2.2和定理2.3知,对于任意初始值[]r p r p x +-∈,0,不动点迭代收敛,且收敛阶数为m .2.4 加速不动点迭代算法及其收敛性一个收敛的迭代过程将产生一个收敛序列⋅⋅⋅⋅⋅⋅,,,,21n x x x ,如p x n n =∞→lim .这样,只要迭代足够多次,即n 充分大时,如m n =,则可取m x p ≈.但若迭代过程收敛缓慢,则会使计算量变得很大,因此需要加速收敛过程.假设一个序列{}n x :⋅⋅⋅⋅⋅⋅,,,,21n x x x ,线性收敛于p (收敛缓慢),即有λ=--+∞→p x px n n n 1lim ().0≠λ (2.19) 于是当n 足够大时,有,121px px p x p x n n n n --≈---++ 即),)(()()221p x p x p x n n n --≈-++亦即.)(22222121p p x x x x p p x x n n n n n n ++-≈+-++++ (2.20) 解得nn n n n n x x x x x x p +--=++++12212222221121222n n n n n n n n n n n nx x x x x x x x x x x x ++++++-+--=-+.2)(1221nn n n n n x x x x x x +---=+++ 定义⋅⋅⋅=+---=++++,2,1,0,2)(~12211n x x x x x x x nn n n n n n , (2.21)(2.21)称为Aitken 加速公式(方法).Aitken 加速方法得到的序列{}n x ~:⋅⋅⋅⋅⋅⋅,~,,~,~21n x x x 较原来的序列{}n x 更快地收敛于p . 有下面的定理.定理 2.4[2] 设序列}{n x 是线性收敛于p 的,并且对于所有足够大的整数n 有0))((1≠--+n n x p x ,则由Aitken 加速方法(2.21)产生的序列{}n x ~有.0~lim 1=--+∞→p x px n n n (2.22) 证明 由假设序列}{n x 线性收敛于p ,即有,lim 1λ=--+∞→p x px nn n ,0≠λ.记,1λ---=+px px q n n n (2.23) 则有 0lim =∞→n n q ,0lim 1=+∞→n n q . 据(2.21)式,()⎥⎦⎤⎢⎣⎡-+----=--++++p x x x x x x p x p x p x nn n n n n n n n 1221121~2121()1()(2)n n n n n n x x x p x x x +++-=---+21221212111[()]()1()[2()]111..21n n n n n n n n n n n n n n n x p x p x p x p x p x p x p x p x p x p x p x p x p x p x p ++++++++----=-----+-⎡⎤-=--⎢⎥-⎡⎤---⎣⎦-+⎢⎥---⎣⎦ .1)(2))((1)1(112++-++⋅-+-=+λλλλn n n n q q q q (2.24)因此有.012)1(1~lim 221=+---=--+∞→λλλp x p x nn n在绪论中有讲到一阶前差:,1n n n x x x -=∆+ ⋅⋅⋅=,2,1,0n 二阶前差:,2)(122n n n n x x x x x +-=∆∆=∆++ .,2,1,0⋅⋅⋅=n 于是,Aitken 加速公式(2.21)可改写成,)(~221n n n n x x x x ∆∆-=+ .,2,1,0⋅⋅⋅=n (2.25)由于这个缘故,Aitken 加速方法又称为Aitken 2∆加速方法.例2.3[2] 设nx n 1cos =,则1lim =∞→n n x . 由于,111cos 111cos lim 11lim 1=--+=--∞→+∞→nn x x n n n n 因此序列{}nx 收敛于1. 由序列{}nx 应用Aitken 加速方法计算得{}nx ~的开头几项列表如下(表2.2).{}n x ~确实比{}n x 更快的收敛于1.第3章 非收敛不动点迭代格式的几类处理方法与比较在第2章中主要介绍了求解非线性方程的不动点迭代法,其要求是迭代函数要满足收敛定理假定条件,而在现实生活中,明确满足这些条件的迭代函数是很少见的,本章对于迭代函数不满足收敛条件的情况,提出了几类处理方法.3.1 非收敛不动点迭代格式的几类处理方法一个方程的迭代格式不是唯一的,且迭代也不都是收敛的,其收敛性取决于迭代函数)(x g 和初值0x ,关于不动点迭代函数的收敛性,上一章已经进行了讨论, 但假若[]b a x ,∈时,1)(>≥'L x g ,就不满足定理2.1的条件(2)了,于是下面分别介绍了反函数法、牛顿迭代法、Steffensen 迭代法和松弛法这四中处理方法.3.1.1 反函数法因为)(x g x =,有[])(1)(1x g x g '='-,则当[]b a x ,∈时,[]11)(1<≤'-Lx g ,所以方程)(x g x =可写成等价形式)(1x g x -=,从而构造迭代格式)(11k k x g x -+=, ),1,0(⋅⋅⋅=k (3.1) 很明显,)(11k k x g x -+=满足收敛条件.对于)(x g 简单情况, 其反函数)(1x g -容易得到.3.1.2 牛顿迭代法对于迭代格式)(x g x =的情形,采用Newton 迭代格式有 ,)(1)()()(1)(1k k k k k k k k k x g x g x x g x g x g x x x '-'-='---=+ ),1,0(⋅⋅⋅=k (3.2)3.1.3 Steffensen 迭代法根据Aitken 加速算法,对迭代格式)(1k k x g x =+,),1,0(⋅⋅⋅=k ,进行如下修改:),(k k x g y = ),(k k y g z =[]kk k k k k k k k k k k k x x g x g g x g x g g x g g x y z y z z x +---=+---=+)(2))(()())(())((2)(221 (3.3)其中⋅⋅⋅=,1,0k .3.1.4 松弛法将)(x g x =化成等价形式)()1(x wg x w x +-= , 称w 为松弛因子, 从而构造迭代格式),()1(1k k k x wg x w x +-=+ (3.4)其迭代函数为)()1()(x wg x w x g +-= . 记)(min minx g g bx a '='≤≤,)(max max x g g bx a '='≤≤,得到如下结论:(1)当1)(>≥'L x g 时,w 取01)(2max <<-'-w x g 时,)()1(1k k k x wg x w x +-=+迭代收敛;(2)当1)(-<-≤'L x g 时,w 取)(120minx g w '-<< 时,)()1(1k k k x wg x w x +-=+迭代收敛;(3)当1)(<≤'L x g 时,w 取)(1)(11minminx g x g w '-'+<< 时,迭代格式)()1(1k k k x wg x w x +-=+比迭代格式)(1k k x g x =+收敛快. 推导如下:(1)当1)(>≥'L x g 时,由01)(2max<<-'-w x g 得到2)(max->-'w x g w ,其迭代函数为)()1()(x wg x w x f +-=. 因为()()()()()()()max1111111f x w wg x w wg x f x w wg x w g x '''=-+≥-+>-'''=-+=+-<所以有1)(<'x g ,从而)()1(1k k k x wg x w x +-=+迭代收敛.(2)当1)(-<-≤'L x g 时, 由)(120min x g w '-<<得到2)(min->'+-x g w w . 因为()()()()()()()min111,1111f x w wg x w wg x f x w wg x w g x '''=-+≥-+>-'''=-+=+-<所以有1)(<'x f , 从而)()1(1k k k x wg x w x +-=+迭代收敛.(3)当1)(<≤'L x g 时, w 取)(1)(11min minx g x g w '-'+<<,由1>w 得到[]0)(1)1(<'--x g w ,()()()()()1(1)1f x w wg x w g x g x g x '''''=-+=--+<⎡⎤⎣⎦ 由)(1)(1minminx g x g w '-'+<得到0)()(1min min>'+-'+x g w w x g .()()min()11f x w wg x w wg x '''=-+≥-+()()()()minmin 1w wg x g x g x g x ''''≥-++->-所以有)()(x g x f '<', 从而迭代格式)()1(1k k k x wg x w x +-=+ 比迭代格式)(1k k x g x =+收敛快.3.2 数值实例通过以上四种方法都可以解决非收敛不动点迭代格式的问题,现对上述四种给出几个不满足不动点迭代收敛定理的实例,并对结果进行分析和比较. 例3.1 求方程033=--x x 在区间[]2,1内的根,要求精度为510-.解 对于方程033=--x x ,将它化为33-=x x ,所以3)(3-=x x g ,则当[]2,1∈x 时,13)(2>='x x g ,不满足定理2.1的条件(2),因此不能由(2.2)的迭代格式计算.下面分别用反函数方法、牛顿(Newton )迭代法、Steffensen 迭代法、松弛法对迭代函数进行修改,得到相应新的迭代函数,并用C 语言编程上机计算. (1)反函数法:迭代格式为),(11k k x g x -+= 即.)3(311+=+k k x x 取初值5.10=x ,运用程序见附录1.(2)牛顿(Newton )迭代法:迭代格式为,)(1)()()(1)(1k k k k k k k k x g x g x x g x g x g x x x '-'-='---=+即.133231)3(23231-+=----=+k k k k k k k x x x x x x x 取初值5.10=x ,运用计算程序见附录二; (3) Steffensen 迭代法:迭代格式为),(k k x g y = ),(k k y g z = [][].)(2))(()())(())((2221kk k k k k kk k k k k k x x g x g g x g x g g x g g x y z y z z x +---=+---=+即,33-=k k x y,3)3(33--=k k x z[].)3(23)3()3(3)3(3)3(3332333331kk k k kk k x x x x xx x +-----------=+ 取初值5.10=x ,运用如下程序可以得到结果: (4)松弛法:迭代格式为),()1(1k k k x wg x w x +-=+ 即),3()1(31-+-=+k k k x w x w x当[]2,1∈x 时,13)(2>='x x g ,且3)(min='x g ,12)(max ='x g ,所以w 的取值范围为01122>>--w ,现取5.10=x ,15.0-=w ,运用C 语言编程可得到起结果. 以上这四种方法的计算结果见表(3.1),本例中以上四种方法都是收敛的,因此这四种方法均可以解决不满足收敛条件的不动点迭代收敛问题,同时本例中变换后的Newton 迭代法收敛的最快.例 3.2 求方程0124=--x x 在区间[]2,1内的根,要求精度为510-.解 对于方程0124=--x x ,将它化为21214-=x x ,所以2121)(4-=x x g ,则当[]2,1∈x 时,14)(3>='x x g ,因此不满足不动点迭代收敛条件,为求此次方程的解,下面同样分别用本章介绍的四种方法求解此方程. (1)反函数法:迭代格式为),(11k k x g x -+= 将方程变为迭代格式为().12411+=+k k x x取初值5.10=x ,运行附录5的相应程序即可得计算结果. (2)牛顿(Newton )迭代法:迭代格式为,)(1)()()(1)(1k k k k k k k k x g x g x x g x g x g x x x '-'-='---=+代人例题中的数据.12212321212134341-+=-⎪⎭⎫ ⎝⎛---=+k k k k k k k x x x x x x x 取初值5.10=x ,运行附录6的程序即可的计算结果. (3)Steffensen 迭代法:迭代格式为),(k k x g y =),(k k y g z = [][].)(2))(()())(())((2221kk k k k k kk k k k k k x x g x g g x g x g g x g g x y z y z z x +---=+---=+代入例题中的数据有,21214-=k k x y ,2121212144-⎪⎭⎫ ⎝⎛-=k k x z.2121221212121212121212121212121214442444441k k k k k k k x x x x x x x +⎪⎭⎫⎝⎛---⎪⎭⎫ ⎝⎛-⎥⎥⎦⎤⎢⎢⎣⎡⎪⎭⎫ ⎝⎛---⎪⎭⎫ ⎝⎛---⎪⎭⎫ ⎝⎛-=+ 取初值5.10=x ,运行附录7即可算得计算结果. (4)松弛法:迭代格式为),()1(1k k k x wg x w x +-=+ 代入例题中的数据有.2121)1(41⎪⎭⎫ ⎝⎛-+-=+x w x w x k k当[]2,1∈x 时,14)(3>='x x g ,13224)(3max>=⨯='x g ,所以w 取值在01322<<--w ,现取05.0-=w ,初值5.10=x ,运行附录8的程序即可得到计算结果.以上这四种方法的计算结果见表(3.2),本例中以上四种方法都是收敛的,因此这四种方法均可以解决不满足收敛条件的不动点迭代收敛问题,同时本例中变换后的Newton 迭代法收敛的最快.例3.3 求方程032=-+x e x 在区间[]1,0内的根,要求精度为510-.解 将方程化为等价形式x e x 23-=,那么此时x e x g 23)(-=.当[]1,0∈x 时,12)(>-='x e x g ,因此不满足不动点迭代收敛条件.按下面这四种方法处理可以得到近似解.(1)反函数法:首先由反函数处理方法可得到迭代格式,223ln 1⎪⎭⎫⎝⎛-=+k k x x取初值5.00=x ,运用程序见附录9.(2)牛顿(Newton )迭代法:由牛顿迭代法得到迭代格式,21321kk x x k k k e e x x x +-+-=+ 取初值5.00=x ,运用程序见附录10.(3)Steffensen 迭代法:由Steffensen 迭代法得到迭代格式,23k x k e y -= ,2322⎪⎭⎫ ⎝⎛--=k x e k e z()()[](),)23(223232323223231kx e e e k x e e e e x kkx kx kx +------=---+ 取初值5.00=x ,运用程序见附录11. (4)松弛法:由松弛法得到迭代格式为(),23)1(1x k k e w x w x -+-=+当[]1,0∈x 时,122)(-<-≤-='x e x g ,e x g 2)(min-=',所以w 取ew 2120+<<之间的值,现取2.0=w ,初值5.00=x ,运用程序见附录12.以上这四种方法的计算结果见表(3.2),本例中以上四种方法都是收敛的,因此这四种方法均可以解决不满足收敛条件定理的不动点迭代收敛问题,同时本例中变换后的Newton 迭代法收敛的最快.结 论非线性代数问题的解法是现代计算数学的一个重要研究课题,而不动点迭代算法是求解非线性方程近似根的一个重要方法.本文通过搜集大量资料了解了非线性方程求解的不动点迭代算法的的研究背景,以及研究价值,然后通过介绍不动点迭代法的基本思想,对不动点迭代法的收敛性、收敛速度以及加速不动点迭代算法的收敛性进行了研究,并结合实例经行了比较分析,对于不满足收敛条件的情况,本文通过翻阅大量资料和文献,归纳总结出了四种处理方法,分别为反函数法、牛顿(Newton)迭代法、Steffensen 迭代法、松弛法,使得不满足收敛不动点迭代格式的非线性方程的求解得到了解决,同样也给出了相关实例进行了比较和验证.具体来说,对于一般的非线性方程,只要满足第2章定理2.1中的条件(1)和条件(2),那么对于任意的初始值[]b a x ,0∈,则由不动点迭代⋅⋅⋅==-,2,1),(1k x g x k k 产生的迭代序列都收敛于g 在[]b a ,的唯一不动点p ,那么要考虑的是光是收敛还不能很好的解决一个迭代效率问题,于是本文还致力研究了不动点迭代法的收敛速度,以及加速不动点迭代法.而对于一般不满足第2章定理2.1中的条件(1)或者条件(2)的情况,那么有不动点迭代算法产生的迭代序列不是收敛的,就不能求出函数的近似解,那么本文通过阅读大量的资料以及文献,总结出了四种比较好用的处理方法,并且通过3个实例,可以发现这几种方法不仅能得到收敛的迭代序列,而且收敛的速度也比较快,通过分析比较这四种方法,牛顿迭代法的迭代效果最好.这也是本文的亮点所在.由于诸多条件限制,本文也有很多不足之处,比如说没有足够多的实例来充分的证明第2章的定理2.2与定理2.3,并且对于第3章给出的3个实例中的精度要求较低,有待于继续研究,若有条件,可以更深层次的研究非线性方程组的不动点算法及其应用.参考文献[1] 李庆扬,王能超,易大义.数值分析[M].北京:清华大学出版社,2008,32(2):3-8[2] 林成森.数值分析[M].北京:科学出版社,2007,18(1):133-135,255-265[3] 王则柯.单纯不动点算法[J].广州:中山大学数学系,1988,12(12):113-127[4] 许炎.Banach空间中的不动点迭代逼近[J].苏州:苏州科技学院数理学院,2010,13(2):1-44[5] 李素红.非线性算子的不动点迭代逼近[J].天津工业大学学报,2006,16(1):51-58[6] 孙俊萍,徐裕生.非线性算子的不动点定理[J].长春大学学报,2000,10(5):30-31[7] 宋娜娜.几类非线性算子的不动点定理[J].长春工程学院学报(自然科学版),2003,4(3):1-4[8] 段华贵.几类非线性算子的不动点定理及应用[J].哈尔滨师范大学自然科学学报,2004,20(4):31-33[9] 秦小龙.非线性算子方程的迭代算法[J].科学技术与工程研究简报,2010,10(13):3169-3170[10] 王公俊.非线性方程的迭代法研究[J].河北大学学报(自然科学版),2000,20(3):228-231[11] 张卷美.一类不动点迭代法的求解[J].燕山大学学报,1998,22(2):140-142[12] 高尚.不动点迭代法的一点注记[J].大学数学.2003,19(4):30-37[13] 代璐璐.非线性方程组的迭代解法[J].合肥工业大学学报,2012,5(4):1-57[14] Halikias, Galanis, Karcanias, Milonidis.Nearest common root of polynomials,approximate greatest common divisor and the structured singular value[J].IMA Journal of Mathematical Control & Information,2013,30(4):423-442附录附录1(反函数处理法):%main()为主函数%用途:用反函数法求解非线性方程在非收敛不动点迭代格式情况下的解%格式:solut (double x,int k),solut为被调用函数,x为返回输出的值,即为迭代函数产生的迭代序列,k为在一定精度下的迭代次数#include <stdio.h>#include <math.h>double solut (double x,int k){double f;int i;for(i=0;i<k;i++){f=pow(x+3,1.0/3.0);x=f;}return(x);}main( ){double x0=1.5;int i,k;printf("\n input k(k>0):");scanf("%d",&k);for(i=1;i<=k;i++){printf("\n x=%6.5lf\n",solut(x0,i));}}附录2(牛顿(Newton)迭代法):%main()为主函数%用途:用牛顿(Newton)迭代法求解非线性方程在非收敛不动点迭代格式情况下的解%格式:solut (double x,int k),solut为被调用函数,x为返回输出的值,即为迭代函数产生的迭代序列k为在一定精度下的迭代次数#include <stdio.h>#include <math.h>double solut(double x,int k){double f;int i;for(i=0;i<k;i++){f=x-(pow(x,3)-x-3)/(3*pow(x,2)-1);x=f;}return(x);}main( ){double x0=1.5;int i,k;printf("\n input k(k>0):");scanf("%d",&k);for(i=1;i<=k;i++){printf("\n x=%6.5lf\n",solut(x0,i));}}附录3(Steffensen迭代法):%main()为主函数%用途:用Steffensen迭代法求解非线性方程在非收敛不动点迭代格式情况下的解%格式:solut (double x,int k),solut为被调用函数,x为返回输出的值,即为迭代函数产生的迭代序列,k为在一定精度下的迭代次数#include <stdio.h>#include <math.h>double solut(double x ,int k){double f,f1,f2;Int i;for(i=0;i<k;i++){f1=pow(x,3)-3;f2=pow(f1,3)-3;f=f2-(pow(f2-f1,2)/(f2-2*f1+x);x=f;}return(x);}main( ){double x0=1.5;int i,k;printf(“\n input k(k>0):”);scanf(“%d”,&k);for(i=1;i<=k;i++){printf(“\n x=%6.5lf\n”,solut(x0,i);}}附录4(松弛法):%main()为主函数%用途:用松弛法求解非线性方程在非收敛不动点迭代格式情况下的解%格式:solut (double x,int k),solut为被调用函数,x为返回输出的值,即为迭代函数产生的迭代序列,k为在一定精度下的迭代次数#include <stdio.h>。
浅谈用不动点迭代法求解非线性方程解的教学方法
不动点迭代法是求解非线性方程的一种有效的解法,它的核心思想是:通过迭代,使得方程的某个特定解变得更加接近,最终达到收敛的程度,从而得到最终的解。
一、教学目标
1、让学生了解不动点迭代法的基本原理;
2、让学生能够熟练使用不动点迭代法求解非线性方程;
3、让学生能够分析不动点迭代法的收敛性,并能够给出合理的迭代步骤。
二、教学步骤
1、讲解不动点迭代法的基本原理:
首先,教师应给学生讲解不动点迭代法的基本原理,包括它的定义、其基本思想、应用场景等。
2、提供实例:
然后,教师可以提供一些简单的实例,让学生熟悉不动点迭代法的使用,并能够熟练求解。
3、分析收敛性:
最后,教师可以让学生分析不动点迭代法的收敛性,并给出合理的迭代步骤,以便更好地求解非线性方程。
三、教学评价
教学评价主要是通过实例检验学生对不动点迭代法的掌握情况,以及分析收敛性的能力,以便更好地指导学生掌握不动点迭代法。
(一)非线性方程的迭代解法1.非线性方程的一般形式:f(x)=02.非线性方程的分类:⎩⎨⎧=为其他函数。
超越方程,次代数多项式;为代数方程,)()(0)(x f n x f x f 3.方程的根:若存在常数s 使f(s)=0,则称s 是方程(4.1)的根,又称s 是函数f(x)的零点。
4.重根:若f(x)能分解为)()()(x s x x f m ϕ-= 则称s 是方程(4.1)的m 重根和f(x)的m 重零点。
当m=1时,s 称为方程(4.1)的单根和f(x)的单零点。
5.结论:(1)零点存在定理:设函数f(x)在闭区间[a,b]上连续,且f(a)•f(b)<0,那么在开区间(a,b )内至少有一点ξ,使f(ξ)=0.(2)根的唯一性判别:一阶导数不变号且不为零(3)n 次代数方程在复数域上恰有n 个根(4)高于4次的代数方程没有求根公式6.方法:(1)搜索根方法:①作图法:②逐步搜索法:确定方程根的范围的步骤:步骤1 取含f(x)=0根的区间[a,b],即f(a)•f(b)<0;步骤2 从a 开始,按某个预定的步长h ,不断地向右跨一步进行一次搜索, 即检查kh a x k +=上的函数)(k x f 值的符号。
若0)()(1<•-k k x f x f ,则可以确定一个有根区间],[1k k x x -.步骤3 继续向右搜索,直到找出[a,b]上的全部有根区间],[1k k x x -(k=1,2,…,n).(2)二分法①基本思想:含根区间逐次分半缩小,得到一个区间长度以1/2的比例减小的含根区间序列 {}k I ,在给定根的误差界时,利用长度趋于零的特点,可得到在某个区间中满足要求的近似根。
②迭代终止的条件ε<)(k x fε2<-k k a b或者ε<-≤-2k k k a b s x(3)简单迭代法及其收敛性)(0)(x x x f ϕ=⇔=,2,1,0),(1==+k x x k k ϕ迭代法是一种逐次逼近法,用某个固定公式反复校正根的近似值,使之逐 步精确化,最后得到满足精度要求的解。
Matlab⾮线性⽅程数值解法实验⽬的⽤Matlab实现⾮线性⽅程的⼆分法、不动点迭代法实验要求1. 给出⼆分法算法和不动点迭代算法2. ⽤Matlab实现⼆分法3. ⽤Matlab实现不动点迭代法实验内容(1)在区间[0,1]上⽤⼆分法和不动点迭代法求的根到⼩数点后六位。
(2)⼆分法的基本思想:逐步⼆分区间[a,b],通过判断两端点函数值的符号,进⼀步缩⼩有限区间,将有根区间的长度缩⼩到充分⼩,从⽽,求得满⾜精度要求的根的近似值。
(3)不动点迭代法基本思想:已知⼀个近似根,构造⼀个递推关系(迭代格式),使⽤这个迭代格式反复校正根的近似值,计算出⽅程的⼀个根的近似值序列,使之逐步精确法,直到满⾜精度要求(该序列收敛于⽅程的根)。
实验步骤(1)⼆分法算法与MATLAB程序(⼆分法的依据是根的存在性定理,更深地说是介值定理)。
MATLAB程序,1 %⼆分法2 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep3 %输出:近似根root,迭代次数k4 function [root,k]=bisect(fun,a,b,ep)5if nargin>36 elseif nargin<47 ep=1e-5;%默认精度8else9 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]10 end11if fun(a)*fun(b)>0%输⼊的区间要求12 root=[fun(a),fun(b)];13 k=0;14return;15 end16 k=1;17while abs(b-a)/2>ep%精度要求18 mid=(a+b)/2;%中点19if fun(a)*fun(mid)<020 b=mid;21 elseif fun(a)*fun(mid)>022 a=mid;23else24 a=mid;b=mid;25 end26 k=k+1;27 end28 root=(a+b)/2;29 end⼆分法1运⾏⽰例(并未对输出格式做控制,由于精度要求,事后有必要控制输出的精度):优化代码,减⼩迭代次数(在迭代前,先搜寻更适合的有根区间)1 %⼆分法改良2 %在⼀开始给定的区间中寻找更⼩的有根区间3 %输⼊:f(x)=0的f(x),[a,b]的a,b,精度ep4 %输出:近似根root,迭代次数k5 %得到的根是优化区间⾥的最⼤根6 function [root,k]=bisect3(fun,a,b,ep)7if nargin>38 elseif nargin<49 ep=1e-5;%默认精度10else11 error('输⼊参数不⾜');%输⼊参数必须包括f(x)和[a,b]12 end13 %定义划分区间的分数14 divQJ=1000;15 %等分区间16 tX=linspace(a,b,divQJ);17 %计算函数值18 tY=fun(tX);19 %找到函数值的正负变化的位置20 locM=find(tY<0);21 locP=find(tY>0);22 %定义新区间23if tY(1)<024 a=tX(locM(end));25 b=tX(locP(1));26else27 a=tX(locP(end));28 b=tX(locM(1));29 end30if fun(a)*fun(b)>0%输⼊的区间要求31 root=[fun(a),fun(b)];32 k=0;33return;34 end35 k=1;36while abs(b-a)/2>ep%精度要求37 mid=(a+b)/2;%中点38if fun(a)*fun(mid)<039 b=mid;40 elseif fun(a)*fun(mid)>041 a=mid;42else43 a=mid;b=mid;44 end45 k=k+1;46 end47 root=(a+b)/2;48 end⼆分法2运⾏⽰例(同样没有控制输出)明显地,迭代次数减⼩许多。
非线性方程组求解1.mulStablePoint用不动点迭代法求非线性方程组的一个根function [r,n]=mulStablePoint(F,x0,eps)%非线性方程组:f%初始解:a%解的精度:eps%求得的一组解:r%迭代步数:nif nargin==2eps=1.0e-6;endx0 = transpose(x0);n=1;tol=1;while tol>epsr= subs(F,findsym(F),x0); %迭代公式tol=norm(r-x0); %注意矩阵的误差求法,norm为矩阵的欧几里德范数n=n+1;x0=r;if(n>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endend2.mulNewton用牛顿法法求非线性方程组的一个根function [r,n]=mulNewton(F,x0,eps)if nargin==2eps=1.0e-4;endx0 = transpose(x0);Fx = subs(F,findsym(F),x0);var = findsym(F);dF = Jacobian(F,var);dFx = subs(dF,findsym(dF),x0);r=x0-inv(dFx)*Fx;n=1;tol=1;while tol>epsx0=r;Fx = subs(F,findsym(F),x0);dFx = subs(dF,findsym(dF),x0);r=x0-inv(dFx)*Fx; %核心迭代公式tol=norm(r-x0);n=n+1;if(n>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endend3.mulDiscNewton用离散牛顿法法求非线性方程组的一个根function [r,m]=mulDiscNewton(F,x0,h,eps)format long;if nargin==3eps=1.0e-8;endn = length(x0);fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endr=transpose(x0)-inv(J)*fx;m=1;tol=1;while tol>epsxs=r;fx = subs(F,findsym(F),xs);J = zeros(n,n);for i=1:nx1 = xs;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endr=xs-inv(J)*fx; %核心迭代公式tol=norm(r-xs);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;4.mulMix用牛顿-雅可比迭代法求非线性方程组的一个根function [r,m]=mulMix(F,x0,h,l,eps)if nargin==4eps=1.0e-4;endn = length(x0);J = zeros(n,n);Fx = subs(F,findsym(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J));C =D - J;inD = inv(D);H = inD*C;Hm = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = Hm*inD*Fx;r = transpose(x0)-dr; m=1;tol=1;while tol>epsx0=r;Fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J));C =D - J;inD = inv(D);H = inD*C;Hm = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = Hm*inD*Fx;r = x0-dr; %核心迭代公式tol=norm(r-x0);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endend5.mulNewtonSOR用牛顿-SOR迭代法求非线性方程组的一个根function [r,m]=mulNewtonSOR(F,x0,w,h,l,eps)if nargin==5eps=1.0e-4;endn = length(x0);J = zeros(n,n);Fx = subs(F,findsym(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J));L = -tril(J-D);U = -triu(J-D);inD = inv(D-w*L);H = inD*(D - w*D+w*L);;Hm = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = w*Hm*inD*Fx;r = transpose(x0)-dr;m=1;tol=1;while tol>epsx0=r;Fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endD = diag(diag(J));L = -tril(J-D);U = -triu(J-D);inD = inv(D-w*L);H = inD*(D - w*D+w*L);;Hm = eye(n,n);for i=1:l-1Hm = Hm + power(H,i);enddr = w*Hm*inD*Fx;r = x0-dr; %核心迭代公式tol=norm(r-x0);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endend6.mulDNewton用牛顿下山法求非线性方程组的一个根function [r,m]=mulDNewton(F,x0,eps)%非线性方程组:F%初始解:x0%解的精度:eps%求得的一组解:r%迭代步数:nif nargin==2eps=1.0e-4;endx0 = transpose(x0);dF = Jacobian(F);m=1;tol=1;while tol>epsttol=1;w=1;Fx = subs(F,findsym(F),x0);dFx = subs(dF,findsym(dF),x0);F1=norm(Fx);while ttol>=0 %下面的循环是选取下山因子w的过程r=x0-w*inv(dFx)*Fx; %核心的迭代公式Fr = subs(F,findsym(F),r);ttol=norm(Fr)-F1;w=w/2;endtol=norm(r-x0);m=m+1;x0=r;if(m>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endend7.mulGXF1用两点割线法的第一种形式求非线性方程组的一个根function [r,m]=mulGXF1(F,x0,x1,eps)format long;if nargin==3eps=1.0e-4;endx0 = transpose(x0);x1 = transpose(x1);n = length(x0);fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);for i=1:nxt = x1;xt(i) = x0(i);J(:,i) = (subs(F,findsym(F),xt)-fx1)/h(i);endr=x1-inv(J)*fx1;m=1;tol=1;while tol>epsx0 = x1;x1 = r;fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);for i=1:nxt = x1;xt(i) = x0(i);J(:,i) = (subs(F,findsym(F),xt)-fx1)/h(i);endr=x1-inv(J)*fx1;tol=norm(r-x1);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;8.mulGXF2用两点割线法的第二种形式求非线性方程组的一个根function [r,m]=mulGXF2(F,x0,x1,eps)format long;if nargin==3eps=1.0e-4;endx0 = transpose(x0);x1 = transpose(x1);n = length(x0);fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);xt = x1;xt(1) = x0(1);J(:,1) = (subs(F,findsym(F),xt)-subs(F,findsym(F),x1))/h(1);for i=2:nxt = x1;xt(1:i) = x0(1:i);xt_m = x1;xt_m(1:i-1) = x0(1:i-1);J(:,i) = (subs(F,findsym(F),xt)-subs(F,findsym(F),xt_m))/h(i);endr=x1-inv(J)*fx1;m=1;tol=1;while tol>epsx0 = x1;x1 = r;fx = subs(F,findsym(F),x0);fx1 = subs(F,findsym(F),x1);h = x0 - x1;J = zeros(n,n);xt = x1;xt(1) = x0(1);J(:,1) = (subs(F,findsym(F),xt)-subs(F,findsym(F),x1))/h(1);for i=2:nxt = x1;xt(1:i) = x0(1:i);xt_m = x1;xt_m(1:i-1) = x0(1:i-1);J(:,i) = (subs(F,findsym(F),xt)-subs(F,findsym(F),xt_m))/h(i);endr=x1-inv(J)*fx1;tol=norm(r-x1);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;9.mulVNewton用拟牛顿法求非线性方程组的一组解function [r,m]=mulVNewton(F,x0,A,eps)%方程组:F%方程组的初始解:x0% 初始A矩阵:A%解的精度:eps%求得的一组解:r%迭代步数:mif nargin==2A=eye(length(x0)); %A取为单位阵eps=1.0e-4;elseif nargin==3eps=1.0e-4;endendx0 = transpose(x0);Fx = subs(F, findsym(F),x0);r=x0-A\Fx;m=1;tol=1;while tol>epsx0=r;Fx = subs(F, findsym(F),x0);r=x0-A\Fx;y=r-x0;Fr = subs(F, findsym(F),r);z= Fr-Fx;A1=A+(z-A*y)*transpose(y)/norm(y); %调整A A=A1;m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endtol=norm(r-x0);end10.mulRank1用对称秩1算法求非线性方程组的一个根function [r,n]=mulRank1(F,x0,A,eps)if nargin==2l = length(x0);A=eye(l); %A取为单位阵eps=1.0e-4;elseif nargin==3eps=1.0e-4;endendfx = subs(F,findsym(F),x0);r=transpose(x0)-inv(A)*fx;n=1;tol=1;while tol>epsx0=r;fx = subs(F,findsym(F),x0);r=x0-inv(A)*fx;y=r-x0;fr = subs(F,findsym(F),r);z = fr-fx;A1=A+ fr *transpose(fr)/(transpose(fr)*y); %调整A A=A1;n=n+1;if(n>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endtol=norm(r-x0);end11.mulDFP用D-F-P算法求非线性方程组的一组解function [r,n]=mulDFP(F,x0,A,eps)if nargin==2l = length(x0);B=eye(l); %A取为单位阵eps=1.0e-4;elseif nargin==3eps=1.0e-4;endendfx = subs(F,findsym(F),x0);r=transpose(x0)-B*fx;n=1;tol=1;while tol>epsx0=r;fx = subs(F,findsym(F),x0);r=x0-B*fx;y=r-x0;fr = subs(F,findsym(F),r);z = fr-fx;B1=B+ y*y'/(y'*z)-B*z*z'*B/(z'*B*z); %调整AB=B1;n=n+1;if(n>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endtol=norm(r-x0);end12.mulBFS用B-F-S算法求非线性方程组的一个根function [r,n]=mulBFS(F,x0,B,eps)if nargin==2l = length(x0);B=eye(l); %B取为单位阵eps=1.0e-4;elseif nargin==3eps=1.0e-4;endendfx = subs(F,findsym(F),x0);r=transpose(x0)-B*fx;n=1;tol=1;while tol>epsx0=r;fx = subs(F,findsym(F),x0);r=x0-B*fx;y=r-x0;fr = subs(F,findsym(F),r);z = fr-fx;u = 1 + z'*B*z/(y'*z);B1= B+ (u*y*y'-B*z*y'-y*z'*B)/(y'*z); %调整B B=B1;n=n+1;if(n>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endtol=norm(r-x0);end13.mulNumYT用数值延拓法求非线性方程组的一组解function [r,m]=mulNumYT(F,x0,h,N,eps)format long;if nargin==4eps=1.0e-8;endn = length(x0);fx0 = subs(F,findsym(F),x0);x0 = transpose(x0);J = zeros(n,n);for k=0:N-1fx = subs(F,findsym(F),x0);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endinJ = inv(J);r=x0-inJ*(fx-(1-k/N)*fx0);x0 = r;endm=1;tol=1;while tol>epsxs=r;fx = subs(F,findsym(F),xs);J = zeros(n,n);for i=1:nx1 = xs;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-fx)/h(i);endr=xs-inv(J)*fx; %核心迭代公式tol=norm(r-xs);m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;14.DiffParam1用参数微分法中的欧拉法求非线性方程组的一组解function r=DiffParam1(F,x0,h,N)%非线性方程组:f%初始解:x0%数值微分增量步大小:h%雅可比迭代参量:l%解的精度:eps%求得的一组解:r%迭代步数:nx0 = transpose(x0);n = length(x0);ht = 1/N;Fx0 = subs(F,findsym(F),x0);for k=1:NFx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h(i);J(:,i) = (subs(F,findsym(F),x1)-Fx)/h(i);endinJ = inv(J);r = x0 - ht*inJ*Fx0;x0 = r;end15.DiffParam2用参数微分法中的中点积分法求非线性方程组的一组解function r=DiffParam2(F,x0,h,N)%非线性方程组:f%初始解:x0%数值微分增量步大小:h%雅可比迭代参量:l%解的精度:eps%求得的一组解:r%迭代步数:nx0 = transpose(x0);n = length(x0);ht = 1/N;Fx0 = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nxt = x0;xt(i) = xt(i)+h(i);J(:,i) = (subs(F,findsym(F),xt)-Fx0)/h(i);endinJ = inv(J);x1 = x0 - ht*inJ*Fx0;for k=1:Nx2 = x1 + (x1-x0)/2;Fx2 = subs(F,findsym(F),x2);J = zeros(n,n);for i=1:nxt = x2;xt(i) = xt(i)+h(i);J(:,i) = (subs(F,findsym(F),xt)-Fx2)/h(i);endinJ = inv(J);r = x1 - ht*inJ*Fx0;x0 = x1;x1 = r;end16.mulFastDown用最速下降法求非线性方程组的一组解function [r,m]=mulFastDown(F,x0,h,eps)format long;if nargin==3eps=1.0e-8;endn = length(x0);x0 = transpose(x0);m=1;tol=1;while tol>epsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h;J(:,i) = (subs(F,findsym(F),x1)-fx)/h;endlamda = fx/sum(diag(transpose(J)*J));r=x0-J*lamda; %核心迭代公式fr = subs(F,findsym(F),r);tol=dot(fr,fr);x0 = r;m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;17.mulGSND用高斯牛顿法求非线性方程组的一组解function [r,m]=mulGSND(F,x0,h,eps)format long;if nargin==3eps=1.0e-8;endn = length(x0);x0 = transpose(x0);m=1;tol=1;while tol>epsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h;J(:,i) = (subs(F,findsym(F),x1)-fx)/h;endDF = inv(transpose(J)*J)*transpose(J);r=x0-DF*fx; %核心迭代公式tol=norm(r-x0);x0 = r;m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;18.mulConj用共轭梯度法求非线性方程组的一组解function [r,m]=mulConj(F,x0,h,eps)format long;if nargin==3eps=1.0e-6;endn = length(x0);x0 = transpose(x0);fx0 = subs(F,findsym(F),x0);p0 = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)*(1+h);p0(:,i) = -(subs(F,findsym(F),x1)-fx0)/h;endm=1;tol=1;while tol>epsfx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h;J(:,i) = (subs(F,findsym(F),x1)-fx)/h;endlamda = fx/sum(diag(transpose(J)*J));r=x0+p0*lamda; %核心迭代公式fr = subs(F,findsym(F),r);Jnext = zeros(n,n);for i=1:nx1 = r;x1(i) = x1(i)+h;Jnext(:,i) = (subs(F,findsym(F),x1)-fr)/h;endabs1 = transpose(Jnext)*Jnext;abs2 = transpose(J)*J;v = abs1/abs2;if (abs(det(v)) < 1)p1 = -Jnext+p0*v;elsep1 = -Jnext;endtol=norm(r-x0);p0 = p1;x0 = r;m=m+1;if(m>100000) %迭代步数控制 disp('迭代步数太多,可能不收敛!');return;endendformat short;19.mulDamp用阻尼最小二乘法求非线性方程组的一组解function [r,m]=mulDamp(F,x0,h,u,v,eps)format long;if nargin==5eps=1.0e-6;endFI = transpose(F)*F/2;n = length(x0);x0 = transpose(x0);m=1;tol=1;while tol>epsj = 0;fx = subs(F,findsym(F),x0);J = zeros(n,n);for i=1:nx1 = x0;x1(i) = x1(i)+h;afx = subs(F,findsym(F),x1);J(:,i) = (afx-fx)/h;endFIx = subs(FI,findsym(FI),x0);for i=1:nx2 = x0;x2(i) = x2(i)+h;gradFI(i,1) = (subs(FI,findsym(FI),x2)-FIx)/h;ends=0;while s==0A = transpose(J)*J+u*eye(n,n);p = -A\gradFI;r = x0 + p;FIr = subs(FI,findsym(FI),r);if FIr<FIxif j == 0u = u/v;j = 1;elses=1;endelseu = u*v;j = 1;if norm(r-x0)<epss=1;endendendx0 = r;tol = norm(p);m=m+1;if(m>100000) %迭代步数控制disp('迭代步数太多,可能不收敛!');return;endendformat short;。
求解非线性方程的三种新的迭代法迭代法是一种数值计算方法,用来解非线性方程组或方程的近似解。
在实际运用中,我们经常遇到非线性方程的求解问题,这时迭代法是一种常用的方法。
迭代法的基本思想是通过不断地迭代计算,逐步逼近方程的解。
在本文中,我们将介绍三种新的迭代法来求解非线性方程。
1. 不动点迭代法不动点迭代法是一种简单而有效的迭代法,它的基本思想是将原始方程变形成 x=g(x) 的形式,其中 g(x) 称为不动点迭代函数。
具体的迭代过程如下:给定初始值 x0,计算 x1=g(x0)计算 x2=g(x1)不断地重复上述步骤,直到收敛于方程的解不动点迭代法的收敛性取决于 g(x) 的性质,一般来说,如果 g(x) 在解的附近有连续的一阶导数,并且 |g'(x)|<1 则迭代法收敛。
2. 牛顿迭代法牛顿迭代法是一种高效的迭代法,它的基本思想是通过不断地使用方程的切线来逼近方程的解。
具体的迭代过程如下:3. 龙贝格迭代法给定初始值 x0,计算 x1通过 Richardson 拟差法计算 x2不断地重复上述步骤,直到收敛于方程的解龙贝格迭代法的收敛速度非常快,尤其对于级数收敛速度较慢的情况下,可以加速收敛。
在实际应用中,以上三种新的迭代法可以根据具体问题的特点来选择合适的方法。
不动点迭代法适用于一般的非线性方程,牛顿迭代法适用于具有一阶导数的方程,而龙贝格迭代法适用于级数收敛速度较慢的情况下。
在使用迭代法求解非线性方程时,应根据实际问题的特点合理选择迭代方法,并注意迭代的收敛性和初始值的选取。
NonNullNonDenseDetNogle_preStoppedSe vi i Danmark har haft danskhosvistes, somblev fundet i marts i år, og som vi ikke vidste hvad var.Efter at have undersøgt dem i flere måneder, hedder det nu en prælunar.」Praeslunar betyder før-månen, og det henviser til det faktum, at det ikke er en asteroid eller en komet, men snarere en klippe, der holder fast på Jorden, inden den falder ind i den.TextSe vi i Danmark har haft sanskosmiske partikler, som blev fundet i marts i år, og som vi ikke vidste hvad var.Efter at have undersøgt dem i flere måneder, hedder det nu en prælunar.」Praeslunar betyder før-månen, og det henviser til det faktum, at det faktum, at det ikke er en asteroid eller en komet, men snarere en klippe, der holder fast på Jorden, inden den f alder ind i den.Vores forskning har vist, at den er dannet, da asteroidebælteren var meget tættere på Solen, end den er nu.。