计算机应用基础-3-线性与非线性方程(组)求解.ppt

上传人:小飞机 文档编号:6432810 上传时间:2023-10-30 格式:PPT 页数:75 大小:463.51KB
返回 下载 相关 举报
计算机应用基础-3-线性与非线性方程(组)求解.ppt_第1页
第1页 / 共75页
计算机应用基础-3-线性与非线性方程(组)求解.ppt_第2页
第2页 / 共75页
计算机应用基础-3-线性与非线性方程(组)求解.ppt_第3页
第3页 / 共75页
计算机应用基础-3-线性与非线性方程(组)求解.ppt_第4页
第4页 / 共75页
计算机应用基础-3-线性与非线性方程(组)求解.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《计算机应用基础-3-线性与非线性方程(组)求解.ppt》由会员分享,可在线阅读,更多相关《计算机应用基础-3-线性与非线性方程(组)求解.ppt(75页珍藏版)》请在三一办公上搜索。

1、第三章 代数方程(组)的Matlab求解,3.1 线性方程(组)求解一方程组解个数的判定二高斯消元法求解三LU矩阵分解求解四Jacobi迭代求解五 调用内部函数求解3.2 非线性方程(组)求解,3.1 线性方程(组)求解,一、方程组解个数及求解,Ax=B,对于矩阵,3.1 线性方程(组)求解,解的判定矩阵,又叫增广矩阵,线性方程组解的判定定理:(1)当 m=n 且 rank(A)=rank(C)=n 时 方程组有唯一解 x=A-1B x=inv(A)*B(2)当rank(A)=rank(C)=rn 时,方程组有无穷多解:,Z=null(A)%求解A矩阵的化零矩阵Z=null(A,r)%求解A矩

2、阵的化零矩阵的规范形式,若rank(A)=rank(C),只能用Moore-penrose 广义逆求解方程的最小二乘解为:x=pinv(A)*B 只能使误差范数测度 取最小值。,3.1 线性方程(组)求解,【例3-1】求解,A=1 2 3 4;4 3 2 1;1 3 2 4;4 1 3 2;B=5 1;4 2;3 3;2 4;X=inv(A)*B,X=-1.8000 2.4000 1.8667-1.2667 3.8667-3.2667-2.1333 2.7333,3.1 线性方程(组)求解,1 2 3 4 5 1 4 3 2 1 X=4 2 1 3 2 4 3 3 4 1 3 2 2 4,检验

3、:norm(A*x-B)=7.47e-015,X1=-9/5,12/5 28/15,-19/15 58/15,-49/15-32/15,41/15,3.1 线性方程(组)求解,精确解:x1=inv(sym(A)*B,检验:norm(double(A*x1-B)=0,【例3-2】,A=1 2 3 4;2 2 1 1;2 4 6 8;4 4 2 2 B=1;3;2;6;C=A B;rank(A),rank(C),rank(A)=rank(C)=24,3.1 线性方程(组)求解,1 2 3 4 1 2 2 1 1 X=3 2 4 6 8 2 4 4 2 2 6,判定可解性:,Z=null(A,r),

4、Z=2.0000 3.0000-2.5000-3.5000 1.0000 0 0 1.0000,X0=0.9542;0.7328;-0.0763;-0.2977,X0=pinv(A)*B,3.1 线性方程(组)求解,解出规范化零空间:,得出一个特解:,3.1 线性方程(组)求解,解出全部解:,2 3 0.9542X=a1-2.5+a2-3.5+0.7328 1 0-0.0763 0 1-0.2977,验证得出的解:a1=randn(1);a2=rand(1);x=a1*Z(:,1)+a2*Z(:,2)+x0 norm(A*x-B),【例3-3】,3.1 线性方程(组)求解,1 2 3 4 1

5、2 2 1 1 X=2 2 4 6 8 3 4 4 2 2 4,B=1:4;C=A B;rank(A),rank(C),最小二乘解:x=pinv(A)*B,检验:norm(A*x-B)=7.47e-015,二 高斯消去法求解线性方程组 高斯消去法它不需要方程组解的初值,也不需要重复迭代计算,它通过消去和回代两个过程就可以直接求出方程组的解。和前面的迭代法一样,在计算过程中,也有可能发散而得不到方程组的解,但可以通过一些其它方法解决。设一个n元方程组,以矩阵形式表示为:,3.1 线性方程(组)求解,1 消元过程,(1)令,进行矩阵的代数运算,可消去第一列的元素(2 n),(2)同理,可消去第二列

6、的元素(3 n),(3)可得任意步消元公式,假设第k步,有:,3.1 线性方程(组)求解,(4)经过n-1步消元后,系数矩阵称为上三角矩阵,3.1 线性方程(组)求解,回归过程:(1)首先解最后一个方程(2)依次回代,可得到任意公式:,3.1 线性方程(组)求解,高斯消元法通用程序,function x=UpTriangleFun(A,b)%求上三角系数矩阵的线性方程组Ax=b的解%A为线性方程组的系数矩阵%b为线性方程组中的常数向量%x为线性方程组中的解n=size(A);N=n(1);for k=N:-1:1 if(kN)s=A(k,(k+1):N)*x(k+1):N,1);else s=

7、0;end x(k,1)=(b(k)-s)/A(k,k);end,3.1 线性方程(组)求解,function x=DownTriangleFun(A,b)%求下三角系数矩阵的线性方程组Ax=b的解%A为线性方程组的系数矩阵%b为线性方程组中的常数向量%x为线性方程组中的解n=size(A);N=n(1);for k=1:N if(k1)s=A(k,1:(k-1)*x(1:(k-1),1);else s=0;end x(k,1)=(b(k)-s)/A(k,k);end,3.1 线性方程(组)求解,高斯全主元消去法,对于求解精度较高,或方程数量较多,易采用全主元法,其增广矩阵为(A(1)|b(1

8、),寻找A(1)中绝对值最大为主元素,将此元素进行行列交换,换为第一个元素,再进行消元过程,3.1 线性方程(组)求解,对于任意的第k-1次,其最大的主元素为:,进过n-1次主元消去之后,对后得到上三角矩阵。,通用算法,3.1 线性方程(组)求解,function x,xA=AllGaussFun(A,b)%AllGaussFun.m为用高斯全主元消去法求解线性方程组的解%A为线性方程组的系数矩阵%b为线性方程组的常数向量%x为线性方程组的解%xA为消元后的系数矩阵N=size(A);n=N(1);indexl=0;indexr=0;order=1:n;%记录未知数顺序的向量for i=1:(

9、n-1)me=max(max(abs(A(i:n,i:n);%选取全主元 for k=i:n for r=i:n if(abs(A(k,r)=me)indexl=k;indexr=r;k=n;break;end end end,temp=A(i,1:n);A(i,1:n)=A(indexl,1:n);A(indexl,1:n)=temp;bb=b(indexl);b(indexl)=b(i);b(i)=bb;%交换主行 temp=A(1:n,i);A(1:n,i)=A(1:n,indexr);A(1:n,indexr)=temp;%交换主列 pos=order(i);order(i)=orde

10、r(indexr);order(indexr)=pos;%主列的交换会造成未知数顺序的变化 for j=(i+1):n if(A(i,i)=0)disp(对角元素为0!);return;end l=A(j,i);m=A(i,i);A(j,1:n)=A(j,1:n)-l*A(i,1:n)/m;b(j)=b(j)-l*b(i)/m;endend,x=UpTriangleFun(A,b);y=zeros(n,1);for i=1:n for j=1:n if(order(j)=i)y(i)=x(j);end endend x=y;xA=A;,例【3-4】求多元线性方程组的解,求解程序“ME_31_7

11、.m”,x=(2.40,-19.20,-1.00,4.00),3.1 线性方程(组)求解,三 LU矩阵分解求解,线性方程组变为:,LUx=b,令:,Y=Ux,则:,LY=b,3.1 线性方程(组)求解,解两个三角行方程组,可得解。,A=LU,其中,function x=LUfun(A,b)%实现LU分解求线性方程组Ax=b的解%A为线性方程组的系数矩阵%b为线性方程组中的常数向量%x为线性方程组中的解r=rank(A);%flag=isexist(A,b)%判断方程组解的情况if flag=0 disp(该方程组无解!);x=;return;else m,n=size(A);L,U,P=lu(

12、A);%lu函数为MATLAB提供的函数实现矩阵LU分解 b=P*b;%解Ly=b y(1)=b(1);if m1 for k=2:m y(k)=b(k)-L(k,1:k-1)*y(1:k-1);end end y=y;,%解Ux=y得原方程组的一个特解 x0(r)=y(r)/U(r,r);if r1 for k=r-1:-1:1;x0(k)=(y(k)-U(k,k+1:r)*x0(k+1:r)/U(k,k);end end x0=x0;%如果方程组有唯一解 if flag=1 x=x0;return;else%如果方程组有无穷多解 format rat;z=null(A,r);%求出对应齐次

13、方程组的基础解系 mz,nz=size(z);x0(r+1:n)=0;for k=1:nz t=sym(char(107 48+k);K(k)=t;%取K=k1,k2,.;end x=x0;for k=1:nz x=x+K(k)*z(:,k);%将方程组的通解表示为特解加对应齐次通解形式 end endend,例 利用LU分解求解如下线性方程组的解,求解程序ME_3_10,3.1 线性方程(组)求解,四 Jacobi迭代法求解,迭代法是对任意给定的初始向量,按照某种方法逐步生成近似解序列,是解序列的极限为方程组的解。,设线性方程组:Ax=b,若A非奇异,b不等于0,有唯一解x*,上式变换为:,

14、x=Tx+C,取一初始向量x(0)为上述方程的近似解,x(k+1)=Tx(k)+C,满足条件:,3.1 线性方程(组)求解,此迭代法收敛,x*为原方程组的解。,Jacobi迭代法 工程常用此方法解决稀疏矩阵的迭代问题。,系数矩阵为,3.1 线性方程(组)求解,若A非奇异,方程组Ax=b有唯一解x=A-1b.方程组通过变换为:,令,3.1 线性方程(组)求解,令,有:,3.1 线性方程(组)求解,算法:(1)设定一个初始向量x(0),将初始值带入矩阵方程,得到新向量x(1)。(2)将新向量x(1)带入矩阵方程,得到另一个向量x(2)。(3)对于任意k步迭代,迭代格式为:,如果序列x(k)收敛于x

15、*,则说明x*为方程组的解,Jacobi迭代程序:,3.1 线性方程(组)求解,function x,n=Jacobifun(A,b,x0,eps,var)%Jacobifun为编写的雅可比迭代函数%A为线性方程组的系数矩阵%b为线性方程组的常数向量%x0为迭代初始向量%eps为解的精度%var为迭代步数控制%x为线性方程组的解%n为求出所需精度的解实际的迭代步数if nargin=3 eps=1.0e-6;M=200;elseif nargin3 error returnelseif nargin=5 M=var1;end,3.1 线性方程(组)求解,D=diag(diag(A);L=-tr

16、il(A,-1);U=-triu(A,1);B=D(L+U);f=Db;x=B*x0+f;n=1;%统计迭代次数while norm(x-x0)=eps x0=x;x=B*x0+f;n=n+1;if(n=M)disp(Warning:迭代次数太多,不收敛!);return;endend,3.1 线性方程(组)求解,例【3-5】用Jacobi迭代法计算方程组,设初始值为x0=0,0,0计算程序“ME_31-8.m”X=2.39,2.18,-0.25,3.1 线性方程(组)求解,五 调用Matlab内部函数,5.1 共轭梯度法,通过最优化求解,适用于系数矩阵为方阵m,调用格式如下:,x,flag,

17、relres,iter=bicg(A,b,tol),方程组的解,方程组成功的标志,解的相对误差,迭代的次数,求解器,系数矩阵,误差限,常数向量,3.1 线性方程(组)求解,A=4,1,-1;2,-3,1;1,2,-5;b=12,-2,8;tol=1e-7;x,flag,relres,iter=bicg(A,b,tol),x=2.3929,2.1786-0.2500flag=0 relres=1.1384e-014 iter=3,3.1 线性方程(组)求解,对于方程:,Ax+xAT=-C,可采用Lyapunov方法求解,其调用格式:x=lyap(A,C),5.2 lyap函数,5.3 minre

18、s 函数 利用残差法求解线性方程组,其调用格式为,x,flag,relres,iter=minres(A,b,tol),3.1 线性方程(组)求解,3.2 非线性方程(组)求解,一、对分法二、直接迭代法三、牛顿迭代法四、割线法五、牛顿迭代法解方程组六、符号求解(内部函数)七、非线性方程组的应用,一 对分法,对分法或称二分法是求方程近似解的一种简单直观的方法。设函数f(x)在a,b上连续,且f(a)f(b)0,则f(x)在a,b上至少有一零点,这是微积分中的介值定理,也是使用对分法的前提条件。计算中通过对分区间,逐步缩小区间范围的步骤搜索零点的位置。如果我们所要求解的方程从物理意义上来讲确实存在

19、实根,但又不满足f(a)f(b)0,这时,我们必须通过改变a和b的值来满足二分法的应用条件。,3.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

20、 x3 x1 x1,3.2 非线性方程(组)求解,自编对分法的Matlab程序,function r=compute_bisect(f,a,b,tol)fa=subs(f,a);fb=subs(f,b);fab=subs(f,(a+b)/2);if(fa*fab0)t=(a+b)/2;r=compute_bisect(f,t,b,tol);else if(fa*fab=0)r=(a+b)/2;else if(abs(b-a)=tol)r=(b+3*a)/4;else s=(a+b)/2;r=compute_bisect(f,a,s,tol);end endend,function g=bise

21、ctfun(f,a,b,tol)%bisectfun函数为编写的利用二分法求解非线性方程组的解%f为 方程f(x)=0中的f(x);%a为区间的左端点;%b为区间的右端点;%tol为根的精度;%g为求的根if(nargin=3)tol=1.0e-3;end g=compute_bisect(f,a,b,tol);,3.2 非线性方程(组)求解,例【3-6】利用二分法求x3-3x+1=0 在区间【-1 1】上的一个根,clear all;tol=1e-6;g=bisectfun(x3-3*x+1,-1,1,tol),g=0.3473,3.2 非线性方程(组)求解,二 直接迭代法,对给定的方程f(

22、x)=0,将它转换成等价形式:。给定初值x0,由此来构造迭代序列 k=1,2,,如果迭代收敛,即 有,则就是方程f(x)=0的根。在计算中当 小于给定的精度控制量时,取 为方程的根。对于方程 构造的多种迭代格式,怎样判断构 造的迭代格式是否收敛?收敛是否与迭代的初值有关?根据数学知识,我们可以直接利用以下收敛条件:,3.2 非线性方程(组)求解,2 在a,b上可导,并且存在正数L1,使任意的,有 则在a,b上有唯一的点 满足,称 为 的不动点。而且迭代格式对任意初值均收敛于的不动点,并有下面误差估计式:,1、当 有,要构造满足收敛条件的等价形式一般比较困难。事实上,如果 为f(x)的零点,若能

23、构造等价形式,而,由 的边疆性,一定存在的邻域,其上有,这时若初值 迭代也就收敛了。由此构造收敛迭代格式有两个要素,其一,等价形式 应满足;其二,初值必须取自 的充分小邻域,其大小决定于函数f(x),及做出的等价形式,3.2 非线性方程(组)求解,上述算法的通用程序为“fixptfun.m”,迭代法的算法:1.取初始点x0,最大迭代次数N和精度要求,设k=0;2.计算xk+1=(xk);3.若,则停止计算 4.若k=N,则停止计算,否则k=k+1,转步骤2,3.2 非线性方程(组)求解,function x,k,e=fixptfun(f,x0,tol,max1)X(1)=x0;for k=2:

24、max1 X(k)=feval(f,X(k-1);k,e=abs(X(k)-X(k-1)x=X(k);if(etol)break;end if k=max1 disp(超过最大迭代次数!);endendx=X;,3.2 非线性方程(组)求解,例【3-7】利用迭代法求非线性方程组在x0=0.4的近似解,误差为1e-6,最大迭代次数为30。,采用程序”ME_31_1.m”,计算X=0.8767,迭代次数为12.,3.2 非线性方程(组)求解,三 牛顿迭代法,对方程f(x)=0可构造多种迭代格式,牛顿迭代法是借助于对函数f(x)=0的泰勒展开而得到的一种迭代格式。将f(x)=0在初始值x0做泰勒展开

25、得:,取展开式的线性部分作为的近似值,则有:,设f(x0)K0,类似地,再将f(x)=0在x1作泰勒展开并取其线性部分得到:,3.2 非线性方程(组)求解,得到牛顿法的迭代格式,牛顿法的算法:1.取初始点x0,最大迭代次数N和精度要求,设k=0;2.如果f(x0)=0,则停止计算,否则计算:3.若,则停止计算 4.若k=N,则停止计算,否则k=k+1,转步骤2,3.2 非线性方程(组)求解,function x,e,k,y=newtonfun(f,df,x0,delta,max1)%newtonfun为编写利用牛顿法求解非线性方程组的根的函数%f为非线性函数;%df为f的微商;%x0为初始值%

26、delta为给定允许的误差;%max1为迭代的最大次数%x为用牛顿法求得的非线性方程的近似解%e为x0的误差估计;%k为迭代次数;%y=f(x0)x0,feval(f,x0)for k=1:max1 x1=x0-feval(f,x0)/feval(df,x0);e=abs(x1-x0);x0=x1;x1,e,k,y=feval(f,x1)if(edelta)|(y=0)break;end x1,e,k,y=feval(f,x1)end,牛顿法通用程序:,3.2 非线性方程(组)求解,以 为斜率作过(x0,f(x0)点的直线,即作f(x)在x0的切线方程:令y=0,则在x1处的切线与x轴的交点x

27、1,即:再作f(x)在x1处的切线,得交点x2,逐步逼近方程的根b。如图4-4所示。在区域x0,x0+h的局部“以直代曲”是处理非线性问题的常用手法。在泰勒展开中,截取函数展开的线性部分替代 f(x)。,3.2 非线性方程(组)求解,例【3-8】用牛顿迭代法求解非线性方程的根,x0=1.1,精度为1e-6,最大迭代次数15,采用“ME_31_2.m程序求解,3.2 非线性方程(组)求解,牛顿法优点是收敛速度快,缺点是需要计算导数值,为了避免求导,采用差商,替换公式中的,则有,这种迭代法称为割线法。,四 割线法,3.2 非线性方程(组)求解,function r,n=secantfun(f,a,

28、b,tol)if(nargin=3)tol=1.0e-5;end n=0;err=0.1;fa=subs(sym(f),a);fb=subs(sym(f),b);r=a-(b-a)*fa/(fb-fa);while(errtol)n=n+1;x1=r;fx=subs(sym(f),x1);s=fx*fa;if(s0)r=b-(x1-b)*fb/(fx-fb);else r=a-(x1-a)*fa/(fx-fa);end err=abs(r-x1);endend,%secantfun.m为编写的割线法计算非线性方程的函数%f为非线性方程%a为非线性方程的左区间%b为非线性方程的右区间%tol为误

29、差容限,当误差容限缺省时 默认为10的-5次方%r为求得的非线性方程的近似根%n为迭代的次数,3.2 非线性方程(组)求解,例【3-9】利用割线法求解非线性方程在【-1,2】上的根,精度为1e-6。,计算程序“ME_31_3.m”,结果:r=1.6731 n=18,3.2 非线性方程(组)求解,非线性方程组解法大多来自于非线性方程,只不过计算换成了矩阵,其中最重要的就是雅克比矩阵。非线性方程组一般形式如下:,五 迭代求解非线性方程组,为了方便,记,则,非线性方程组为 F(x)=0,3.2 非线性方程(组)求解,非线性方程组可构造等价形式,设上述函数及其一阶导数在x*区域连续,且满足,(1)初始

30、值x(0)足够接近x*;,(2)对于任意在x*领域的x点,为 F(x)的Jacobi矩阵,即,3.2 非线性方程(组)求解,则迭代序列xk均收敛到x*,5.1 牛顿迭代法,3.2 非线性方程(组)求解,假定x*为方程组的近似解,牛顿迭代法是借助于多元函数的泰勒展开而得到的一种迭代格式。假设它的k次近似解为x(k),其泰勒展开得:,当x(k)接近性x*,可略去 从而得到线性方程,3.2 非线性方程(组)求解,上述方程解x近似误差,实际迭代时,采用如下的方法,3.2 非线性方程(组)求解,牛顿迭代法的算法:,1.取初始点x0,最大迭代次数N和精度要求,设k=0;2.计算F(x(k)和F(x(k))

31、;3.若Jacobi矩阵F(x(k))奇异,则停止计算,否则计算 求得x(k);令 4若,停止计算 4.若k=N,则停止计算,否则k=k+1,转步骤2,3.2 非线性方程(组)求解,function x,n,err=NewtonGroudfun(f,jf,x0,tol,max1)x=x0;y=feval(f,x0);for k=1:max1 j=feval(jf,x0);q=x0-(jy);y=feval(f,q);err=norm(q-x0);x0=q;x=x,x0;n=k;if(errtol)break;endend,%NewtonGroudfun.m为编写利用牛顿迭代法求解非线性方程组的

32、解的函数%f为非线性方程组%jf为非线性函数f的雅可比矩阵函数%x0为给定的初始值%tol为给定的误差精度,默认误差精度为10的-10次方%max1为最大迭代次数%x为求得非线性方程组的一组解%n为迭代的次数%err为误差限,牛顿迭代法通用程序,3.2 非线性方程(组)求解,例【3-10】利用牛顿迭代法计算非线性方程组,x=Columns 1 through 9 1.0000 6.5000 3.7661 2.2250 0.8614 7.7239 4.1889 2.1252-0.1340 1.0000-0.5000-0.3226-1.3747-2.3400-2.3824-2.8273-3.492

33、8-4.3179,求解程序“ME_31_5”,3.2 非线性方程(组)求解,Columns 19 through 21-27.1316-12.8262-5.3980-13.0546-13.9771-14.7458,n=20,err=7.4680,Columns 10 through 18 2.3964-0.1707 2.9042 0.2328 5.2282 2.2019-1.9256 1.0999-55.4854-4.9528-5.7194-6.3291-7.0480-7.5767-8.2138-8.9775-9.6438-11.7934,3.2 非线性方程(组)求解,3.2 非线性方程(组)

34、求解,5.2 最速下降法 是一种最优化的思路,比较古老和基础的方法。,求得是近似解,有n 个误差,为了使整个误差最小,求所有误差的平方和,称为代价函数,给定一个初值,每次迭代后代价函数都小一些:,为步长因子,p(k)不同就构成了不同的下降算法:,该方法就为最速下降法。,最速下降法的算法,(1)给定一组初始解x0,3.2 非线性方程(组)求解,(2),(3)计算,3.2 非线性方程(组)求解,function r,n=FastDownGroudfun(F,x0,h,eps)format long;if nargin=3 eps=1.0e-8;endm=length(x0);x0=transpos

35、e(x0);n=1;tol=1;while toleps fx=subs(F,findsym(F),x0);J=zeros(m,m);for i=1:m x1=x0;x1(i)=x1(i)+h;J(:,i)=(subs(F,findsym(F),x1)-fx)/h;end,%FastDownGroudfun.m为编写利用最速下降算法求非线性方程组的解的函数%F为非线性方程组%x0为给定的初始值%h数值微分增量步%eps为解的精度%r为求得非线性方程组的一组解%n为迭代步数,3.2 非线性方程(组)求解,lamda=fx/sum(diag(transpose(J)*J);r=x0-J*lamda

36、;fr=subs(F,findsym(F),r);tol=dot(fr,fr);x0=r;n=n+1;if(n100000)disp(迭代步数太多,可能不收敛!);return;endendformat short;,3.2 非线性方程(组)求解,六 Matlab内部函数(符号函数),1.内部符号函数fzero()可以求解非线性方程,其调用格式如下:,例【3-11】求解非线性方程在x0=1 时解,求解程序”ME_31_9.m”X=-3.04,3.2 非线性方程(组)求解,2.内部符号函数fsolve()可以求解非线性方程组,采用的是最小二乘法,其调用格式如下:,例【3-11】求解非线性方程组在

37、x0=1 1时解,求解程序”ME_31_6.m”X=0.25 0,3.2 非线性方程(组)求解,3.2 非线性方程(组)求解,七 非线性方程组应用实例一,由状态方程p-V-T关系计算在945.36kPa(9.33atm),300.2K时,容器充2mol氮气,求该容器的体积,已知氮气的范德华常数a=4.17atmL2/mol2,b=0.0371L/mol,在化工生产中,为了求解反应前后各物料的浓度,常常要联立求解一些非线性方程组,这些方程组难以用常规的解析方法求解,一般只能利用数值求解的方法加以求解。下面是在合成氨生产中利用非线性方程组求解方法求解烃类蒸气转化反应前后各物料浓度的实例。例 4.8

38、 在合成氨生产中,烃类蒸气发生以下转化反应:已知进料甲烷为1mol,水蒸汽为5mol,反应后总压P=1atm,反应平衡常数为:试求反应平衡时各组分的浓度。解:设反应平衡时有x摩尔甲烷转化成CO,同时生成的CO中又有y摩尔转化成CO2,则反应平衡时各组分的摩尔数及分压如下:,七 非线性方程组应用实例二,3.2 非线性方程(组)求解,将平衡时各组分的分压表达式代入反应平衡常数KP1及KP2的表达式得:,3.2 非线性方程(组)求解,进行适当变换,两式相除有,变为,再将上式变换,对上式求导,3.2 非线性方程(组)求解,采用牛顿迭代法,30次内发散(ME_31_chem1.m)调用fslove()函数,求解得到(ME_31_chem2.m)x=0.9437 Y=0.6812采用最速下降法(MEchem3)X=0.9437 Y=0.6811,n=4856,3.2 非线性方程(组)求解,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号