下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 MATLAB解微分方程

MATLAB解微分方程.doc

MATLAB解微分方程

家玉很好
2017-10-22 0人阅读 举报 0 0 暂无简介

简介:本文档为《MATLAB解微分方程doc》,可适用于高等教育领域

MATLAB解微分方程(::)转载标签:分类:matlab学习教育用matlab时间也不短了可是一直没有接触过微分方程。这次看看书学习学习记点儿笔记。可以解析求解的微分方程。dsolve()调用格式为:y=dsolve(f,f,,fmOy=dsolve(f,f,,fm,'x')如下面的例子,求解了微分方程symstu=exp(*t)*cos(*t)uu=*diff(u,t,)*diff(u,t)*usymstyy=dsolve('Dy*Dy*Dy*Dy*y=*exp(*t)*cos(*t)*exp(*t)*sin(*t)')yc=latex(y)将yc的内容copy到latex中编译得到结果。关于Matlab的微分方程直到今天才更新第篇实在是很惭愧的事因为原因都在于太懒惰而不是其他的什么。在上一篇中我们使用dsolve可以解决一部分能够解析求解的微分方程、微分方程组但是对于大多数微分方程(组)而言不能得到解析解这时数值求解也就是没有办法的办法了好在数值解也有很多的用处。数值分析方法中讲解了一些Eular法、RungeKutta法等一些方法在matlab中内置的ode求解器可以实现不同求解方法的相同格式的调用而不必太关心matlab究竟是用什么算法完成的。这一回我们来说明ode求解器的使用方法。ode求解的上手例子:求解方程组Dx=yx(x^y^)Dy=xy*(x^y^)初值x=y=先说明一下最常用的ode调用方式和相应的函数文件定义格式。t,x=ode(odefun,tspan,x)其中Fun就是导函数tspan为求解的时间区间(或时间序列如果采用时间序列则必须单调)x为初值。这时函数文件可以采用如下方式定义functiondx=odefun(t,x)对于上面的小例子可以用如下的程序求解。functionjixianhuanclearclcx=t,x=ode(jxhdot,,,x)plot(x(:,),x(:,))functiondx=jxhdot(t,x)dx=x()x()*(x()^x()^)x()x()*(x()^x()^)终值问题tspan可以是递增序列也可以为递减序列若为递减则可求解终值问题。t,x=ode(zhongzhiode,,,)plot(t,x)functiondx=zhongzhiode(t,x)dx=*x()^x()*x()*x()*x()*x()^结果如下odesetoptions=odeset('name',value,'name',value,)t,x=solver(fun,tspan,x,options)通过odeset设置options第一通过求解选项的设置可以改善求解精度使得原本可能不收敛的问题收敛。options=odeset('RelTol',e)第二求解形如M(t,x)x'=f(t,x)的方程。例如方程x'=xyzxyy'=xyyzy^xyz=可以变形为x'xyzxyy'=xyyzy^z'xyz这样就可以用如下的代码求解该方程functionmydaeM=options=odeset('Mass',M)x=,,t,x=odes(daedot,,,x,options)plot(t,x)functiondx=daedot(t,x)dx=*x()x()*x()*x()*x()*x()*x()*x()*x()*x()*x()x()x()x()带附加参数的ode有时我们需要研究微分方程组中的参数对于解的影响这时采用带有参数的ode求解会使求解、配合循环使用可以使得求解的过程更加简捷。使用方法:只需将附加参数放在options的后面就可以传递给odefun了。看下面的例子。functionRosslerclearclca=,b=,c=,x=forjj=:t,x=ode(myRossler,,,x,,a(jj),b(jj),c(jj))figureplot(x(:,),x(:,),x(:,))gridonendfunctiondx=myRossler(t,x,a,b,c)dx=x()x()x()a*x()b(x()c)*x()刚性方程的求解刚性方程就是指各个自变量的变化率差异很大会造成通常的求解方法失效。这是matlab中自带的一个例子使用odes求解如果用ode求解就会出现错误。functionmyodestudyt,Y=odes(vdp,,)plot(T,Y(:,),'o')figureplot(Y(:,),Y(:,))functiondy=vdp(t,y)dy=zeros(,)dy()=y()dy()=*(y()^)*y()y()高阶微分方程的求解通常的方法是进行变量替换将原方程降阶转换成更多变量的一阶方程组进行求解。在这个例子里我们求解一个动力学系统里最常见的一个运动方程,其中f=sin(t)functionmyhighoderclearclcx=zeros(,)t,x=ode(myhigh,,,x)plot(t,x(:,))functiondx=myhigh(t,x)f=sin(t)M=eye()C=eye()*K=eye()*diag(ones(,),)*diag(ones(,),)dx=x(:)inv(M)*(fC*x(:)K*x(:))延迟微分方程matlab提供了dde求解非中性微分方程。dde的调用格式如下:sol=dde(ddefun,lags,history,tspan)lags是延迟量比如方程中包含y(t)和y(t)则可以使用lags=,。这里的ddefun必须采用如下的定义方式:dydt=ddefun(t,y,Z)其中的Z(:,)就是y(tlags()),Z(:,)就是y(tlags())下面是个使用dde求解延迟微分方程的例子。functionmyddestudyThedifferentialequationsy'(t)=y(t)y'(t)=y(t)y(t)y'(t)=y(t)aresolvedon,withhistoryy(t)=,y(t)=,y(t)=fort<=clearclclags=,history=tspan=,sol=dde(myddefun,lags,history,tspan)plot(solx,soly)functiondy=myddefun(t,y,Z)dy=Z(,)Z()Z(,)y()odei求解隐式微分方程T,Y=odei(odefun,tspan,y,yp)yp为y'的初值。odefun的格式如下dy=odefun(t,y,yp),yp表示y'而方程中应该使得f(t,y,y')=functionmyodeIMPTheproblemisy()'=*y()e*y()*y()y()'=*y()e*y()*y()e*y()^y()'=e*y()^Itistobesolvedwithinitialconditionsy()=,y()=,y()=tosteadystateclearclcy=fixedy=yp=fixedyp=ymod,ypmod=decic(myodefunimp,,y,fixedy,yp,fixedyp)tspan=,logspace(,)t,y=odei(myodefunimp,tspan,ymod,ypmod)y(:,)=e*y(:,)semilogx(t,y)functionres=myodefunimp(t,y,yp)res=yp()*y()e*y()*y()yp()*y()e*y()*y()e*y()^yp()e*y()^这次要接触一个新的求解ode的方法就是使用simulink的积分器求解。还是做我们研究过的一个例子(在初识matlab微分方程()中采用的)。Dx=yx(x^y^)Dy=xy*(x^y^)初值x=y=积分器中设置初始条件f(u)中指定Dx,Dy的计算公式。运行这个仿真scope中可以看到两个变量的时程如下:在WorkSpace里可以得到tout和yout执行plot(yout(:,),yout(:,))得到与ode求解相似的结果如下这部分解决一个使用ode求解器dde没法求解的一类延迟微分方程(中性微分方程)。形如x'(t)=f(x'(tt),x(t),x(tt),x(tt))这类方程。dde是无法求解的但是可以借助simulink仿真求解。看下面的这个例子。x'(t)=A*x(tt)A*x'(tt)B*u(t)t=t=A=A=B=在continuous里找到transportDelay,就可以实现对于信号的延迟因此可以建立如下仿真模型从而在scope中可以得到如下仿真结果OK~初识微分方程到了这里我想应该可以做个终结因为我想作为零基础的材料来看到这里也就可以了。以后还可能再有微分方程的内容还请感兴趣的朋友多捧场吧。最后大力推荐一本书薛定宇老师的《高等应用数学问题的Matlab求解》确实很经典。学习Matlab的时间也不算短了可是每次翻看这本书总是能让我有温故而知新的感觉是我目前见过的最好的Matlab书。强烈推荐!(对于从来没有接触过matlab的人来说或许有点儿难但是如果你以后要用matlab的话买一本绝对不会后悔的。)

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/15

MATLAB解微分方程

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利