MATLAB解微分方程.docx

上传人:飞****2 文档编号:54341864 上传时间:2022-10-28 格式:DOCX 页数:11 大小:228.40KB
返回 下载 相关 举报
MATLAB解微分方程.docx_第1页
第1页 / 共11页
MATLAB解微分方程.docx_第2页
第2页 / 共11页
点击查看更多>>
资源描述

《MATLAB解微分方程.docx》由会员分享,可在线阅读,更多相关《MATLAB解微分方程.docx(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、MATLAB解微分方程用matlab时间也不短了,可是一直没有接触过微分方程。这次看看书,学习学习,记点儿笔记。1.可以解析求解的微分方程。dsolve()调用格式为:y=dsolve(f1,f2,.,fmO;y=dsolve(f1,f2,.,fm,x);如下面的例子,求解了微分方程syms t;u=exp(-5*t)*cos(2*t-1)+5;uu=5*diff(u,t,2)+4*diff(u,t)+2*u;syms t y;y=dsolve(D4y+10*D3y+35*D2y+50*Dy+24*y=87*exp(-5*t)*cos(2*t-1)+92*exp(-5*t)*sin(2*t-1

2、)+10)yc=latex(y)将yc的内容copy到latex中编译,得到结果。关于Matlab的微分方程,直到今天才更新第2篇,实在是很惭愧的事因为原因都在于太懒惰,而不是其他的什么。在上一篇中,我们使用dsolve可以解决一部分能够解析求解的微分方程、微分方程组,但是对于大多数微分方程(组)而言不能得到解析解,这时数值求解也就是没有办法的办法了,好在数值解也有很多的用处。数值分析方法中讲解了一些Eular法、 Runge-Kutta 法等一些方法,在matlab中内置的ode求解器可以实现不同求解方法的相同格式的调用,而不必太关心matlab究竟是用什么算法完成的。这一回我们来说明ode

3、45求解器的使用方法。1.ode45求解的上手例子:求解方程组Dx=y+x(1-x2-y2);Dy=-x+y*(1-x2-y2)初值x=0.1;y=0.2;先说明一下最常用的ode45调用方式,和相应的函数文件定义格式。t,x=ode45(odefun,tspan,x0);其中,Fun就是导函数,tspan为求解的时间区间(或时间序列,如果采用时间序列,则必须单调),x0为初值。这时,函数文件可以采用如下方式定义function dx=odefun(t,x)对于上面的小例子,可以用如下的程序求解。function jixianhuanclear;clcx0=0.1;0.2;t,x=ode45(

4、jxhdot,0,100,x0);plot(x(:,1),x(:,2)function dx=jxhdot(t,x)dx=x(2)+x(1).*(1-x(1).2-x(2).2);-x(1)+x(2).*(1-x(1).2-x(2).2);2.终值问题tspan可以是递增序列,也可以为递减序列,若为递减则可求解终值问题。t,x=ode45(zhongzhiode,3,0,1;0;2);plot(t,x)function dx=zhongzhiode(t,x)dx=2*x(2)2-2;-x(1)+2*x(2)*x(3)-1;-2*x(2)+2*x(3)2-4;结果如下3.odesetoption

5、s = odeset(name1,value1,name2,value2,.)t,x=solver(fun,tspan,x0,options)通过odeset设置options第一,通过求解选项的设置可以改善求解精度,使得原本可能不收敛的问题收敛。options=odeset(RelTol,1e-10);第二,求解形如M(t,x)x=f(t,x)的方程。例如,方程x=-0.2x+yz+0.3xyy=2xy-5yz-2y2x+y+z-2=0可以变形为100x -0.2x+yz+0.3xy010y=2xy-5yz-2y2001z x+y+z-2这样就可以用如下的代码求解该方程function my

6、daeM=1 0 0;0 1 0;0 0 0;options=odeset(Mass,M);x0=1.6,0.3,0.1;t,x=ode15s(daedot,0,1.5,x0,options);plot(t,x)function dx=daedot(t,x)dx=-0.2*x(1)+x(2)*x(3)+0.3*x(1)*x(2);2*x(1)*x(2)-5*x(2)*x(3)-2*x(2)*x(2);x(1)+x(2)+x(3)-2;4.带附加参数的ode45有时我们需要研究微分方程组中的参数对于解的影响,这时采用带有参数的ode45求解会使求解、配合循环使用,可以使得求解的过程更加简捷。使用

7、方法:只需将附加参数放在options的后面就可以传递给odefun了。看下面的例子。function Rosslerclear;clca=0.2,0.2;b=0.2,0.5;c=5.7,10;x0=0 0 0;for jj=1:2t,x=ode45(myRossler,0,100,x0,a(jj),b(jj),c(jj);figure;plot3(x(:,1),x(:,2),x(:,3);grid on;endfunction dx=myRossler(t,x,a,b,c)dx=-x(2)-x(3);x(1)+a*x(2);b+(x(1)-c)*x(3);5. 刚性方程的求解刚性方程就是指各

8、个自变量的变化率差异很大,会造成通常的求解方法失效。这是matlab中自带的一个例子,使用ode15s求解,如果用ode45求解就会出现错误。function myode15studyt,Y = ode15s(vdp1000,0 3000,2 0);plot(T,Y(:,1),-o)figure;plot(Y(:,1),Y(:,2)function dy = vdp1000(t,y)dy = zeros(2,1);dy(1) = y(2);dy(2) = 1000*(1 - y(1)2)*y(2) - y(1);6.高阶微分方程的求解通常的方法是进行变量替换,将原方程降阶,转换成更多变量的一阶

9、方程组进行求解。在这个例子里我们求解一个动力学系统里最常见的一个运动方程,其中f=sin(t)function myhighoderclear;clcx0=zeros(6,1);t,x=ode45(myhigh,0,100,x0);plot(t,x(:,1)function dx=myhigh(t,x)f=sin(t);0;0;M=eye(3);C=eye(3)*0.1;K=eye(3)-0.5*diag(ones(2,1),1)-0.5*diag(ones(2,1),-1);dx=x(4:6);inv(M)*(f-C*x(4:6)-K*x(1:3);7.延迟微分方程matlab提供了dde2

10、3求解非中性微分方程。dde23的调用格式如下:sol = dde23(ddefun,lags,history,tspan)lags是延迟量,比如方程中包含y1(t-0.2)和y2(t-0.3)则可以使用lags=0.2,0.3。这里的ddefun必须采用如下的定义方式:dydt = ddefun(t,y,Z)其中的Z(:,1)就是y(t-lags(1),Z(:,2)就是y(t-lags(2)).下面是个使用dde23求解延迟微分方程的例子。function mydde23study%The differential equations%y_1(t) = y_1(t-1)%y_2(t) = y

11、_1(t-1)+y_2(t-0.2)%y_3(t) = y_2(t)%are solved on 0, 5 with history y_1(t) = 1, y_2(t) = 1, y_3(t) = 1 for%t = 0.clear;clclags=1,0.2;history=1;1;1;tspan=0,5;sol = dde23(myddefun,lags,history,tspan)plot(sol.x,sol.y)function dy = myddefun(t,y,Z)dy=Z(1,1);Z(1)+Z(2,2);y(2);8.ode15i求解隐式微分方程T,Y = ode15i(od

12、efun,tspan,y0,yp0)yp0为y的初值。odefun的格式如下dy = odefun(t,y,yp),yp表示y,而方程中应该使得f(t,y,y)=0function myodeIMP%The problem is%y(1) = -0.04*y(1) + 1e4*y(2)*y(3)%y(2) =0.04*y(1) - 1e4*y(2)*y(3) - 3e7*y(2)2%y(3) =3e7*y(2)2%It is to be solved with initial conditions y(1) = 1, y(2) = 0, y(3) = 0%to steady state.cle

13、ar;clcy0=1;0;0;fixed_y0=1;1;1;yp0=0 0 0;fixed_yp0=;y0mod,yp0mod=decic(myodefunimp,0,y0,fixed_y0,yp0,fixed_yp0);tspan=0, logspace(-6,6);t,y = ode15i(myodefunimp,tspan,y0mod,yp0mod);y(:,2)=1e4*y(:,2);semilogx(t,y)function res=myodefunimp(t,y,yp)res=-yp(1)-0.04*y(1)+1e4*y(2)*y(3);-yp(2)+0.04*y(1)-1e4*y

14、(2)*y(3)-3e7*y(2)2;-yp(3)+3e7*y(2)2;这次要接触一个新的求解ode的方法,就是使用simulink的积分器求解。1.还是做我们研究过的一个例子(在初识matlab微分方程(2)中采用的)。Dx=y+x(1-x2-y2);Dy=-x+y*(1-x2-y2)初值x=0.1;y=0.2;积分器中设置初始条件;f(u)中指定Dx,Dy的计算公式。运行这个仿真,scope中可以看到两个变量的时程如下:在WorkSpace里可以得到tout和yout,执行plot(yout(:,1),yout(:,1)得到与ode45求解相似的结果如下2.这部分解决一个使用ode求解器d

15、de23没法求解的一类延迟微分方程(中性微分方程)。形如x(t)=f(x(t-t1),x(t),x(t-t2),x(t-t3)这类方程。dde23是无法求解的,但是可以借助simulink仿真求解。看下面的这个例子。x(t)=A1*x(t-t1)+A2*x(t-t2)+B*u(t)t1=0.15;t2=0.5A1=-123-3A2=0.0200B=0106-1166200.0301207-207113000.042在continuous里找到transport Delay,就可以实现对于信号的延迟,因此可以建立如下仿真模型从而在scope中可以得到如下仿真结果OK初识微分方程到了这里我想应该可以做个终结,因为我想作为零基础的材料来看,到这里也就可以了。以后还可能再有微分方程的内容,还请感兴趣的朋友多捧场吧。最后,大力推荐一本书薛定宇老师的高等应用数学问题的Matlab求解,确实很经典。学习Matlab的时间也不算短了,可是每次翻看这本书总是能让我有温故而知新的感觉,是我目前见过的最好的Matlab书。强烈推荐!(对于从来没有接触过matlab的人来说或许有点儿难,但是如果你以后要用matlab的话买一本绝对不会后悔的。)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁