非线性方程组迭代解法
- 格式:doc
- 大小:109.00 KB
- 文档页数:5
第4章 非线性方程与非线性方程组的迭代解法--------学习小结一、本章学习体会本章我们主要学习了非线性方程的几种解法,主要有对分法、简单迭代法、steffensen 迭代法、Newton 法、割线法等。
这几种方法都有其思想,并且它们的思想彼此之间有一定的联系。
本章的思路大致可以理解为:1.如何选取迭代公式;2.如何判断迭代公式的收敛速度;3.如何进行迭代公式的修正,以加速收敛;4.如何选取最适合的迭代方法 。
二、本章知识梳理具体求根通常分为两步走,第一步判断根是否存在,若存在,确定根的某个初始近似值;第二步,将初始近似值逐步加工成满足精度要求的结果。
求初始近似值,即确定根的大致区间(a, b ),使(a, b )内恰有方程的一个根。
本章的学习思路:针对一种迭代方法,找出迭代公式,并判断其收敛性,一般选取收敛速度最快的迭代公式,所以自然的提出了如何使收敛加速的问题。
4.1非线性方程的迭代解法非线性方程的迭代解法有:对分法、简单迭代法、steffensen 迭代法、Newton 法、割线法等。
4.1.1对分法设()[]()()0,<∈b f a f b a C x f 且,根据连续函数的介值定理,在区间()b a ,内至少存在有一个实数s ,使()0=s f 。
现假设在()b a ,内只有一个实数s ,使()0=s f 并要把s 求出来,用对分法的过程: 令b b a a ==00, 对于M k ,....,2,1,0=执行计算2kk k b a x +=若()ηε≤≤-k f a b k k 或,则停止计算取k x s ≈否则转(3)()()k k k k k k b b a a a f x f ==<++11,,0则令()()k k k k k k b b x a a f x f ==>++11,,0则令 若M k =则输出M 次迭代不成功的信息;否则继续。
对分法的局限:对分法只能求实根,而且只能求单根和奇数重根,不能求偶数根和复数根4.1.2简单迭代法及其收敛性迭代法是一种逐次逼近法,用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的解。
非线性方程组解的存在唯一性定理,
解的迭代方法和某些应用
非线性方程组解的存在唯一性定理是世界著名数学家克里斯多福·康威发表于1951年的一项学术成果,它给出了非线性方程组的解的存在唯一性的定理,并被
认为是非线性数学的里程碑。
非线性方程组的解的存在唯一性定理给出了一种把非线性子问题转化为线性子
问题的解法,它将复杂的非线性方程组拆分成多个子问题,逐步对每个子问题求解,并把它们综合起来得到最终结果的方法,是现代非线性数学的重要研究内容。
它的应用被广泛应用在多个学科中,比如金融学,物理学,生物学等。
在这里,我们只讨论它在互联网中的使用场景。
它可以用来解决各种复杂的非线性优化问题,如多轮次排序问题,ID3决策树建模。
它可以有效地帮助我们提高网页排序质量、
构建更智能的搜索引擎等。
有了非线性方程组解的存在唯一性定理,我们也可以使用迭代方法来解决复杂
的非线性问题,比如梯度下降法,牛顿迭代以及二次原型算法。
这些迭代方法可以在互联网中用于实现网页排序,搜索推荐以及机器学习的自主优化等功能,让我们的搜索既“智能”又“高效”。
非线性方程组解的存在唯一性定理至今仍然在发挥重要作用,不仅在数学方面,也在各个行业,特别是在互联网中发挥出了重要的作用,可以大大提高搜索效率和精度,改变人们的网络体验。
非线性方程组的迭代解法
非线性方程组是指由非线性函数组成的方程组,它们通常无法使用数学公式解出解析解。
一种常用的求解非线性方程组的方法是迭代法。
迭代法是一种近似求解方法,它通过不断进行迭代来逼近解。
常用的迭代法有牛顿迭代法、共轭梯度法、线性共轭法等。
牛顿迭代法是一种常用的迭代法,它使用了泰勒展开式来逼近非线性函数,并使用这个近似函数的零点来迭代求解非线性方程组。
共轭梯度法是一种高效的迭代法,它使用了共轭梯度来求解非线性方程组。
线性共轭法是一种高效的迭代法,它通过使用共轭梯度来求解非线性方程组,并使用线性共轭条件来加速收敛。
这些迭代法都是基于迭代的方法,需要给定初始解和终止条件,并且在迭代过程中可能会出现收敛问题,所以需要设计合适的迭代步骤来保证收敛性。
姓名 班级 学号第三章 非线性方程的数值解法一、学习体会本章主要介绍了非线性方程组的方程根的解法,求方程根的步骤,由于非线性方程组只有少数类型能解出根的解析表达式,只能用数值方法求出它的近似值。
求解非线性方程组的方法有作图法等,求根的方法有二分法、迭代法、牛顿法、割线法等。
在学习过程当中,我们要注意各种方法的特点与使用范围,针对不同场合下的非线性方程组,选择合适的方法有利于我们快速准确的得到所要求的结果。
二、知识梳理非线性方程的迭代解法1、对分法对分法的算法步骤如下:对k=0,1……,M 执行(1)计算k 2a kk x b +=; (2)()k f x ε<或者2k k b a ε-<则停止计算。
取s=k x ,否则转(3); (3)若f(k a )f (k x )〈0,令k+1k+1k k a =b =a x ,,;若f(k a )f (k x )〉0则有k+1k+1k k a =b =b x ,,; (4)若k=M ,则输出M 次迭代不成功的信息;否则继续。
2、简单迭代法及其收敛性定理1:设函数()[,]x C a b ϕ∈,在(a,b)内可导,且满足两个条件:(1)当[,]x a b ∈时, ()[,]x a b ϕ∈;(2)当(,)x a b ∈时, |'()|1x L ϕ≤<, 其中L 为一常数。
则有如下结论:(1)方程=()x x ϕ在区间[,]a b 上有唯一的根s ;(2)对任取0[,]x a b ∈,简单迭代法1=()k k x x ϕ+产生的序列{}[,]k x a b ⊂且收敛于s ;(3)成立误差估计式101|-|||1|-|||1kk k k k L s x x x L L s x x x L-≤--≤-- 定理2 设=()s s ϕ,'()x ϕ在包含s 的某个开区间内连续。
如果|'()|<1s ϕ,则存在0δ>,当0[,]x s s δδ∈-+时,由简单迭代法1=()k k x x ϕ+产生的序列{}[,]k x s s δδ⊂-+且收敛于s 。
非线性方程组迭代解法不动点法( unmovepoints.m)%非线性方程组的不动点法function [x,n]=unmovepoints(fun,x0,eps)if nargin<3eps=1e-3;endx1=feval(fun,x0);n=1;while(norm(x1-x0))>=eps x0=x1;x1=feval(fun,x0);n=n+1;if n>100000disp(' 无法收敛!');breakendendx=x1;Newton 迭代法( newtons.m)% 非线性方程组的Newton 迭代法function [x,n]=newtons(fun1,fun2,x0,eps)if nargin<4eps=1e-3;endx1=x0-feval(fun1,x0)/feval(fun2,x0);n=1;while norm(x1-x0)>=epsx0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0); n=n+1;if n>100000disp(' 无法收敛!');breakendendx=x1;注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用 abs 而应用norm (范数,默认值为向量各元素的平方和的开方;norm(xl-xO)即为向量x1与x0对应元素差的平方和的开方。
在对应的函数程序中应注意向量的运算与数量运算的区别。
)用以上方法求解下列非线性方程组:f 1 X =x 1 - 0.7 sinx ! -0.2cosx 2 =0 f 2 X = x 2 - 0.7 cos% 0.2sinx 2 =0函数:%非线性方程组函数(适用于不动点法) function f=non li nerequsl(x) f(1)=0.7*si n(x(1))+0.2*cos(x (2)); f(2)=0.7*cos(x(1))-0.2*si n(x (2));%非线性方程组函数(适用于Newt on 迭代法) function f=non li nerequs2(x) f(1)=x(1)-0.7*si n(x(1))-0.2*cos(x(2)); f(2)=x (2)-0.7*cos(x(1))+0.2*si n(x (2));%非线性方程组函数导数(适用于Newt on 迭代法) function f=non li nerequs3(x) f=[1-0.7*cos(x(1)),0.2*si n(x(2));0.7*si n(x(1)),1+0.2*cos(x(2))];命令:fsolve(@ non li nerequs2,[0.5,0.5])[x,n]=unmo vepo in ts( @non li nerequs1,[0,0],1e-6)[x,n]=n ewt ons(@non li nerequs2, @non li nerequs3,[0,0],1e-6)计算结果:(eps=0.000001)迭代方法X迭代次数n解析解[0.52652262191818 0.50791971903685] - fsolve[0.52652266171295 0.50791973020932] - 不动点法[0.526521300913880.50792028463452] 30 Newton 迭代法[0.526522793690200.50791961189450]16导数为f 2 f 2对多方程则类似。
第5章非线性方程(组)迭代法内容5.1 根的搜索5.2 迭代法的构造及收敛性5.3 方程求根的牛顿迭代法5.4 *非线性方程组的迭代法数学物理中许多问题常归结为求解非线性方程或非线性方程组.例如在最优化问题min ()x I F x ∈中,设函数()F x 在区间I 上严格凸并可微,且()()F x f x '=,则求其极小点等价于求解方程()0f x =的根;若()f x 是一个非线性函数,则方程()0f x =是一个非线性方程。
若()0f x =是一个方程组,且其中至少存在一个方程是非线性的,则称方程组是非线性方程组。
本章介绍一些常用的求解非线性方程和非线性方程组近似根的迭代方法。
§5.1 根的搜索⏹ 根的存在性:设函数[](),f x C a b ∈,且()()0f a f b <,则方程()0f x =在区间(),a b 内一定有实根*x ,称[],a b 为方程()0f x =的有根区间。
⏹ 二分法(是搜索方程()0f x =的根的一种计算简单的方法)。
● 基本思想:将有根区间[],a b 用其中点02a b x +=分为两半。
如果0()()0f x f a ⋅>,记 101,a x b b ==,方程的根11*(,)x a b ∈; 如果0()()0f x f a ⋅<,记 110,a a b x ==,方程的根11*(,)x a b ∈。
因此,新的有根区间为[]11,a b ,其长度为112b a b a --=.对有根区间[]11,a b 施行同样的手续,并反复二分下去,得到一系列有根区间[][][][]1122,,,,k k a b a b a b a b ⊃⊃⊃⊃⊃L L其中[],k k a b 的长度为:02k k k b a b a --=→(当k →∞时)。
上述结果表明,如果二分过程无限地继续下去,这些区间最终必将收缩于()0f x =的根x *.只要二分足够多次(即k 充分大),就能保证有2k k k k b a x x b a ε*--≤-≤<。
非线性方程组迭代解法不动点法(unmovepoints.m)%非线性方程组的不动点法function [x,n]=unmovepoints(fun,x0,eps)if nargin<3eps=1e-3;endx1=feval(fun,x0);n=1;while(norm(x1-x0))>=epsx0=x1;x1=feval(fun,x0);n=n+1;if n>100000disp('无法收敛!');breakendendx=x1;Newton迭代法(newtons.m)%非线性方程组的Newton迭代法function [x,n]=newtons(fun1,fun2,x0,eps)if nargin<4eps=1e-3;endx1=x0-feval(fun1,x0)/feval(fun2,x0);n=1;while norm(x1-x0)>=epsx0=x1;x1=x0-feval(fun1,x0)/feval(fun2,x0);n=n+1;if n>100000disp('无法收敛!');breakendendx=x1;注:方程组的迭代与方程迭代不同之处在于收敛的判断不能用abs 而应用norm (范数,默认值为向量各元素的平方和的开方;norm(x1-x0)即为向量x1与x0对应元素差的平方和的开方。
在对应的函数程序中应注意向量的运算与数量运算的区别。
)用以上方法求解下列非线性方程组:()0cos 2.0sin 7.02111=--=x x x X f ()0sin 2.0cos 7.02122=+-=x x x X f函数:%非线性方程组函数(适用于不动点法) function f=nonlinerequs1(x)f(1)=0.7*sin(x(1))+0.2*cos(x(2)); f(2)=0.7*cos(x(1))-0.2*sin(x(2));%非线性方程组函数(适用于Newton 迭代法) function f=nonlinerequs2(x)f(1)=x(1)-0.7*sin(x(1))-0.2*cos(x(2)); f(2)=x(2)-0.7*cos(x(1))+0.2*sin(x(2));%非线性方程组函数导数(适用于Newton 迭代法) function f=nonlinerequs3(x)f=[1-0.7*cos(x(1)),0.2*sin(x(2));0.7*sin(x(1)),1+0.2*cos(x(2))];导数为⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡∂∂∂∂∂∂∂∂22122111x f x f x f xf ,对多方程则类似。
命令:fsolve(@nonlinerequs2,[0.5,0.5])[x,n]=unmovepoints(@nonlinerequs1,[0,0],1e-6)[x,n]=newtons(@nonlinerequs2,@nonlinerequs3,[0,0],1e-6)计算结果:(eps=0.000001)迭代方法X 迭代次数n解析解[0.52652262191818 0.50791971903685] - fsolve [0.52652266171295 0.50791973020932]- 不动点法[0.52652130091388 0.50792028463452] 30 Newton 迭代法[0.52652279369020 0.50791961189450] 16在某操作条件下,有如下四个独立的反应:B A ⇔ DC A +⇔DE A +⇔ CF A +⇔其平衡常数分别为:0.08,0.06,0.001,0.05;反应前只有组分A ,没有其他物质,试求反应平衡时组分A 的摩尔分率为多少? 解:设反应前组分A 的总摩尔数为1,反应平衡后四反应过程分别消耗组分A 的摩尔数为1x 、2x 、3x 、4x ,所以反应平衡时各组分的摩尔数为:A :43211x x x x ----B :1xC :42x x +D :32x x +E :3xF :4x 故有:()011432111=-----=K x x x x x X f ()()()()()0112432432132422=-+++----++=K x x x x x x x x x x x X f ()()()()011343243213233=-+++----+=K x x x x x x x x x x X f()()()()011443243214244=-+++----+=K x x x x x x x x x x X freaction.m%非线性方程组函数(化学平衡,适用于fsolve) function f=reaction(x)f(1)=x(1)/(1-x(1)-x(2)-x(3)-x(4))-0.08;f(2)=(x(2)+x(4))*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.06; f(3)=x(3)*(x(2)+x(3))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.001; f(4)=x(4)*(x(2)+x(4))/(1-x(1)-x(2)-x(3)-x(4))/(1+x(2)+x(3)+x(4))-0.05; 命令:x=fsolve(@reaction,[0.3,0.2,0.1,0])或x=fsolve(@reaction,[0.3,0.2,0.1,0],foptions) 计算结果:x=[0.0514, 0.1621, 0.0050, 0.1392] 因此组分A 的摩尔分率为:4917.0114324321=+++----x x x x x x xreaction1.m%非线性方程组函数(化学平衡,适用于不动点法) function f=reaction1(x)f(1)=(1-x(1)-x(2)-x(3)-x(4))*0.08;f(2)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.06/(x(2)+x(3))-x(4); f(3)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.001/(x(2)+x(3)); f(4)=(1-x(1)-x(2)-x(3)-x(4))*(1+x(2)+x(3)+x(4))*0.05/(x(2)+x(4)); 其迭代格式为:()4321111x x x x K x ----=()()()43243243212211x x x x x x x x x x K x -++++----= ()()()3243243213311x x x x x x x x x K x ++++----=()()()4243243214411x x x x x x x x x K x ++++----=但该迭代格式无法收敛,所以不同的迭代格式是否收敛有很大不同;要满足迭代收敛则必须满足以下关系:迭代格式:()()()k k X X φ=+1 迭代函数的偏导数矩阵:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂n n n n n n x x x x x x x x x φφφφφφφφφ112221212111 迭代格式收敛的充分条件:111max <∑=≤≤nj ij ni a 或111ma x<∑=≤≤ni ij nj a 或11,2<∑=nj i ij a故在迭代格式的构造上比较困难,在实际应用中若能满足以上条件是最好的;但如果无法构造满足以上条件的迭代格式,那么还可采取如下的方法。
在不动点法中引如松弛因子1<W ,将原迭代格式改为:()()()k k X X φ=+1 ⇒ ()()()()()[]k k k k X X W X X -+=+φ1unmovepoints.m%非线性方程组的不动点法function [x,n]=unmovepoints(fun,x0,eps)if nargin<3eps=1e-3;endx1=feval(fun,x0);n=1;while(norm(x1-x0))>=epsx0=x1;x1=x0+0.1*(feval(fun,x0)-x0);无法收敛时,采用该式迭代,其中0.1为松弛因子<1,可根据具体情况修改%x1=feval(fun,x0);n=n+1;if n>100000disp('无法收敛!');breakendendx=x1;命令:(松弛因子取0.1,其数值不同迭代收敛程度不同,不收敛则降低松弛因子)x=unmovepoints(@reaction1,[0.3,0.2,0.1,0],1e-6)计算结果:x=[0.0514, 0.1621, 0.0050, 0.1392]。