MATLAB7课件(常微分方程数值解)-14.7.12-3_第1页
MATLAB7课件(常微分方程数值解)-14.7.12-3_第2页
MATLAB7课件(常微分方程数值解)-14.7.12-3_第3页
MATLAB7课件(常微分方程数值解)-14.7.12-3_第4页
MATLAB7课件(常微分方程数值解)-14.7.12-3_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、常微分方程数值解化工学院软件应用教科组化工学院软件应用教科组2006-10本章知识要点 数值计算 常微分方程初值问题 常微分方程边值问题 MATLAB 微分方程求解常微分方程的相关函数 ode45 ode23 bvp4c微分方程在化工模型中的应用间歇反应器的计算活塞流反应器的计算全混流反应器的动态模拟定态一维热传导问题逆流壁冷式固定床反应器一维模型固定床反应器的分散模型Matlab常微分方程求解问题分类初值问题: 定解附加条件在自变量的一端 一般形式为: 初值问题的数值解法一般采用步进法,如Runge-Kutta法边值问题:在自变量两端均给定附加条件一般形式:边值问题可能有解、也可能无解,可能

2、有唯一解、也可能有无数解边值问题有3种基本解法 迭加法 打靶法 松弛法0)(),(yayyxfy21)(,)(),(ybyyayyxfyMatlab求解常微分方程初值问题方法将待求解转化为标准形式,并“翻译”成Matlab可以理解的语言,即编写odefile文件选择合适的解算指令求解问题根据求解问题的要求,设置解算指令的调用格式Matlab求解初值问题函数指令含义指令含义解算ode23普通2-3阶法解ODEodefileODE文件格式ode45普通4-5阶法解ODE选项odeset创建、更改ODE选项的设置ode113普通变阶法解ODEodeget读取ODE选项的设置ode23t解适度刚性OD

3、E输出odeplotODE的输出时间序列图ode15s变阶法解刚性ODEodephas2ODE的二维相平面图ode23s低阶法解刚性ODEodephas3ODE的三维相空间图ode23tb低阶法解刚性ODEodeprint在Matlab指令窗显示结果odefileZ 所谓的odefile实际上是一个Matlab函数文件,一般作为整个求解程序的一个子函数,表示ode求解问题Z Matlab提供了odefile的模板,采用type odefile命令显示其详细内容,然后将其复制到脚本编辑窗口,在合适的位置填入所需内容Z 一般而言,对于程序通用性要求不高的场合,只需将原有模型写成标准形式,然后“翻译

4、”成Matlab语言即可odefile的编写规定1.ode文件的最简单格式必须有一个自变量t和函数y作为输入变量,一个y的导函数作为输出变量。其中自变量t不论在ode文件中是否使用都必须作为第一输入变量,y则必须作为第二输入变量,位置不能颠倒。2.可以向ode文件中传递参数,数目不受限制odefile的编写function f=fun(x,y) f=y-2*x/y; 求解初值问题: 1)0(2yyxyy) 10( x自变量在前,因变量在后ode输入函数输出变量为因变量导数的表达式0)(),(yayyxfy初值问题: 1)0(2yyyy) 10( xfunction f=fun(x,y) f=y

5、y2; 常微分方程组odefile的编写1000 , 1)0(, 0)0()1 (300010)1 (0001. 0)1 ()1 (04. 02122142221211xyyyyyyyyyy常微分方程组与单个常微分方程求解方法相同,只需在编写odefile时将整个方程组作为一个向量输出。function f=fun(x,y)dy1dx = 0.04*(1-y(1)-(1-y(2).*y(1)+0.0001*(1-y(2).2; dy2dx = -1e4*dy1dx + 3000*(1-y(2).2;f = dy1dx; dy2dx;高阶微分方程高阶微分方程odefile的编写的编写本例的难度:

6、teytbytayt2cos)() )(2)2cos()(,2cos)(2ttbteetatt求解: y(0)=0,y(0)=1,方程系数非线性可在odefile中定义方程高阶,非标准形式方程变形:令y1y;y2y则原方程等价于:tebyayyyyt2cos122221function f=fun(t,y)a=-exp(-t)+cos(2*pi*t)*exp(-2*t);b=cos(2*pi*t);f=y(2) -a*y(2)2-b*y(1)+exp(t)*b;解算指令的使用方法解算指令的使用方法调用格式:1. T,Y=ode45(fun, TSPAN,Y0)2. T,Y=ode45(fun,

7、 TSPAN,Y0,options)3. T,Y= ode45(fun, TSPAN,Y0,options,P1,P2,)4. T,Y,TE,YE,IE= ode45(fun, TSPAN,Y0,options,P1,P2,) 说明:v 输出变量T为返回时间列向量;解矩阵Y的每一行对应于T的一个元素,列数与求解变量数相等。v fun为函数句柄,为根据待求解的ODE方程所编写的ode文件(odefile);v TSPANT0 TFINAL是微分系统yF(t,y)的积分区间;Y0为初始条件v options用于设置一些可选的参数值,缺省时,相对于第一种调用格式。options中可以设置的参数参见o

8、desetv P1,P2,的作用是传递附加参数P1,P2,到ode文件。当options缺省时,应在相应位置保留,以便正确传递参数。常微分方程初值问题解算指令比较常微分方程初值问题解算指令比较解算指令算法精度ode45四五阶Runge-Kutta法较高ode23二三阶Runge-Kutta法低ode113可变阶Adams-Bashforth-Moulton法ode15s基于数值差分的可变阶方法(BDFs,Gear)低中ode23s二阶改进的Rosenbrock法低ode23t使用梯形规则适中ode23tbTR-BDF2(隐式Runge-Kutta法)低ode解算指令的选择(1)求解初值问题:

9、1)0(2yyxyy) 10( x比较ode45和ode23的求解精度和速度 1.根据常微分方程要求的求解精度与速度要求 ode45和ode23的比较function Cha5demo1%Comparison of results obtained from ode45 and ode23 solverformat longy0=1;tic,x1,y1=ode45(fun,0,1,y0);t_ode45=toctic,x2,y2=ode23(fun,0,1,y0);t_ode23=tocplot(x1,y1,b-,x2,y2,m-.),xlabel(x),ylabel(y),legend(OD

10、E45,ODE23,location,Northwest) disp(Comparative Results at x=1:); fprintf(nODE45ttt y=%.8fnODE23ttt y=%.8fnPrecisive Result . =%.8fn,y1(end),y2(end),1.7320508) %-function f=fun(x,y) f=y-2*x/y;ode解算指令的选择(2)2.根据常微分方程组是否为刚性方程 如果系数矩阵A的特征值连乘积小于零,且绝对值最大和最小的特征值之比(刚性比)很大,则称此类方程为刚性方程 1)0(, 2)0(10099.9901. 021

11、22211yyyyyyy00)()(yxyxbAyy 刚性方程在化学工程和自动控制领域的模型中比较常见。刚性比:100/0.0110000 ode解算指令的选择(2) 刚性方程的物理意义:常微分方程组所描述的物理化学变化过程中包含了多个子过程,其变化速度相差非常大的数量级,于是常微分方程组含有快变和慢变分量。 常微分方程组数值积分的稳定步长受模值最大的特征值控制,即受快变量分量约束,特征值大则允许步长小;而过程趋于稳定的时间又由模值最小的特征值控制,特征值小则积分到稳定的时间则长。 Matlab提供了不同种类的刚性方程求解指令:ode15s ode23s ode23t ode23tb,可根据实

12、际情况选用function Cha5demo3figureode23s(fun,0,100,0;1)hold on,ode45(fun,0,100,0;1)%-function f=fun(x,y)dy1dx = 0.04*(1-y(1)-(1-y(2).*y(1)+0.0001*(1-y(2).2; dy2dx = -1e4*dy1dx + 3000*(1-y(2).2;f = dy1dx; dy2dx;刚性常微分方程组求解解算指令的输出控制1. T,Y= ode45(fun, TSPAN,Y0,options,P1,P2,)2. sol=ode45(fun,TSPAN,Y0)将解输出指结构

13、体sol中;SXINT = deval(SOL,XINT)用于计算解在XINT处的值,XINT必须位于区间SOL.x(1) SOL.x(end)内。3. 在无输出变量时,将调用默认的odeplot输出解的图形。4. 除了以odeplot形式输出外,还可以以odephas2,和odephas3的形式输出解向量的二维和三维相平面图。5. 采用以下语句options=odeset(outputfcn,odephas2)可以将输出方法改变为平面输出6. odeprint输出求解过程每一步的解解算指令的options选项1. RelTol相对误差,它应用于解向量的所有分量。在每一步积分过程中,第i个分量

14、误差e(i)满足:e(i)=max(RelTol*abs(y(i),AbsTol(i)。2. AbsTol绝对误差,若是实数,则应用于解向量的所有分量,若是向量,则它的每一个元素应用于对应位置解向量元素。3. OutputFcn可调用的输出函数名。每一步计算完后,这个函数将被调用输出结果,可以选择的值为:odeplot,odephas2,odephas3,odeprint。4. OutputSel输出序列选择。指定解向量的哪个分量被传递给OutputFcn。5. MaxSetp步长上界,缺省值为求解区间的1/10。6. InitialStep初始步长,缺省时自动设置。7. 采用odeset改变

15、原有选项的值在间歇反应器中进行液相反应制备产物B,反应网络如图5-1所示。反应可在180260的温度范围内进行,反应物X大量过剩,而C, D和E为副产物。各反应均为一级动力学关系:rkC,式中 间歇反应器中串联平行复杂反应系统已知参数:k015.780521010,k023.923171012,k031.64254104,k046.264108,Ea1=124670,Ea2=150386,Ea3=77954,Ea4=111528。初始浓度:CA=1kmol/m3,其余物质浓度为0。已知是产物B收率最大的最优反应温度为224.6试计算1)在最优反应温度下各组分浓度随时间的动态变化;2)最优反应时

16、间;3)输出产物D对反应物浓度A的关系图。 RTEaekk0间歇反应器中串联平行复杂反应系统数学模型 AACkkdtdC)(21BABCkCkdtdC31CACCkCkdtdC42DBDCkCkdtdC53DCECkCkdtdC54间歇反应器中串联平行复杂反应系统function Cha5demo4T = 224.6 + 273.15; R = 8.31434; k0 = 5.78052E+10 3.92317E+12 1.64254E+4 6.264E+8;Ea = 124670 150386 77954 111528;% Initial concentration:C0(i), kmol/

17、m3C0 = 1 0 0 0 0; tspan = 0 1e4;opt=odeset(reltol,1e-4,outputfcn,odephas2,outputsel,1;4)t,C = ode45(MassEquations, tspan, C0,opt,k0,Ea,R,T)% plotplot(t,C(:,1),r-,t,C(:,2),k:,t,C(:,3),b-.,t,C(:,4),k-);xlabel(Time (s);ylabel(Concentration (kmol/m3);legend(A,B,C,D)CBmax = max(C(:,2); % CBmaxyBmax = CBm

18、ax/C0(1) % yBmax: index = find(C(:,2)=CBmax);t_opt = t(index) % t_opt: the optimum batch time, s% -function dCdt = MassEquations(t,C,k0,Ea,R,T)% Reaction rate constants, 1/sk = k0.*exp(-Ea/(R*T); k(5) = 2.16667E-04; % Reaction rates, kmoles/m3 srA = -(k(1)+k(2)*C(1); rB = k(1)*C(1)-k(3)*C(2);rC = k(

19、2)*C(1)-k(4)*C(3); rD = k(3)*C(2)-k(5)*C(4);rE = k(4)*C(3)+k(5)*C(4);% Mass balancesdCdt = rA; rB; rC; rD; rE; Matlab求解边值问题方法:bvp4c函数1. 把待解的问题转化为标准边值问题 2. 因为边值问题可以多解,所以需要为期望解指定一个初始猜测解。该猜测解网(Mesh)包括区间a, b内的一组网点(Mesh points)和网点上的解S(x) 3. 根据原微分方程构造残差函数4. 利用原微分方程和边界条件,借助迭代不断产生新的S(x),使残差不断减小,从而获得满足精度要求的解

20、 0)(),(),(byaygyxfy)(,()()(xSxfxSxrMatlab求解边值问题求解边值问题的基本指令的基本指令solinitbvpinit(x,v,parameters)生成bvp4c调用指令所必须的“解猜测网”solbvp4c(odefun,bcfun,solinit,options,p1,p2,)给出微分方程边值问题的近似解 sxintdeval(sol,xint)计算微分方程积分区间内任何一点的解值初始解生成函数:初始解生成函数:bvpinit()solinitbvpinit(x,v,parameters) x指定边界区间a,b上的初始网络,通常是等距排列的(1M)一维数

21、组。注意:使x(1)=a,x(end)=b;格点要单调排列。 v是对解的初始猜测 solinit(可以取别的任意名)是“解猜测网(Mesh)”。它是一个结构体,带如下两个域:solinit.x是表示初始网格有序节点的(1M)一维数组,并且solinit.x(1)一定是a,solinit.x(end)一定是b。M不宜取得太大,10数量级左右即可。solinit.y是表示网点上微分方程解的猜测值的(NM)二维数组。solinit.y(:,i)表示节点solinit.x(i)处的解的猜测值。solbvp4c(odefun,bcfun,solinit,options,p1,p2,)输入参数: odef

22、un是计算导数的M函数文件。该函数的基本形式为:dydxodefun(x,y,parameters,p1,p2,),在此,自变量x是标量,y,dydx是列向量。其基本形式与初值问题的odefile形式相同 bcfun是计算边界条件下残数的M函数文件。其基本形式为:resbcfun(ya,yb,parameters,p1,p2,),文件输入宗量ya,yb是边界条件列向量,分别代表y在a和b处的值。res是边界条件满足时的残数列向量。注意:例如odefun函数的输入宗量中包含若干“未知”和“已知”参数,那么不管在边界条件计算中是否用到,它们都应作为bcfun的输入宗量。 输入宗量options是用

23、来改变bvp4c算法的控制参数的。在最基本用法中,它可以缺省,此时一般可以获得比较满意的边值问题解。如需更改可采用bvpset函数,使用方法同odeset函数。 输入宗量p1,p2等表示希望向被解微分方程传递的已知参数。如果无须向微分方程传递参数,它们可以缺省。边值问题求解指令:bvp4c ()输出参数:输出变量sol是一个结构体usol.x是指令bvp4c所采用的网格节点;usol.y是y(x)在sol.x网点上的近似解值;usol.yp是y(x)在sol.x网点上的近似解值;usol.parameters是微分方程所包含的未知参数的近似解值。当被解微分方程包含未知参数时,该域存在。边值问题

24、求解指令:bvp4c ()边值问题的求解边值问题的求解原方程组等价于以下标准形式的方程组:function Cha5demo5solinit=bvpinit(linspace(0,1,10),1 0);sol=bvp4c(ODEfun,BCfun,solinit);x=0:0.05:0.5;y=deval(sol,x);yP=0 -0.41286057 -0.729740656. -0.95385538 -1.08743325 -1.13181116;xP=0:0.1:0.5;plot(xP,yP,o,x,y(1,:),r-),legend(Analytical Solution,Numeri

25、cal Solution)% - function dydx=ODEfun(x,y)dydx=y(2);y(1)+10;% -function bc=BCfun(ya,yb)bc=ya(1);yb(1);0) 1 ()0(10yyyy求解两点边值问题: ,121yyyy令: 101221yyyy0) 1 (, 0)0(11yy边界条件为: 边值问题的求解边值问题的求解原方程组等价于以下标准形式的方程组:function Cha5demo6solinit = bvpinit(linspace(0,1,10),0 1);sol = bvp4c(ODEfun,BCfun,solinit);x = 0

26、:0.1:1;y = deval(sol,x);yP=1 1.0743 1.1695 1.2869 1.4284. 1.5965 1.7947 2.0274 2.3004 2.6214 3;xP=0:0.1:1.0;plot(xP,yP,o,x,y(1,:),r-)legend(Analytical Solution,Numerical Solution,location,Northwest)legend boxoff% -function dydx = ODEfun(x,y)dydx = y(2); (1+x2)*y(1)+1;% -function bc = BCfun(ya,yb)bc

27、= ya(1)-1;yb(1)-3;求解: ,121yyyy令: 边界条件为: 3) 1 (, 1)0(1)1 (2yyyxy1)1 (12221yxyyy03) 1 (01)0(11yy边值问题的求解边值问题的求解function Cha5demo7c=1;solinit = bvpinit(linspace(0,4,10),1;1);sol = bvp4c(ODEfun,BCfun,solinit,c);x = 0:0.1:4;y = deval(sol,x);plot(x,y(1,:),b-,sol.x,sol.y(1,:),ro)legend(解曲线,初始网格点解)% -functio

28、n dydx = ODEfun(x,y,c)dydx = y(2); -c*abs(y(1);% -function bc = BCfun(ya,yb)bc = ya(1);yb(1)+2;求解: ,121zzzz令: 0 zcz2)4(, 0)0(zzc1 此程序有什么错误?边值问题的求解边值问题的求解function Cha5demo8lmb=15;solinit = bvpinit(linspace(0,pi,10),1;1,lmb);opts=bvpset(Stats,on);sol = bvp4c(ODEfun,BCfun,solinit,opts);lambda=sol.param

29、etersx = 0:pi/60:pi;y = deval(sol,x);plot(x,y(1,:),b-,sol.x,sol.y(1,:),ro)legend(解曲线,初始网格点解)% -function dydx = ODEfun(x,y,lmb)q=5;dydx = y(2); -(lmb-2*q*cos(2*x)*y(1);% -function bc = BCfun(ya,yb,lmb)bc = ya(1)-1;ya(2);yb(2);求解: 边界条件: 本例中,微分方程与参数的数值有关。一般而言,对于任意的值,该问题无解,但对于特殊的值(特征值),它存在一个解,这也称为微分方程的特

30、征值问题。对于此问题,可在bvpinit中提供参数的猜测值,然后重复求解BVP得到所需的参数,返回参数为sol.parameters 0)2cos2( zxqz15q0)(, 0)0(, 1)0(zzz边值问题的求解边值问题的求解function Cha5demo9solinit = bvpinit(linspace(0,1,5),ex1init);options = bvpset(Stats,on,RelTol,1e-5);sol = bvp4c(ODEfun,BCfun,solinit,options);x = sol.x;y = sol.y;.% -function dydx = ODE

31、fun(x,y)dydx = 0.5*y(1)*(y(3) - y(1)/y(2) -0.5*(y(3) - y(1) (0.9 - 1000*(y(3) - y(5) - 0.5*y(3)*(y(3) - y(1)/y(4) 0.5*(y(3) - y(1) 100*(y(3) - y(5) ;%-function bc = BCfun(ya,yb)bc = ya(1) - 1 ya(2) - 1 ya(3) - 1 ya(4) + 10 yb(3) - yb(5);%- function v = ex1init(x)v = 1;1; -4.5*x2+8.91*x+1;-10; -4.5*x

32、2+9*x+0.91 ;求解: 边界条件: )(100)(5 . 0/)(5 . 0)(10009 . 0()(5 . 0/ )(5 . 0wyyuwzzuwwywwuwvvuwuu) 1 () 1 (,10)0(, 1)0()0()0(ywzwvu初始猜测解为: 91. 095 . 4)(,10)(, 191. 85 . 4)(, 1)(, 1)(22xxxyxzxxxwxvxu边值问题的求解边值问题的求解function Cha5demo11infinity = 6;solinit = bvpinit(linspace(0,infinity,5),0 0 1);options = bvps

33、et(stats,on);sol = bvp4c(ex5ode,ex5bc,solinit,options);eta = sol.x;f = sol.y;fprintf(n);fprintf(Cebeci & Keller report f(0) = 0.92768.n)fprintf(Value computed here is f(0) = %7.5f.n,f(3,1)clf resetplot(eta,f(2,:);axis(0 infinity 0 1.4);title(Falkner-Skan equation, positive wall shear, beta = 0.5.)xlabel(eta),ylabel(df/deta),shg% -function dfdeta = ex5ode(eta,f)beta = 0.5;dfdeta = f(2); f(3); -f(1)*f(3) - beta*(1 - f(2)2) ;% -function res = ex5bc(f0,finf)res = f0(1); f0(2); finf(2) - 1;求解: 边界条件: 0) (1 ( 2ffff0.5 1)( , 0)0( , 0)0(fff如果取1,计算结果如何常微分方程边值问题的应用已

温馨提示

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

评论

0/150

提交评论