非线性方程求解课件_第1页
非线性方程求解课件_第2页
非线性方程求解课件_第3页
非线性方程求解课件_第4页
非线性方程求解课件_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、非线性方程(组)求解10/16/20221非线性方程(组)求解10/11/20221引言在945.36kPa(9.33atm)、300.2K时,容器中充以2mol氮气,试求容器体积。已知此状态下氮气的P-V-T关系符合范德华方程,其范德华常数为a4.17atmL/mol2, b0.0371L/mol数学模型:范德华方程变形可得,这是关于V的非线性方程 10/16/20222引言在945.36kPa(9.33atm)、300.2K时,本章内容2.1非线性方程(组)数值求解基本原理2.2 Matlab函数2.3 多项式求根函数roots2.4 非线性方程求解函数,fzero和fsolve2.5 关

2、系和逻辑运算2.6 Matlab程序流程控制10/16/20223本章内容2.1非线性方程(组)数值求解基本原理10/11/2非线性方程与线性方程相比,非线性方程问题无论从理论上还是从计算公式上都要复杂得多 非线性方程一般形式方程的解称为方程的根或函数的零点 对于高次代数方程,当次数4时,则没有通解公式可用,对于超越方程既不知有几个根,也没有同样的求解方式。实际上,对于n3代数方程以及超越方程都采用数值方法求近似根 10/16/20224非线性方程与线性方程相比,非线性方程问题无论从理论上还是从计数值法求根首选要给出一个初始猜测解,然后通过各种迭代格式使其逐次逼近准确解初值好坏对迭代收敛性有很

3、大影响,因此初值的选取很重要对于有专业背景的问题,初值可以按条件选择,对于没有经验的问题,可以用图解法和计算机试算搜索法初估近似解 10/16/20225数值法求根首选要给出一个初始猜测解,然后通过各种迭代格式使其2.1.1 逐步扫描法求根的初始近似值用数值法求方程的根可分为两步,首先要找出根的某个近似值,又称为“初始值”,然后再采用特定算法将初始值逐步接近真实值,直到获得满足要求的结果逐步扫描法10/16/202262.1.1 逐步扫描法求根的初始近似值用数值法求方程的根可分逐步扫描法10/16/20227逐步扫描法10/11/202272.1.2 求方程根的精确解非线性方程(组)的求解一般

4、采用迭代法进行。迭代法是一种重要的逐次逼近方法。这种方法用某个固定公式反复校正根的近似值,使之逐步精确化,最后得到满足精度要求的结果常见的迭代算法有不动点迭代、二分法、牛顿法、弦截法、威格斯坦法(Wegstein)、抛物线法等 10/16/202282.1.2 求方程根的精确解非线性方程(组)的求解一般采用迭不动点迭代法 我们可以通过多种方法将方程式转化为10/16/20229不动点迭代法 我们可以通过多种方法将方程式转化为10/11/迭代方程例如方程可以转化为以下不同形式(1)(2)(3)10/16/202210迭代方程例如方程可以转化为以下不同形式(1)(2)(3)10方程的根从给定的初值

5、x0,按上式可以得到一个数列: x0, x1, x2, , xk, 如果这个数列有极限,则迭代格式是收敛的。这时数列xk的极限 就是方程的根 10/16/202211方程的根从给定的初值x0,按上式可以得到一个数列: x0,直接迭代法上述求非线性代数方程式数值解的方法称为直接迭代法(或称为不动点迭代法)。这个方法虽然简单,但根本问题在于当k-时,xk是否收敛于x*,也就是必须找出收敛的充分条件10/16/202212直接迭代法上述求非线性代数方程式数值解的方法称为直接迭代法(不动点定义:函数g(x)的一个不动点(fixed point)是指一个实数P,满足P = g(P)从图形角度分析,函数y

6、=g(x)的不动点是y=g(x)和y=x的交点 10/16/202213不动点定义:函数g(x)的一个不动点(fixed point不动点迭代的图形解释 10/16/202214不动点迭代的图形解释 10/11/202214不动点定理 设有(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)不动点,而且迭代显示出局部发散性 10/16/202215不动点定理 设有(i) g,g Ca,b,

7、 (ii)2.1.2.2 二分法10/16/2022162.1.2.2 二分法10/11/2022162.1.2.3 牛顿法牛顿法也称为牛顿-拉普森法或者切线法。由于这个方法的计算结果颇佳,而计算过程也比较简单,所以被普遍采用牛顿法的核心内容是通过泰勒级数将非线性方程式转化为线性方程式,然后用迭代法求解 10/16/2022172.1.2.3 牛顿法牛顿法也称为牛顿-拉普森法或者切线法。牛顿公式 设方程式 的近似根为则 对 的泰勒级数展开式为10/16/202218牛顿公式 设方程式 的近似根为1牛顿法示意图YOX10/16/202219牛顿法示意图YOX10/11/202219牛顿法注意事项

8、在单根附近,牛顿公式恒收敛,而且收敛速度很快。但是需要注意如果初始值不在根的附近,牛顿公式不一定收敛在实际使用中,牛顿法最好与逐步扫描法结合起来,先通过逐步扫描法求出根的近似值,然后用牛顿公式求其精确值,以发挥牛顿法收敛速度快的优点 10/16/202220牛顿法注意事项在单根附近,牛顿公式恒收敛,而且收敛速度很快。2.1.2.4 弦截法牛顿迭代法收敛速度快,但它要求计算函数导数的值。在科学与工程计算中,常会碰到函数导数不易计算或者算式复杂而不便计算的情况 弦截法的基本思想与牛顿法相似,即将非线性函数线性化后求解。两者的差别在于弦截法实现函数线性化的手段采用的是两点间的弦线,而不是某点的切线

9、10/16/2022212.1.2.4 弦截法牛顿迭代法收敛速度快,但它要求计算函数弦截法示意图YOX10/16/202222弦截法示意图YOX10/11/202222弦截法注意事项与牛顿法只需给出一个初值不同,弦截法需要给出两个迭代初值。如果与逐步扫描法结合起来,则最后搜索的区间的两个端点值常可作为初值弦截法虽比牛顿法收敛速度稍慢,但在每次迭代中只需计算一次函数值,又不必求函数的导数,且对初值要求不甚苛刻,是工程计算中常用的有效计算方法之一 10/16/202223弦截法注意事项与牛顿法只需给出一个初值不同,弦截法需要给出两2.1.2.5 松弛迭代法有些非线性方程用前面的不动点迭代法求解时,

10、迭代过程是发散的。这时可以引入松弛因子,利用松弛迭代法。通过选择合适的松弛因子,就可以使迭代过程收敛 10/16/2022242.1.2.5 松弛迭代法有些非线性方程用前面的不动点迭代法松弛法注意事项由上式可知,当松弛因子=1时,松弛迭代法变为不动点迭代法;当松弛因子1时,松弛法使迭代步长加大,可加速迭代,但有可能使原理收敛的迭代变为发散;当01时,松弛法使迭代步长减小,这适合于迭代发散或振荡收敛的情况,可使振荡收敛过程加速;当0时,将使迭代反方向进行,可使一些迭代发散过程收敛 10/16/202225松弛法注意事项由上式可知,当松弛因子=1时,松弛迭代法变为松弛法注意事项松弛迭代法是否有效的

11、关键因素是松弛因子的值能否正确选定。如果值选用适当,能使迭代过程加速,或者使原来不收敛的过程变成收敛;但如果值选用不合适,则效果相反,有时甚至会使原来收敛的过程变得不收敛。松弛因子的数值往往要根据经验选定,但选用较小的松弛因子,一般可以保证迭代过程的收敛 10/16/202226松弛法注意事项松弛迭代法是否有效的关键因素是松弛因子的值能否2.1.2.6 威格斯坦法威格斯坦法在化工流程模拟中得到了广泛应用 威格斯坦法是一种迭代加速方法 10/16/2022272.1.2.6 威格斯坦法威格斯坦法在化工流程模拟中得到了广Wegstein法的示意图和迭代公式 10/16/202228Wegstein

12、法的示意图和迭代公式 10/11/20222Wegstein法注意事项应注意,如果x1和x2两点选择不当,则连线的斜率等于1,与直线y=x无交点,从而迭代无法进行,这就是Wegstein法应当避免的陷井。引入一个量C10/16/202229Wegstein法注意事项应注意,如果x1和x2两点选择不当Wegstein法注意事项令q1-C当q0时,Wegstein法退化为简单的不动点迭代当0q0时,迭代能稳定收敛,但收敛较慢当q0可以加速收敛,但易导致不稳定为了加速收敛又避免不稳定,常取-5qc = 1 -1 0 -1;r = roots(c)r = 1.4656 -0.2328 + 0.7926

13、i -0.2328 - 0.7926ipolyval(c, r(1) ans =-2.5535e-015 10/16/202263例题6:求方程 的根c 2.4 非线性方程求解函数fzero一般的单个超越方程,可以采用fzero函数求解。它结合使用二分法、割线法和可逆二次内插法 fsolve与fzero函数只能求解单个方程的根不同,fsolve函数可求解非线性方程组的解。其算法采用的是最小二乘法 10/16/2022642.4 非线性方程求解函数fzero10/11/2022642.4.1 函数fzerox,fval,exitflag,output = fzero(fun,x0,options

14、, p1, p2, .) 此函数的作用求函数fun在x0附件的零值点,x0是标量fval函数在解x处的值exitflag程序结束情况: 0,程序收敛于解;0,程序没有收敛;0,计算达到了最大次数output是一个结构体,提供程序运行的信息;output.iterations,迭代次数;output.functions,函数fun的计算次数;output.algorithm,使用的算法options选项,可用optimset函数设定选项的新值fun可以是函数句柄或匿名函数。10/16/2022652.4.1 函数fzerox,fval,exitflag,例题7:计算以下方程的根1) 求sinx在

15、3附近的零点; 2) 求cosx在1,2范围内的零点;3) 4) 本例较简单,可直接在命令窗口输入命令求解:1) fzero(sin,3)2) fzero(cos,1,2)3) fzero(x) x3-2*sin(x),1)4) fzero(x) x3-2*x-5,1); roots(1 0 -2 -5)10/16/202266例题7:计算以下方程的根10/11/202266说明1) 第2小题中,如果所给区间两端方程不异号,则程序出错2) 除了采用匿名函数外,当然可以采用句柄函数定义函数,例如第三小题可以采用如下程序: function Cha2demo1 x=fzero(fun,1) fun

16、ction y=fun(x) y=x3-2*sin(x);3) 初值的选择对于解有影响,不同的初值可能获得不同的解可以根据感兴趣的解的区间确定初值范围可以作出函数在一定范围内的曲线,直观的确定解的大致范围4) fzero不能获得多项式的多重根,尤其是复数根。而roots函数求解,则可获得所有根10/16/202267说明1) 第2小题中,如果所给区间两端方程不异号,则程序出错例题8求 的零点,以t为自变量,取值范围为-10t(大于),=(大于等于),=a2的运算结果 a1=1 2 3;4 5 6;7 8 9; a2=5; a3=a1=a2a3 = 0 0 0 0 1 1 1 1 1 10/16

17、/202275例题12:已知a1= 2.5.2 逻辑运算2.5.2 逻辑运算两个逻辑量之间可以进行“与”、“或”和“非”三种基本逻辑运算及由它们组合而成的其它运算Matlab中的逻辑操作符包括:&(逻辑与),|(逻辑或),(逻辑非),xor(异或),&(先决与)和|(先决否)逻辑运算的结果仍然是逻辑量0(假)或1(真)维数相同的矩阵进行逻辑运算时,定义为它们对应运算逻辑量间的逻辑运算结果Matlab允许数与矩阵间进行逻辑运算,规则与关系运算相同,是数与矩阵各个运算间的逻辑运算10/16/2022762.5.2 逻辑运算2.5.2 逻辑运算10/11/2022逻辑运算真值表 10/16/2022

18、77逻辑运算真值表 10/11/202277例题13:求数值矩阵的逻辑“非”,a1和0的“异或”解:键入a1=1 0 -5 0;3 -2 0 6;0 0 5 7; 9 2 1 9; a2=a1, a3=xor(a1,0)回车得到结果a2 = 0 1 0 1 0 0 1 0 1 1 0 0 0 0 0 0a3 = 1 0 1 0 1 1 0 1 0 0 1 1 1 1 1 110/16/202278例题13:求数值矩阵的逻辑“非”,a1和0的“异或”a3 =2.5.3 运算符的优先级Matlab表达式中可能包含多种运算符:数学运算符、关系运算符和逻辑运算符各运算符执行的先后是根据优先级别执行的不

19、管运算符的位置如何,具有高优先级的运算符先执行具有相同优先级别的运算符则按先左后右的次序执行10/16/2022792.5.3 运算符的优先级Matlab表达式中可能包含多种运运算符的优先级注:级别1优先级最高,11级别最低10/16/202280运算符的优先级注:级别1优先级最高,11级别最低10/11/2.6 Matlab程序流程控制组成计算机程序的一系列指令语句可以分成两类:运算语句和控制顺序语句Matlab编程的主要任务是安排调整好控制顺序语句,使运算语句的运行顺序合理,运算简捷省时MATLAB的程序流程控制主要有if选择语句、switch多重分支、for循环、while循环和tryc

20、atch等五种控制结构 10/16/2022812.6 Matlab程序流程控制组成计算机程序的一系列指令语2.6.1 if选择语句if语句的一般格式:if condition1 statements1 %如果condition1的值为True,则执行该语句组elseif condition2 statements2 %如果condition2的值为True,则执行该语句组else statements3 %如果condition1和condition2的都为False,则执行该语句组end10/16/2022822.6.1 if选择语句if语句的一般格式:10/11/20说明conditio

21、n1和condition2均为逻辑表达式;elseif子句是可选的,数量也不受限制。如果缺省所有的elseif子句,则if语句变为如下格式: if condition statements else statements end如果else子句也省略,则if语句变为如下格式: if condition statements end10/16/202283说明condition1和condition2均为逻辑表达式error函数当不满足指定条件时,可使用终止某个程序或函数的运行error函数通常用于确保程序获得有效的分支数值当程序执行到error函数时,会在命令窗口显示函数所包含的信息,之后终止

22、程序或函数的执行,并将程序控制权返回到命令窗口命令行error函数可用于程序或函数任何位置,并不限于if,for,switch和while结构10/16/202284error函数当不满足指定条件时,可使用终止某个程序或函数的例题14: 编写一个程序,当输入数字大于0时计算其平方根,当小于0时计算则终止运算并返回错误信息解:x = input(x=)if x=0y=sqrt(x)elseerror(Negative input not allowed)end10/16/202285例题14: 编写一个程序,当输入数字大于0时计算其平方2.6.2 switch多重分支结构 switchcaseo

23、therwise语句的能力与ifelseend语句类似,但对多重选择的情况switch语句使代码更加易读。switch的一般格式:switch test_expr %测试表达式test_expr可以是标量或字符串case value statements 当test_expr值是value时,执行该语句组case value1,value2, statements 当test_expr值是value1或value2或时,执行该语句组otherwise statementsend10/16/2022862.6.2 switch多重分支结构 switch例题15:编程判断并显示输入自变量x的具体数

24、值时,函数是奇数、偶数(0视为偶数,不分正负),还是其它解:程序如下%switchclear,x=input(x=)y=x4-19*x3+x+32;switch mod(y,2) case 1 disp(It is odd) case 0 disp(It is even) otherwise disp(It is others)end10/16/202287例题15:编程判断并显示输入自变量x的具体数值时,函数是奇数2.6.3 for循环结构for循环结构用于循环次数已知的情况,其一般格式如下: for 循环变量 = 表达式1(初值):表达式2(步长):表达式3(终值) statements

25、(语句组) endforend循环的执行过程是:先计算初值和终值,并把初值赋给循环变量;再判断循环变量的值是否超过了终值。若超过,则退出循环,执行end后面的语句,否则执行循环体的语句组,之后将循环变量加上一个步长,然后重复执行循环体内容,直至循环变量超过终值而退出循环为止10/16/2022882.6.3 for循环结构for循环结构用于循环次数已知的情例题16:编程计算1至1000的加和值解:编程如下clearj=0;for i=1:1000 j=j+i;endji运行后结果为j = 500500i = 1000可见循环变量的最终值为表达式的终值10/16/202289例题16:编程计算1至1000的加和值10/11/202282.6.4 while循环结构while cndition(表达式) statements(执行语句组)end当MATLAB执行这个whileend循环时会首先测试condition(条件表达式)。如果condition为False(零),则直接跳出循环,执行end后面的语句。如果condition为True(非零),则执行语句组statements,然后退回到while语句再测试条

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论