下载

1下载券

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

上传资料

关闭

关闭

关闭

封号提示

内容

首页 MATLAB实验四_求微分方程的解

MATLAB实验四_求微分方程的解.ppt

MATLAB实验四_求微分方程的解

?3004797783
2014-04-25 0人阅读 举报 0 0 暂无简介

简介:本文档为《MATLAB实验四_求微分方程的解ppt》,可适用于高等教育领域

数学实验数学实验实验四求微分方程的解问题背景和实验目的问题背景和实验目的自牛顿发明微积分以来微分方程在描述事物运动规律上已发挥了重要的作用。实际应用问题通过数学建模所得到的方程绝大多数是微分方程。由于实际应用的需要人们必须求解微分方程。然而能够求得解析解的微分方程十分有限绝大多数微分方程需要利用数值方法来近似求解。本实验主要研究如何用Matlab来计算微分方程(组)的数值解并重点介绍一个求解微分方程的基本数值解法--Euler折线法。Euler折线法Euler折线法考虑一维经典初值问题基本思想:用差商代替微商根据Talyor公式y(x)在点xk处有初值问题的Euler折线法初值问题的Euler折线法具体步骤:分割求解区间差商代替微商分割求解区间差商代替微商解代数方程k=,,,,nyk是y(xk)的近似Euler折线法举例Euler折线法举例例:用Euler法解初值问题取步长h=()n=n得差分方程当h=即n=时Matlab源程序见fuluAm解:Euler折线法源程序Euler折线法源程序clearf=sym('y*xy^')a=b=h=n=(ba)hn=(ba)hx=y=szj=x,yfori=:ni=:ny=yh*subs(f,{'x','y'},{x,y})x=xhszj=szjx,yendszjplot(szj(:,),szj(:,),'or')Euler折线法举例(续)Euler折线法举例(续)解析解:解析解近似解y=*(*x*exp(*x))^()RungeKutta方法RungeKutta方法为了减小误差可采用以下方法:让步长h取得更小一些改用具有较高精度的数值方法:龙格库塔方法RungeKutta(龙格库塔)方法是一类求解常微分方程的数值方法有多种不同的迭代格式RungeKutta方法RungeKutta方法用得较多的是四阶RK方法(教材第页)四阶RK方法源程序四阶RK方法源程序clearf=sym('y*xy^')a=b=h=n=(ba)hn=(ba)hx=y=szj=x,yfori=:ni=:nl=subs(f,{'x','y'},{x,y})l=subs(f,{'x','y'},{xh,yl*h})l=subs(f,{'x','y'},{xh,yl*h})l=subs(f,{'x','y'},{xh,yl*h})y=yh*(l*l*ll)x=xhszj=szjx,yendplot(szj(:,),szj(:,),'dg')RungeKutta方法RungeKutta方法Euler法与RK法误差比较Euler法与RK法误差比较Matlab解初值问题Matlab解初值问题用Maltab自带函数解初值问题求解析解:dsolve求数值解:ode、ode、ode、odet、odes、odes、odetbdsolve求解析解dsolve求解析解dsolve的使用y=dsolve('eq','eq',,'cond','cond',,'v')其中y为输出eq、eq、为微分方程cond、cond、为初值条件v为自变量。例:求微分方程的通解并验证。>>y=dsolve('Dy*x*y=x*exp(x^)','x')>>symsxdiff(y)*x*yx*exp(x^)dsolve的使用dsolve的使用几点说明如果省略初值条件则表示求通解如果省略自变量则默认自变量为tdsolve('Dy=*x','x')%dydx=xdsolve('Dy=*x')%dydt=x若找不到解析解则返回其积分形式。微分方程中用D表示对自变量的导数如:Dyy'Dyy''Dyy'''dsolve举例dsolve举例例:求微分方程在初值条件下的特解并画出解函数的图形。>>y=dsolve('x*Dyyexp(x)=','y()=*exp()','x')>>ezplot(y)dsolve举例dsolve举例例:求微分方程组在初值条件下的特解并画出解函数的图形。x,y=dsolve('Dx*xy=exp(t)','Dyx*y=','x()=','y()=','t')ezplot(x,y,,)注:解微分方程组时如果所给的输出个数与方程个数相同则方程组的解按词典顺序输出如果只给一个输出则输出的是一个包含解的结构(structure)类型的数据。dsolve举例dsolve举例例:x,y=dsolve('Dx*x=','Dy*y=','x()=','y()=','t')r=dsolve('Dx*x=','Dy*y=','x()=','y()=','t')这里返回的r是一个结构类型的数据rx查看解函数x(t)ry查看解函数y(t)只有很少一部分微分方程(组)能求出解析解。大部分微分方程(组)只能利用数值方法求数值解。dsolve的输出个数只能为一个或与方程个数相等。Matlab函数数值求解Matlab函数数值求解T,Y=solver(odefun,tspan,y)其中y为初值条件tspan为求解区间Matlab在数值求解时自动对求解区间进行分割T(列向量)中返回的是分割点的值(自变量)Y(数组)中返回的是这些分割点上的近似解其列数等于因变量的个数。solver为Matlab的ODE求解器(可以是ode、ode、ode、odes、odes、odet、odetb)没有一种算法可以有效地解决所有的ODE问题因此MATLAB提供了多种ODE求解器对于不同的ODE可以调用不同的求解器。Matlab提供的ODE求解器Matlab提供的ODE求解器参数说明参数说明odefun为显式常微分方程可以用命令inline定义或在函数文件中定义然后通过函数句柄调用。fun=inline('*y*x^*x','x','y')x,y=ode(fun,,,)注:也可以在tspan中指定对求解区间的分割如:x,y=ode(fun,::,)此时x=::T,Y=solver(odefun,tspan,y)数值求解举例数值求解举例如果需求解的问题是高阶常微分方程则需将其化为一阶常微分方程组此时必须用函数文件来定义该常微分方程组。数值求解举例数值求解举例先编写函数文件verderpolmfunctionxprime=verderpol(t,x)globalmuxprime=x()mu*(x()^)*x()x()再编写脚本文件vdplm在命令窗口直接运行该文件。clearglobalmumu=y=t,x=ode('verderpol',,,y)plot(t,x(:,),'r',t,x(:,),'b')Matlab求解微分方程小结Matlab求解微分方程小结Matlab函数求解析解(通解或特解)用dsolve求数值解(特解)用ode、odeMatlab编程Euler折线法RungaKutta方法

用户评价(0)

关闭

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

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

提示

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

文档小程序码

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

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/24

MATLAB实验四_求微分方程的解

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利