非线性方程组求解

上传人:tia****nde 文档编号:66989800 上传时间:2019-01-06 格式:PPT 页数:93 大小:462.01KB
返回 下载 相关 举报
非线性方程组求解_第1页
第1页 / 共93页
非线性方程组求解_第2页
第2页 / 共93页
非线性方程组求解_第3页
第3页 / 共93页
非线性方程组求解_第4页
第4页 / 共93页
非线性方程组求解_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《非线性方程组求解》由会员分享,可在线阅读,更多相关《非线性方程组求解(93页珍藏版)》请在金锄头文库上搜索。

1、非线性方程(组)求解,2019年1月6日星期日,2,引言,在945.36kPa(9.33atm)、300.2K时,容器中充以2mol氮气,试求容器体积。已知此状态下氮气的P-V-T关系符合范德华方程,其范德华常数为a4.17atmL/mol2, b0.0371L/mol 数学模型:范德华方程变形可得,这是关于V的非线性方程,2019年1月6日星期日,3,本章内容,2.1非线性方程(组)数值求解基本原理 2.2 Matlab函数 2.3 多项式求根函数roots 2.4 非线性方程求解函数,fzero和fsolve 2.5 关系和逻辑运算 2.6 Matlab程序流程控制,2019年1月6日星期

2、日,4,非线性方程,与线性方程相比,非线性方程问题无论从理论上还是从计算公式上都要复杂得多 非线性方程一般形式 方程的解称为方程的根或函数的零点 对于高次代数方程,当次数4时,则没有通解公式可用,对于超越方程既不知有几个根,也没有同样的求解方式。实际上,对于n3代数方程以及超越方程都采用数值方法求近似根,2019年1月6日星期日,5,数值法求根,首选要给出一个初始猜测解,然后通过各种迭代格式使其逐次逼近准确解 初值好坏对迭代收敛性有很大影响,因此初值的选取很重要 对于有专业背景的问题,初值可以按条件选择,对于没有经验的问题,可以用图解法和计算机试算搜索法初估近似解,2019年1月6日星期日,6

3、,2.1.1 逐步扫描法求根的初始近似值,用数值法求方程的根可分为两步,首先要找出根的某个近似值,又称为“初始值”,然后再采用特定算法将初始值逐步接近真实值,直到获得满足要求的结果 逐步扫描法,2019年1月6日星期日,7,逐步扫描法,2019年1月6日星期日,8,2.1.2 求方程根的精确解,非线性方程(组)的求解一般采用迭代法进行。迭代法是一种重要的逐次逼近方法。这种方法用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果 常见的迭代算法有不动点迭代、二分法、牛顿法、弦截法、威格斯坦法(Wegstein)、抛物线法等,2019年1月6日星期日,9,不动点迭代法,我们

4、可以通过多种方法将方程式,转化为,2019年1月6日星期日,10,迭代方程,例如方程,可以转化为以下不同形式,(1),(2),(3),2019年1月6日星期日,11,方程的根,从给定的初值x0,按上式可以得到一个数列: x0, x1, x2, , xk, 如果这个数列有极限,则迭代格式是收敛的。这时数列xk的极限 就是方程的根,2019年1月6日星期日,12,直接迭代法,上述求非线性代数方程式数值解的方法称为直接迭代法(或称为不动点迭代法)。这个方法虽然简单,但根本问题在于当k-时,xk是否收敛于x*,也就是必须找出收敛的充分条件,2019年1月6日星期日,13,不动点,定义:函数g(x)的一

5、个不动点(fixed point)是指一个实数P,满足P = g(P) 从图形角度分析,函数y=g(x)的不动点是y=g(x)和y=x的交点,2019年1月6日星期日,14,不动点迭代的图形解释,2019年1月6日星期日,15,不动点定理,设有(i) g,g Ca,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点。在这种情况下,P称为排斥(repelling)不动点,而且迭代显示出局部发散性,2019年1月6日星期日,16,2.1.2.2 二分法,20

6、19年1月6日星期日,17,2.1.2.3 牛顿法,牛顿法也称为牛顿-拉普森法或者切线法。由于这个方法的计算结果颇佳,而计算过程也比较简单,所以被普遍采用 牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求解,2019年1月6日星期日,18,牛顿公式,设方程式 的近似根为 则 对 的泰勒级数展开式为,2019年1月6日星期日,19,牛顿法示意图,2019年1月6日星期日,20,牛顿法注意事项,在单根附近,牛顿公式恒收敛,而且收敛速度很快。但是需要注意如果初始值不在根的附近,牛顿公式不一定收敛 在实际使用中,牛顿法最好与逐步扫描法结合起来,先通过逐步扫描法求出根的近似值

7、,然后用牛顿公式求其精确值,以发挥牛顿法收敛速度快的优点,2019年1月6日星期日,21,2.1.2.4 弦截法,牛顿迭代法收敛速度快,但它要求计算函数导数的值。在科学与工程计算中,常会碰到函数导数不易计算或者算式复杂而不便计算的情况 弦截法的基本思想与牛顿法相似,即将非线性函数线性化后求解。两者的差别在于弦截法实现函数线性化的手段采用的是两点间的弦线,而不是某点的切线,2019年1月6日星期日,22,弦截法示意图,2019年1月6日星期日,23,弦截法注意事项,与牛顿法只需给出一个初值不同,弦截法需要给出两个迭代初值。如果与逐步扫描法结合起来,则最后搜索的区间的两个端点值常可作为初值 弦截法

8、虽比牛顿法收敛速度稍慢,但在每次迭代中只需计算一次函数值,又不必求函数的导数,且对初值要求不甚苛刻,是工程计算中常用的有效计算方法之一,2019年1月6日星期日,24,2.1.2.5 松弛迭代法,有些非线性方程用前面的不动点迭代法求解时,迭代过程是发散的。这时可以引入松弛因子,利用松弛迭代法。通过选择合适的松弛因子,就可以使迭代过程收敛,2019年1月6日星期日,25,松弛法注意事项,由上式可知,当松弛因子=1时,松弛迭代法变为不动点迭代法;当松弛因子1时,松弛法使迭代步长加大,可加速迭代,但有可能使原理收敛的迭代变为发散;当01时,松弛法使迭代步长减小,这适合于迭代发散或振荡收敛的情况,可使

9、振荡收敛过程加速;当0时,将使迭代反方向进行,可使一些迭代发散过程收敛,2019年1月6日星期日,26,松弛法注意事项,松弛迭代法是否有效的关键因素是松弛因子的值能否正确选定。如果值选用适当,能使迭代过程加速,或者使原来不收敛的过程变成收敛;但如果值选用不合适,则效果相反,有时甚至会使原来收敛的过程变得不收敛。松弛因子的数值往往要根据经验选定,但选用较小的松弛因子,一般可以保证迭代过程的收敛,2019年1月6日星期日,27,2.1.2.6 威格斯坦法,威格斯坦法在化工流程模拟中得到了广泛应用 威格斯坦法是一种迭代加速方法,2019年1月6日星期日,28,Wegstein法的示意图和迭代公式,2

10、019年1月6日星期日,29,Wegstein法注意事项,应注意,如果x1和x2两点选择不当,则连线的斜率等于1,与直线y=x无交点,从而迭代无法进行,这就是Wegstein法应当避免的陷井。引入一个量C,2019年1月6日星期日,30,Wegstein法注意事项,令q1-C 当q0时,Wegstein法退化为简单的不动点迭代 当00时,迭代能稳定收敛,但收敛较慢 当q0可以加速收敛,但易导致不稳定 为了加速收敛又避免不稳定,常取-5q0,这是称为有界的Wegstein法 注:当S=1时,取S=0进行计算。,2019年1月6日星期日,31,2.2 Matlab函数,Matlab中创建函数有几种

11、方法 最常用的是由function命令创建,可以通过程序、函数或命令窗口来访问 第二种是使用inline命令创建内联函数 第三种创建匿名函数 函数的另一种形式是子函数,在一个函数文件中,如果function关键字出现多次,则在第一个function之后定义的所有函数都称为子函数。子函数只能有函数文件的第一个函数和文件内部的其它子函数调用,2019年1月6日星期日,32,2.2.1 内联函数(inline function),内联函数的创建 inline(CE)把串表达式转化为输入变量自动生成的内联函数 inline(CE,arg1,arg2,)把串表达式转化为arg1,arg2等指定输入变量的

12、内联函数 inline(CE,n)把串表达式转化为x,P1,P2,Pn等指定输入变量的内联函数,2019年1月6日星期日,33,2.2.1 内联函数(inline function),说明 CE是字符串;CE表达式不能包含赋值号 第1种调用格式将自动地对CE进行辨识,把CE中由字母/数字组成的连续字符认做变量,除预定义变量名和常用函数名(如sin)外的有字母/数字组成的连续字符将被认做变量。但注意如果连续字符后紧接左圆括号,则不被当作输入变量。 第2种方法创建内联函数最稳妥、可靠的方法。 第3种方法最简练,但是对输入变量的字符有严格限制。输入变量字符只能是x,P1,P2,Pn等,注意P必须为大

13、写字母。,2019年1月6日星期日,34,2.2.1 内联函数(inline function),涉及内联函数性质的指令 class(inline_fun)给出内联函数类型 char(inline_fun)给出内联函数计算公式argnames(inline_fun)给出内联函数的输入变量vectorize(inline_fun)使内联函数适用数组运算规则,2019年1月6日星期日,35,2.2.1 内联函数(inline function),例1:创建一个内联函数,求解下式在x/3,/3.5;a4,b1时的值。 Fx=inline(x.2.*cos(a*x)-b,x,a,b) Fx = Inl

14、ine function: Fx(x,a,b) = x.2.*cos(a*x)-b g=Fx(pi/3 pi/3.5,4,1) g = -1.5483 -1.7259,2019年1月6日星期日,36,2.2.2 匿名函数 (anonymous function),匿名函数用于在命令行、函数文件或script文件中创建简单形式的函数,避免另外定义新的函数。 匿名函数的定义形式: f=(arglist)expression,2019年1月6日星期日,37,例题1:,采用匿名函数计算以下表达式在x5时的值: 1) f(x)x2; 2) f(x)x2,g(x)=3x, h(x)=g(f(x); 3)

15、=0.9, f(x)=sin(x),2019年1月6日星期日,38,求解,1) f = (x) x.2 a = f(5) 结果:a = 25 2) f = (x) x.2; g = (x) 3*x; h = (x) g(f(x); h(5) 结果:ans = 75 3) alpha = 0.9; f = (x) sin(alpha*x); f(5) 结果:ans = -0.9775,2019年1月6日星期日,39,匿名函数,匿名函数用于在命令行、函数文件或script文件中创建简单形式的函数,避免另外定义新的函数 Matlab允许定义多重匿名函数,例如,对于表达式 可以通过以下的匿名函数进行计

16、算 g = (c) quad(x) x.2+c*x+1,0,1) 此处quad为数值积分函数,2019年1月6日星期日,40,2.2.3 子函数,如果在一个函数文件中出现多个function关键字,则在第一个function之后定义的所有函数都称为子函数。含有第一个function关键字的表达式叫做主函数。主函数是由命令窗口、程序和其它函数调用的唯一函数。子函数仅能由主函数和主函数文件中的其它子函数调用,2019年1月6日星期日,41,例题2:,牛顿流体在不锈钢管中的流动压降可由下式估算: 其中, 摩擦压降,psi/(100英尺等量管长);M,质量流量,lb/hr;,粘度,cP;,密度,lb/ft3,D,管径,inch。,2019年1月6日星期日,42,例题2:,流体密度可由下式描述: ,g/ml;对于水,A0.34710;B0.2740;Tc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号