资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第2章 非线性方程求解,2.1 化工实际问题的提出 2.2 实根的对分法 2.3直接迭代法 2.4松弛迭代法 2.5韦格斯坦法 2.6牛顿迭代法 2.7 割线法 2.8非线性方程组的牛顿方法 2.9 化工生产中非线性方程组求解应用实例,目录,2.1 化工实际问题的提出,求解非线性方程是化工设计及模拟计算中必须解决的一个问题。与线性方程相比,非线性方程问题无论是从理论上还是从计算公式上,都要比线性方程复杂的多。对于一般的非线性f(x)=0,计算方程的根既无一定章程可循也无直接方法可言。例如,求解高次方程组7x6-x3+x-1.5=0的根,求解含有指数和正弦函数的超越方程ex-sin(x)=0的零点。解非线性方程或非线性方程组也是计算方法中的一个主题。一般地,我们用符号f(x)来表示方程左端的函数,方程的一般形式表示为f(x)=0,方程的解称为方程的根或函数的零点。 通常,非线性方程的根不止一个,而任何一种方法只能算出一个根。因此,在求解非线性方程时,要给定初始值或求解范围。而对于具体的化工问题,初值和求解范围常常可根据具体的化工知识来决定。常见的雷诺数和摩擦系数关系方程在雷诺数低于4000时有以下关系式:,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.1 化工实际问题的提出,这是一个典型的非线性方程。我们在管路设计中经常碰到。当我们已知雷诺数Re,如何根据公式(2-1)求出摩擦系数,这是我们在管路设计中必须首先解决的问题。对于方程(2-1)而言,无法用解析的方法求出摩擦系数,只能用数值求解的方法。如用在下面即将介绍的松弛迭代法,假设: 则利用松弛迭代公式可得: 经11次迭代可得摩擦系数为0.07593。 同样,在n个组分的等温闪蒸计算中,通过物料和相平衡计算,我们可得到如下非线性方程:,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.1 化工实际问题的提出,在方程(2-3 )中只有是未知数,ki为相平衡常数,zi为进料组分的摩尔浓度,均为已知数。和上面的情况一样,方程(2-3 )也无法直接解析求解,必须利用数值的方法,借助于计算机方可精确的计算。对于这个问题的求解,可利用我们下面介绍的牛顿迭代法进行计算,也可利用其他迭代公式进行计算,如采用牛顿迭代公式,则可以得到如下的具体迭代公式: (2-4) 饱和蒸气压是我们经常要用到的数据,虽然我们可以通过实验测量来获取饱和蒸气压的数据,但我们通常利用前人已经测量得到的数据或回归的公式来获取,这可以减轻我们大量的基础实验工作。公式(2-5)是一种常用的饱和蒸气压计算公式: 其中p为饱和蒸气压,单位为mmHg,T为温度,单位为K,A、B、C、D为已知系数。要想得到某一温度下的饱和蒸气压,直接利用公式(2-5)是无法得到的。因为公式(2-5)两边都有未知变量,并且无法用解析的方法求解,必须用数值计算的方法求解。通过上面的一些例子,我们可以发现,如果没有适当的手段和办法来求解非线性方程,那么化学化工中的许多研究、设计等工作将无法展开,这势必影响化学化工的发展,下面我们将介绍一些实用的非线性方程求解方法,并提供计算机程序。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.2 实根的对分法,2.2.1 使用对分法的条件 2.2.2对分法求根算法 2.2.3对分法VB程序清单,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.2.1 使用对分法的条件,对分法或称二分法是求方程近似解的一种简单直观的方法。设函数f(x)在a,b上连续,且f(a)f(b)0,则f(x)在a,b上至少有一零点,这是微积分中的介值定理,也是使用对分法的前提条件。计算中通过对分区间,逐步缩小区间范围的步骤搜索零点的位置。 如果我们所要求解的方程从物理意义上来讲确实存在实根,但又不满足f(a)f(b)0,这时,我们必须通过改变a和b的值来满足二分法的应用条件。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.2.2对分法求根算法,计算f(x)=0的一般计算步骤如下: 1、输入求根区间a,b和误差控制量,定义函数f(x)。 2、判断: 如果f(a)f(b)0则转下,否则,重新输入a和b的值。 3、计算中点 x=(a+b)/2以及f(x)的值 分情况处理 (1)|f(x)|:停止计算x*=x,转向步骤4 (2)f(a)f(x)0:修正区间a,xa,b,重复3 (3)f(x)f(b)0:修正区间x,ba,b,重复3 4、输出近似根x*。 右图给出对分法的示意图。,x3=(x0+x2)/2,x2= (x0+x1)/2,x0 x3 x1 x1,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.2.3对分法VB程序清单,Private Sub Command1_Click() Dim x1, x2, x, y1, y2, y, eer 80 x1 = InputBox(“x1“) x2 = InputBox(“x2“) y1 = f(x1) y2 = f(x2) If y1 * y2 0 Then GoTo 100 Else Print “please repeat input x1 and x2“ GoTo 80 End If 100 x = (x1 + x2) / 2 y = f(x) If Abs(y) = 0.001 Then Print “the function root is “; x Print “y=“; y,Else If y1 * y 0 Then x2 = x y2 = y GoTo 100 Else x1 = x y1 = y GoTo 100 End If End If End Sub Public Function f(x) Dim y y = x 3 + x 2 - 1 f = y End Function,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.2.3对分法求解实例,用对分法求 在区间1,2之间的根。 解: (1) f(1)= -2.8,f(2)=0.3,由介值定理可得有根区间a,b=1,2。 (2) 计算x2=(1+2)/2=1.5,f(1.5)= -0.45,有根区间a,b=1.5,2。 (3) 计算x3=(1.5+2)/2=1.75,f(1.75)=0.078125,有根区间a,b=1.5,1.75。 一直做到|f(xn)|(计算前给定的精度)或|a-b|时停止。详细计算结果见表2-1。 对分法的算法简单,然而,若f(x)在a,b上有几个零点时,如不作特殊处理只能算出其中一个零点;另一方面,即使f(x)在a,b上有零点,也未必有f(a)f(b)0。这就限制了对分法的使用范围。对分法只能计算方程f(x)=0的实根。 对于多个零点的方程,我们可以通过将给定的区间a,b进行细分,然后在细分后的区间内用二分法分别求解,从而得到多个零点。例如求方程在0-30内的所有根。需要对二分法进行以下处理:即先给定一个a,本例中为0,然后不断增加,直到找到一个b,使f(a)f(b)0,调用二分法,计算在a,b范围内的根,然后将b作为a,重复上面的工作,直到计算范围超出30为止。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,VB调用,2.3直接迭代法,对给定的方程f(x)=0,将它转换成等价形式: 。给定初值x0,由此来构造迭代序列 ,k=1,2,,如果迭代收敛,即 有 ,则就是方程f(x)=0的根。在计算中当 小于给定的精度控制量时,取 为方程的根。 例如,代数方程x3-2x-10=0的三种等价形式及其迭代格式如下: 对于方程 构造的多种迭代格式 ,怎样判断构造的迭代格式是否收敛?收敛是否与迭代的初值有关?根据数学知识,我们可以直接利用以下收敛条件: 1、 当 有 2、 在a,b上可导,并且存在正数L1,使任意的 ,有 则在a,b上有唯一的点 满足 , 称 为 的不动点。而且迭代格式对任意初值均收敛于的不动点,并有下面误差估计式: (2-6) 要构造满足收敛条件的等价形式一般比较困难。事实上,如果 为f(x)的零点,若能构造等价形式 ,而 ,由 的边疆性,一定存在的邻域 ,其上有 ,这时若初值 迭代也就收敛了。由此构造收敛迭代格式有两个要素,其一,等价形式 应满足; 其二,初值必须取自 的充分小邻域,其大小决定于函数f(x),及做出的等价形式 。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.3直接迭代法,例:求代数方程x3-2x-5=0,在x0=2附近的零点。 解:1)x3=2x+5 构造的迭代序列收敛。取x0=2,则 准确的解是x=2.09455148150。 2)将迭代格式写为 迭代格式不能保证收敛,但并不一定不收敛。 VB程序界面:,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.4松弛迭代法,有些非线性方程或方程组当用上一节中的直接迭代法求解时,迭代过程是发散的。这时可引入松弛因子,利用松弛迭代法。通过选择合适的松弛因子,就可以使迭代过程收敛。松弛法的迭代公式如下: (2-7) 由上式可知,当松弛因子等于1时,松弛迭代变为直接迭代。当松弛因子大于1时松弛法使迭代步长加大,可加速迭代,但有可能使原来收敛的迭代变成发散。当01时, 松弛法使迭代步长减小,这适合于迭代发散或振荡收敛的情况,可使振荡收敛过程加速。当0时,将使迭代反方向进行,可使一些迭代发散过程收敛。 松弛法是否有效的关键因子是松弛因子的值能否正确选定。如果值选用适当,能使迭代过程加速,或使原来不收敛的过程变成收敛。但如果值选用不合适,则效果相反,有时甚至会使原来收敛的过程变得不收敛。松弛因子的数值往往要根据经验选定,但选用较小的松弛因子,一般可以保证迭代过程的收敛。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,2.4松弛迭代法,例:用松弛迭代法求解下面非线性方程组,并分析松弛因子对迭代次数及收敛过程的影响。已知迭代初值x和y均为0,收敛精度=0.001 解: 取以下迭代表达式: 若取松弛因子为1.1则其迭代过程如左表。 若改变松弛因子,迭代过程及迭代所需的次数亦将发生变化,详见右表。 由右表数据可知,当松弛因子小于1时,增大松弛因子,可加速迭代过程,减少 迭代次数,但当松弛因子大于1时,迭代次数反而增加,当松弛因子达到1.56 时,迭代过程分散。,2.1,2.8,2.7,2.5,2.3,2.2,总目录,2.9,2.6,2.4,此法是一种迭代加速方法。在图2-3中,从x0开始,曲线y=(x)和直线y=x之间的阶梯形折线为单变量的直接迭代过程。其迭代步长为每个阶梯的水平距离。 若利用图2-3中曲线(x)上的两个点作一直线, 通过求该直线和y=x的交点C的横坐标xW作为新的迭代点,这样的迭代计算过程就是韦格斯坦法。即韦格斯坦法需要在已知两点的前提下迭代计算第三点。一般第一点为人为设定,第二点利用直接迭代计算而得,则第三点就可以用韦格斯坦法迭代求解。已知A点的坐标为(x1,y1),B点的坐标为(x2,y2)。则过A、B两点的直线方程为: 求该直线和y=x的交点可得: 韦格斯坦法的一般计算通式为,2
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号