精通MATLAB科学计算(第3版)(王正林)12-3r.pdf
《精通MATLAB科学计算(第3版)(王正林)12-3r.pdf》由会员分享,可在线阅读,更多相关《精通MATLAB科学计算(第3版)(王正林)12-3r.pdf(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 章常微分方程求解常微分方程作为微分方程的基本类型之一,在自然界与工程界有很广泛的应用。很多问题的数学表述都可以归结为常微分方程的定解问题。很多偏微分方程问题,也可以化为常微分方程问题来近似求解。MATLAB中提供了求解函数和求解器,可以实现常微分方程的解析求解和数值求解,而且还可以通过编程实现一些常见的数值解法。通过本章学习,读者能够熟练使用MATLAB的求解函数和求解器,以及通过编程进行常微分方程的求解。12.1MATLAB中的求解函数一般微分方程式描述系统内部变量的变化率如何受系统内部变量和外部激励,如输入的影响。当常微分方程式能够解析求解时,可用MATLAB的符号工具箱中的功能找到精
2、确解;在常微分方程难以获得解析解的情况下使用MATLAB的常微分方程求解器solver,可以方便地在数值上求解。12.1.1 符号解函数dsolve一阶常微分方程式(first-order Ordinary Differential Equation,ODE)可写为:y=g(x,y)其中x 为独立变量,而),是 x 的函数。它的解是:y=.f(x,y)该解可以满足)/=f=g(x j),在初始条件.i,(xo)=yo下,可以得到唯一解。MATLAB常微分方程符号解的语法是:dsolve(equation*,1 condition 1)其 中,equation代表常微分方程式即./=g Q y)
3、,且须以Dy代表一阶微分项y ,D2y代表二阶微分项y,condition则为初始条件。函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。第12章常微分方程求解dsolve的调用格式如下:(1)dsolve(equation)给出微分方程的解析解,表示为,的函数;(2)dsolve(equation condition)给出微分方程初值问题的解,表示为/的函数;(3)dsolveCequation,vf)给出微分方程的解析解,表示为v 的函数;(4 )dsolve(*equation,condition*,V)给出微分方程初值问题的解,表示
4、为v 的函数。【例 12-1】常微分方程符号解求解实例1。计算微分方程或+3孙=配-的通解。dx dsolve(Dy+3*x*y=x*exp(-xA2)1)输出为:ans=(l/3*exp(-x*(x-3*-)+C1)*exp(-3*x*t)t)+C1)*士 3*、&)由于系统默认的自变量是/,显然系统把x 当作常数,把y 当作/的函数求解.输入命令:dsolve(Dy+3*x*y=x*exp(-xA2)z*x)输出为:ans=exp(-x、)+exp(-3/2*xA2)*C1exp(-xA2)+oxp(3/2*M 2)*C1_3 2可知通解为y=*G,其中G 为常数。【例 12-2】常微分方
5、程符号解求解实例2。计算微分方程中+2 y-/=0 在初始条件川”1=2e下的特解。dsolve(*x*Dy+2*y-exp(x)=0,*y(1)=2*exp(1),*x)输出为:ans=(xp(x)*x-exp(x)+2*xxp(1)/x八2(oxp(x)*x-o xp (x)+2*派断(44-)-笠可知特解为y=+2 e。X【例 12-3】常微分方程符号解求解实例3。求炉+2丁+产=0 的通解。dsolve(*D2y+2*Dy+exp(x)=0,1x*)Y 281精通MATLAB科学计算(第2忡-输出为:ans=-l/3*exp(x)-l/2*exp(-2*x)*C1+C2可知通解为,-L
6、 N*。?,其中G,C2为常数。3 2282 第12章常微分方程求解12.1.2 求解器 solver在求常微分方程数值解方面,MATLAB具有丰富的函数,将其统称为solver,其一般格式为:Tf Y=solver(odefun,tspan,yO)该函数表示在区间tspan=Do,5上,用初始条件川求解显式常微分方程V=odefun为显式常微分方程V=f(t,y)中的/(f,y),tspan为求解区间,要获得问题在其他指定点2上的解,则令他劭=汨/1,/2,0(要 求 单 调),y 0 为初始条件。solver 为命令 ode45、ode23、odel 13,ode 15s,ode23s、o
7、de23t、ode23tb 之 一,其中ode45、ode23、odel 13属于非刚性ODE类 型,这些命令的特点如表12-1所 示;ode 15s,ode23s、ode23t、ode23tb属于刚性ODE类 型,这些命令的特点如表12-2所示。表 1 2-1 非刚性O D E 求解命令求解器s o l v e r功 能说 明o d e 45一步算法;4,5 阶龙格库塔方程;累计截断误差达(&03大部分场合的首选算法o d e 23一步算法;2,3 阶龙格-库塔方程;累计截断误差达(加个使用于精度较低的情形o d e l 13多步法;Ad a m s 算 法;高低精度均可到IO。I。/,计算
8、时间比o d e 45短表 1 2-2 刚性O D E 求解命令求解器s o l v e r功 能说 明o d e 23t梯形算法适度刚性情形o d e 15s多步法;G e a r s 反向数值微分;精度中等若 o d e 45失效时,可尝试使用o d e 23s一步法;2 阶 Ro s e b r o c k 算 法;低精度当精度较低时,计算时间比o d e l 5s 短o d e 23t b梯形算法;低精度当精度较低时,计算时间比o d e l 5s 短函数ode45与 ode23是常使用的求解方法,函数ode45的使用与ode23完全一样。两个函数的差别在于必须与所用的内部算法相关。两
9、个函数都运用了基本的龙格-库塔(Runge-Kutta)数值积分法的变形。ode23运用一 组 合 的 2/3阶龙格-库塔-芬尔格(Runge-Kutta-Fehlerg)算 法,而 ode45运用组合的4/5阶龙格-库塔-芬尔格算法。通 常,ode45可取较多的时间步。所 以,要保持与ode23相同误差时,在访和夕之间可取较少的时间步。然 而,在同一时间内,ode23每时间步至少调用3 次,而 ode45每时间步至少调用6 次。正如使用高阶多项式内插常常得不到最好的结果一样,ode45也不总是比。de23好。如果。de45产生的结果,对作图间隔太大,则必须在更细的时间区间内对数据进行内插,比
10、如用函数interpl。这个附加时间点会使ode23更有效。作为一条普遍规则,在所计算的1 283精通MATLAB科学计算(第2版i-导数中,如有重复的不连续点,为保持精度致使高阶算法减少时间步长,这时低阶算法更有效。采用求解器solver求解ODE的基本过程如下:(1 )根据问题所属学科中的规律、定律、公 式,用微分方程与初始条件进行描述。F(y,y,.yn-t)=0y(0)=Jo,y(O)=i,.yn-l(0)=y-写为向量的形式为y=y;MD;M2),丁(m一1),与加可以不等。(2)运用数学中的变量替换:为=y(n-l),为/可(n2),.,yi=y=y,把高阶(大于2阶)的方程(组)
11、写成一阶微分方程组:%1y=力”,y)力(“)7相应的初始条件为:(3)根 据(1 )与(2)的结果,编写能计算导数的M-函数文件odefileo(4)将文件odefile与初始条件传递给求解器solver中的一个,运行后就可得到ODE在指定时间区间上的解列向量y(其中包含j,及不同阶的导数【例 12-4 求解器solver应用实例。采用ode45求解描述某非刚性体的运动方程的”=y2y3 伊(o)=o微分方程:yi=一川3,其初始条件为了 2(。)=1 ,并画出解的图形。y 3=0.5112 乃(。)=1解:编写函数文件rigid.m:function dy=rigid(tz y)dy=ze
12、ros(3,1);%行向量dy(1)=y(2)*y(3);dy(2)=-y(l)*y(3);dy(3)=-0.51*y(l)*y(2);建立文件exl204.m,如下所示:284 第12章常微分方程求解%exl204.moptions=odeset(*RelTol*zle-4,1AbsTol1,le-4 le-4 le-5);T,Y=ode45(rigid,0 12,0 1 1,options);plot(TZY(:Z1),,T,Y(:,2)J-1T,Y(:,3),1 J)legend(yl y2 y3)运行程序,输出的图形结果为图12-1所示。12.2欧拉法图 1 2-1 非刚性体运动的微分
13、方程图12.2.1简单欧拉法欧拉法(Euler)是简单有效的常微分方程数值解法,欧拉法有多种形式的算法,其中简单欧拉法是一种单步递推算法。1.基本原理对于一个简单的一阶微分方程:y=f(x,y)其中初始值为:y(x0)=y0欧拉方法等同于将函数微分转换为数值差分,如下式,y(x)J.+h故原方程变形为:yn+=y+hf(x,l,y)i 285精通MATLAB科学计算(第2版i-2.算法的程序实现在M ATLAB中编程实现的欧拉法函数为:MyEulero功 能:以欧拉法求解常微分方程。调用格式:outx.outy=MyEuler(fun,xO,xt,jX),PointNum)0其 中,fun为函
14、数名;xO为自变量区间初值;“为自变量区间终值;可为函数在xO处 的 值;PointNum为自变量在M),xf上所取的点数;outx为输出自变量区间上所取点的x值;outy为对应点上的函数值。欧拉法的M ATLAB程序代码如下:f u n c t i o n o u t x,o u t y=My Eu l e r(f u n,x Oz x t,y O,P o i n t Nu m)金用前向差分的欧拉方法解微分方程y =f u n率函数 f (x,y):f u n务自变量的初值和终值:x Ozx t%y 0表示函数在x O处的 值,输入初值为列向量形式 自变量在 x O,x t 上取的点数:P
15、o i n t Nu m%o u t x:所取的点的x值%o u t y:对应点上的函数值i f n a r g i n 5|P o i n t Nu m=0P o i n t Nu m=100;e n di f n a r g i n+i=yn+5/,y”)+/(x+i,yn+)2.算法的程序实现在 MATLAB中编程实现的改进的欧拉法函数为:MyEulerProo功 能:用改进的欧拉法求解常微分方程。调用格式:Xout,Yout=MyEulerPro(fun,xO,xt,PointNumber)o其 中,ftin为函数名;M)为自变量区间初值;X,为自变量区间终值;川为函数在xO处 的 值
16、;288 第 1 2 章常微分方程求解P o i n t Nu m b e r 为自变量在 x O,词上所取的点数;Xo u t 为输出自变量区间上所取点的x值;Yo u t 为对应点上的函数值。改进的欧拉法的M A T L A B 程序代码如下:function Xout,Yout=MyEulerPro(fun,xO,xtz yO,PointNumber)%用改进的欧拉法解微分方程y,=fun%函数 f(x,y):fun当自变量的初值和终值:xO,xt%y0表示函数在xO处的 值,输入初值为列向量形式许自变量在 xO,xt 上取的点数:PointNumber%Xout:所取的点的x 值%Yo
17、ut:对应点上的函数值if nargin5 I PointNumer=0为 100PointNumer=100;endif nargin4%y0 默认值为 0y0=0;endh=(xt-xO)/PointNumber;x=x0+0:PointNumber *h;y(lr:)=y0(:);for i=l:PointNumberfl=h*feval(fun,x(i),y(i,:告如果函数仅输入4 个参数值,则 PointNumer默认值为计算所取的两离散点之间的距离%表示出离散的自变量x常迭代计算过程);fl=fl(:)f2=h*feval(fun,x(i+1)zy(i,:)+fl);f2=f2(
18、:)y(i+l,:)=y(i,:)+1/2*(fl+f2);endXout=x;Yout=y;3.实例分析【例 12-6】改进的欧拉法求解常微分方程应用实例。利用改进的欧拉法求常微分方程:y=s i n x +yy(x o)=l,x o =0即 对【例 12-4用改进的欧拉法求解,比较两种解法的结果,并画出解的图形。解:编写 M A T L A B 程序 e x l 206.m :function exl206()289精通MATLAB科 学 计 算(第2蝌图 1 2-3 改进的欧拉法解、欧拉解、精确解的对比图和 e x l 206比较改进的欧拉法,简单欧拉方法以及微分方程符号解 x 3,y
19、3=My Eu l e r P r o(*m y f u n 01,0,2*p i,1,128);x,y l =My Eu l e r (*m y f u n 01*,0,2*p i,1,128);超欧拉法所得的解y=d s o l v e (Dy=y+s i n (t),y (0)=11);超该常微分方程的符号解f o r k=l:129t(k)=x(k);y 2(k)=s u b s(y,t(k);招求其对应点的离散解e n dp l o t (x,y l J -b l x 3,y 3,Pg,x,y 2 J *r,)l e g e n d (,简单欧拉法解,J 改进欧拉解,J 符号解,)运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精通 MATLAB 科学 计算 王正林 12
限制150内