非线性方程组迭代解法
- 格式: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决策树建模。
它可以有效地帮助我们提高网页排序质量、
构建更智能的搜索引擎等。
有了非线性方程组解的存在唯一性定理,我们也可以使用迭代方法来解决复杂
的非线性问题,比如梯度下降法,牛顿迭代以及二次原型算法。
这些迭代方法可以在互联网中用于实现网页排序,搜索推荐以及机器学习的自主优化等功能,让我们的搜索既“智能”又“高效”。
非线性方程组解的存在唯一性定理至今仍然在发挥重要作用,不仅在数学方面,也在各个行业,特别是在互联网中发挥出了重要的作用,可以大大提高搜索效率和精度,改变人们的网络体验。
非线性方程组的迭代解法
非线性方程组是指由非线性函数组成的方程组,它们通常无法使用数学公式解出解析解。
一种常用的求解非线性方程组的方法是迭代法。
迭代法是一种近似求解方法,它通过不断进行迭代来逼近解。
常用的迭代法有牛顿迭代法、共轭梯度法、线性共轭法等。
牛顿迭代法是一种常用的迭代法,它使用了泰勒展开式来逼近非线性函数,并使用这个近似函数的零点来迭代求解非线性方程组。
共轭梯度法是一种高效的迭代法,它使用了共轭梯度来求解非线性方程组。
线性共轭法是一种高效的迭代法,它通过使用共轭梯度来求解非线性方程组,并使用线性共轭条件来加速收敛。
这些迭代法都是基于迭代的方法,需要给定初始解和终止条件,并且在迭代过程中可能会出现收敛问题,所以需要设计合适的迭代步骤来保证收敛性。
非线性方程组迭代解法不动点法(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]。