第五章 非线性方程组求解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

非线性方程(组)求解非线性方程(组)数值求解基本原理多项式求根函数-roots非线性方程求解函数-fzero非线性方程组求解函数-fsolve引言在945.36kPa(9.33atm)、300.2K时,容器中充以2mol氮气,试求容器体积。已知此状态下氮气的P-V-T关系符合范德华方程,其范德华常数为a=4.17atm•L/mol2,b=0.0371L/mol数学模型:范德华方程变形可得关于V的非线性方程22()()()0anfVpVnbnRTV非线性方程(组)在化学计算中的作用•多组分混合溶液的沸点、饱和蒸气压计算•流体在管道中阻力计算•多组分多平衡级分离操作模拟计算•平衡常数法求解化学平衡问题•定态操作的全混流反应器的操作分析非线性方程非线性方程包括:高次代数方程、超越方程及其它们的组合与线性方程相比,非线性方程求解问题无论从理论上还是从计算公式上都要复杂得多对于高次代数方程,当次数4时,则没有通解公式可用,对于超越方程既不知有几个根,也没有同样的求解方式。实际上,对于n≥3代数方程以及超越方程都采用数值方法求近似根。非线性方程数值求解原理逐步扫描法开始结束输入初值A,步长hX1=A,Y1=f(X1)X2=X1+hY2=f(X2)打印A,h,X1Y1*Y20X1=X2Y1=Y2是否0yxaby=f(x)a+ha+2h0yxaby=f(x)逐步扫描法效率较低,常用于求根的初始近似值逐步扫描法计算示例-方程x2-2=0的正数解计算方程的正数解220x求方程根的精确解非线性方程(组)的求解一般采用迭代法进行。迭代法是一种重要的逐次逼近方法。这种方法用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果。常见的迭代算法有不动点迭代二分法牛顿法弦截法抛物线法威格斯坦法(Wegstein)不动点迭代法0xfxgx我们可以通过多种方法将方程式转化为0,02ccxcxxx2xcxxcxxcxxx2122例如方程可以转化为以下不同形式(1)(2)(3)不动点迭代法从给定的初值x0,按上式可以得到一个数列:{x0,x1,x2,…,xk,…}如果这个数列有极限,则迭代格式是收敛的。这时数列{xk}的极限就是方程的根上述求非线性代数方程式数值解的方法称为直接迭代法(或称为不动点迭代法)。这个方法虽然简单,但根本问题在于当k-∞时,xk是否收敛于x*,也就是必须找出收敛的充分条件*limkkxx例题:0322xxxf3,004.3,011.3,034.3104.3634.932317.31132,2,1,032,432,321*543120110xxkxxxxxxxkxxxxxxxkkk根的值越来越接近于精确越来越大时,当求得,得迭代格式如下:,取即)构造迭代格式如下:正确的收敛的迭代格式例题:根的值越来越远离于精确越来越大时,当求得,得迭代格式如下:,取即):如果构造迭代格式如下kkkxkxxxxxkxxxxxxx,070.191625.193215.6321,2,1,0321,4321,3211321220121022发散的迭代格式0322xxxf例题:0322xxxf3,1,000.1,999.0,003.199.0,028.1,919.0,263.1,375.02365.03235.12323,2,1,023,423,231*1098765423120110xxkxxxxxxxxxxxxxkxxxxxxxkkk但并不收敛于精确根的值越来越接近于越来越大时,当求得,得迭代格式如下:,取即)下:也可以构造迭代格式如错误的收敛迭代格式不动点定义:函数g(x)的一个不动点(fixedpoint)是指一个实数P,满足P=g(P)从图形角度分析,函数y=g(x)的不动点是y=g(x)和y=x的交点不动点定理设有(i)g,g’∈C[a,b],(ii)K是一个正常数,(iii)p0∈(a,b),(iv)对所有x∈[a,b],有g(x)∈[a,b]如果对于所有x∈[a,b],有|g’(x)|≤K1,则迭代pn=g(pn-1)将收敛到惟一的不动点P∈[a,b],。在这种情况下,P称为吸引(attractive)不动点。对于所有x∈[a,b],有|g’(x)|1,则迭代pn=g(pn-1)将不会收敛到P点。在这种情况下,P称为排斥(repelling)不动点,而且迭代显示出局部发散性不动点迭代的图形解释p0p1p2OPPxy(p0,g(p0))(p1,p1)y=xy=g(x)p0p1p2OPPxy(p0,g(p0))(p1,p1)y=xy=g(x)单调收敛0'1gP1'0gP振荡收敛不动点迭代的图形解释p0p1p2OPPxy(p0,g(p0))(p1,p1)y=xy=g(x)p0p1p2OPPxy(p0,g(p0))(p1,p1)y=xy=g(x)单调发散振荡发散1'gP'1gP二分法若函数f(x)在区间[a,b]内单调连续,且f(a)f(b)0,则在闭区间[a,b]内必然存在方程f(x)=0的根x*k=0;whileabs(b-a)epsx=(a+b)/2;ifsign(f(x))==sign(f(b))b=x;elsea=x;endk=k+1;end二分法的图形解释二分法的MATLAB程序二分法是一种可靠的算法,但计算速度较慢二分法计算示例-方程x2-2=0的正数解计算方程的正数解220x牛顿法牛顿法也称为牛顿-拉普森法或者切线法。由于这个方法的计算结果颇佳,而计算过程也比较简单,所以被普遍采用。牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求解。牛顿法原理设方程式的近似根为则对的泰勒级数展开式为1'kkkkfxxxfx0fx0xfx0xx200000'2!xxfxfxxxfxfx00'00xfxxxfxf000'fxxxfx牛顿法的几何意义xfy00,xfx11,xfx0x1x*xYOX000()()'()yfxxxfx切线方程例:牛顿法计算x^2-25=0的解f(x)=x2-25,则f’(x)=2x可构造迭代公式如下:取x0=2代入上式,得x1=7.25,继续递推,依次得5.35、5.0114、5.000001、5.0000000001…21252iiiixxxx牛顿法注意事项在有根区间[a,b]上,连续且不变号,则只要选取的初始近似根x0满足,切线法必定收敛。在单根附近,牛顿公式恒收敛,而且收敛速度很快。但是需要注意如果初始值不在根的附近,牛顿公式不一定收敛在实际使用中,牛顿法最好与逐步扫描法结合起来,先通过逐步扫描法求出根的近似值,然后用牛顿公式求其精确值,以发挥牛顿法收敛速度快的优点'()0,()fxfx00()()0fxfx牛顿迭代法收敛速度快,但它要求计算函数导数的值弦截法牛顿迭代法收敛速度快,但它要求计算函数导数的值。在科学与工程计算中,常会碰到函数导数不易计算或者算式复杂而不便计算的情况弦截法的基本思想与牛顿法相似,即将非线性函数线性化后求解。两者的差别在于弦截法实现函数线性化的手段采用的是两点间的弦线(用差商代替导数),而不是某点的切线111kkkkkkkfxxxxxfxfx弦截法示意图弦截法注意事项与牛顿法只需给出一个初值不同,弦截法需要给出两个迭代初值。如果与逐步扫描法结合起来,则最后搜索的区间的两个端点值常可作为初值弦截法虽比牛顿法收敛速度稍慢,但在每次迭代中只需计算一次函数值,又不必求函数的导数,且对初值要求不甚苛刻,是工程计算中常用的有效计算方法之一弦截法虽比牛顿法收敛速度稍慢,但计算量小逆二次插值(IQI)若已知三个点a,b,c,及其函数值f(a),f(b),f(c),可以将这三点插值为关于y的二次函数。此抛物型一定与x轴有交点,在交点处y=0,对应点x=P(0)为下一步迭代解。IQI法在迭代终点时收敛速度很快,但整个过程中速度不稳定松弛迭代法有些非线性方程用前面的不动点迭代法求解时,迭代过程是发散的。这时可以引入松弛因子,利用松弛迭代法。通过选择合适的松弛因子,就可以使迭代过程收敛1nnnnxxxx迭代法是计算数学的一种重要方法,用途很广,求解线性方程组和矩阵特征值时也要用到这种方法松弛法注意事项由上式可知,当松弛因子ω=1时,松弛迭代法变为不动点迭代法;当松弛因子ω1时,松弛法使迭代步长加大,可加速迭代,但有可能使原理收敛的迭代变为发散;当0ω1时,松弛法使迭代步长减小,这适合于迭代发散或振荡收敛的情况,可使振荡收敛过程加速;当ω0时,将使迭代反方向进行,可使一些迭代发散过程收敛松弛迭代法是否有效的关键因素是松弛因子的值能否正确选定。如果值选用适当,能使迭代过程加速,或者使原来不收敛的过程变成收敛;但如果值选用不合适,则效果相反,有时甚至会使原来收敛的过程变得不收敛。松弛因子的数值往往要根据经验选定,但选用较小的松弛因子,一般可以保证迭代过程的收敛威格斯坦法威格斯坦法在化工流程模拟中得到了广泛应用威格斯坦法是一种迭代加速方法)]()([)()()(11111nnnnnnnnnxxxxxxxxxWegstein法注意事项应注意,如果x1和x2两点选择不当,则连线的斜率等于1,与直线y=x无交点,从而迭代无法进行,这就是Wegstein法应当避免的陷井。引入一个量CSC1111)()(nnnnxxxxS)()1(1nnnxCxCxWegstein法注意事项令q=1-C1.当q=0时,Wegstein法退化为简单的不动点迭代2.当0q1时,则变为有阻尼的迭代法。通常q0时,迭代能稳定收敛,但收敛较慢3.当q0可以加速收敛,但易导致不稳定4.为了加速收敛又避免不稳定,常取-5q0,这是称为有界的Wegstein法MATLAB求解非线性方程方法MATLAB求解非线性方程函数非线性方程非线性方程组非线性方程多项式函数rootsfzerofsolve多项式求根函数roots多项式的表达式约定如下:对于多项式,用以下行向量表示:这样就把多项式问题转化为向量问题Matlab提供了多种多项式计算函数,如多项式求根函数roots,求多项式的值,polyval;多项式乘法,conv;多项式除法,deconv;多项式微分,polyder;多项式拟合,polyfitnnnnoaxaxaxaxP111)(],,,,[110nnaaaaP函数rootsr=roots(c),用于求解多项式的根其中,行向量c的元素是多项式的系数,按多项式次数降序排列如果c中含有n+1个元素,则多项式为n次roots可以获得多项式的所有根其算法为计算伴随矩阵的特征值例题6:求方程的根321xxc=[1-10-1];r=roots(c)r=1.4656-0.2328+0.7926i-0.2328-0.7926ipolyval(c,r(1))ans=-2.5535e-015非线性方程求解函数fzerofzero对于一般的单个超越方程,可以采用fzero函数求解fzero函数结合使用二分法、割线法和可逆二次内插法•从两个函数值异号的点a,b开始•利用a,b获得割线点c•重复以下步骤直至abs(b-a)*abs(b)或f(b)=0•重新排列a,b,c

1 / 51
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功