下载

1下载券

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

上传资料

关闭

关闭

关闭

封号提示

内容

首页 Matlab求微分方程的解

Matlab求微分方程的解.doc

Matlab求微分方程的解

lk0504
2012-12-07 0人阅读 举报 0 0 暂无简介

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

实验四 Matlab求微分方程的解一、问题背景与实验目的实际应用问题通过数学建模所归纳而得到的方程绝大多数都是微分方程真正能得到代数方程的机会很少.另一方面能够求解的微分方程也是十分有限的特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法既要研究微分方程(组)的解析解法(精确解)更要研究微分方程(组)的数值解法(近似解).对微分方程(组)的解析解法(精确解)Matlab有专门的函数可以用本实验将作一定的介绍.本实验将主要研究微分方程(组)的数值解法(近似解)重点介绍Euler折线法.二、相关函数(命令)及简介.dsolve('equ','equ',…):Matlab求微分方程的解析解.equ、equ、…为方程(或条件).写方程(或条件)时用Dy表示y关于自变量的一阶导数用用Dy表示y关于自变量的二阶导数依此类推..simplify(s):对表达式s使用maple的化简规则进行化简.例如:symsxsimplify(sin(x)^cos(x)^)ans=.r,how=simple(s):由于Matlab提供了多种化简规则simple命令就是对表达式s用各种规则进行化简然后用r返回最简形式how返回形成这种形式所用的规则.例如:symsxr,how=simple(cos(x)^sin(x)^)r=cos(*x)how=combine.T,Y=solver(odefun,tspan,y)求微分方程的数值解.说明:()其中的solver为命令ode、ode、ode、odes、odes、odet、odetb之一.()odefun是显式常微分方程:()在积分区间tspan=上从到用初始条件求解.()要获得问题在其他指定时间点上的解则令tspan=(要求是单调的).()因为没有一种算法可以有效地解决所有的ODE问题为此Matlab提供了多种求解器Solver对于不同的ODE问题采用不同的Solver.求解器SolverODE类型特点说明ode非刚性单步算法、阶RungeKutta方程累计截断误差达大部分场合的首选算法ode非刚性单步算法、阶RungeKutta方程累计截断误差达使用于精度较低的情形ode非刚性多步法Adams算法高低精度均可到计算时间比ode短odet适度刚性采用梯形算法适度刚性情形odes刚性多步法Gear's反向数值微分精度中等若ode失效时可尝试使用odes刚性单步法阶Rosebrock算法低精度当精度较低时计算时间比odes短odetb刚性梯形算法低精度当精度较低时计算时间比odes短()要特别的是:ode、ode是极其常用的用来求解非刚性的标准形式的一阶常微分方程(组)的初值问题的解的Matlab的常用程序其中:ode采用龙格库塔阶算法用阶公式作误差估计来调节步长具有低等的精度.ode则采用龙格库塔阶算法用阶公式作误差估计来调节步长具有中等的精度..ezplot(x,y,tmin,tmax):符号函数的作图命令.x,y为关于参数t的符号函数tmin,tmax为t的取值范围..inline():建立一个内联函数.格式:inline('expr','var','var',…)注意括号里的表达式要加引号.例:Q=dblquad(inline('y*sin(x)'),pi,*pi,,pi)三、实验内容几个可以直接用Matlab求微分方程精确解的例子:例:求解微分方程并加以验证.求解本问题的Matlab程序为:symsxyliney=dsolve('Dy*x*y=x*exp(x^)','x')linediff(y,x)*x*yx*exp(x^)linesimplify(diff(y,x)*x*yx*exp(x^))line说明:()行line是用命令定义x,y为符号变量.这里可以不写但为确保正确性建议写上()行line是用命令求出的微分方程的解:*exp(x^)*x^exp(x^)*C()行line使用所求得的解.这里是将解代入原微分方程结果应该为但这里给出:x^*exp(x^)*x*exp(x^)*C*x*(*exp(x^)*x^exp(x^)*C)()行line用simplify()函数对上式进行化简结果为表明的确是微分方程的解.例:求微分方程在初始条件下的特解并画出解函数的图形.求解本问题的Matlab程序为:symsxyy=dsolve('x*Dyyexp(x)=','y()=*exp()','x')ezplot(y)微分方程的特解为:y=x*exp(x)x*exp()(Matlab格式)即解函数的图形如图:图例:求微分方程组在初始条件下的特解并画出解函数的图形.求解本问题的Matlab程序为:symsxytx,y=dsolve('Dx*xy=exp(t)','Dyx*y=','x()=','y()=','t')simple(x)simple(y)ezplot(x,y,,)axisauto微分方程的特解(式子特别长)以及解函数的图形均略.用ode、ode等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例:求解微分方程初值问题的数值解求解范围为区间,.fun=inline('*y*x^*x','x','y')x,y=ode(fun,,,)x'y'plot(x,y,'o')>>x'ans=>>y'ans=图形结果为图.图例:求解描述振荡器的经典的VerderPol微分方程分析:令则先编写函数文件verderpolm:functionxprime=verderpol(t,x)globalmuxprime=x()mu*(x()^)*x()x()再编写命令文件vdpm:globalmumu=y=t,x=ode('verderpol',,,y)x=x(:,)x=x(:,)plot(t,x)图形结果为图.图用Euler折线法求解前面讲到过能够求解的微分方程也是十分有限的.下面介绍用Euler折线法求微分方程的数值解(近似解)的方法.Euler折线法求解的基本思想是将微分方程初值问题化成一个代数方程即差分方程主要步骤是用差商替代微商,于是:记从而则有例:用Euler折线法求解微分方程初值问题的数值解(步长h取)求解范围为区间,.解:本问题的差分方程为相应的Matlab程序见附录.数据结果为:图形结果见图:图特别说明:本问题可进一步利用四阶RungeKutta法求解读者可将两个结果在一个图中显示并和精确值比较看看哪个更“精确”?(相应的Matlab程序参见附录).四、自己动手求微分方程的通解.求微分方程的通解.求微分方程组在初始条件下的特解并画出解函数的图形.分别用ode、ode求上述第题中的微分方程初值问题的数值解(近似解)求解区间为.利用画图来比较两种求解器之间的差异.用Euler折线法求解微分方程初值问题的数值解(步长h取)求解范围为区间,.用四阶RungeKutta法求解微分方程初值问题的数值解(步长h取)求解范围为区间,.四阶RungeKutta法的迭代公式为(Euler折线法实为一阶RungeKutta法):相应的Matlab程序参见附录.试用该方法求解第题中的初值问题.用ode方法求上述第题的常微分方程初值问题的数值解(近似解)从而利用画图来比较两者间的差异.五、附录附录:(fulum)clearf=sym('y*xy^')a=b=h=n=(ba)hx=y=szj=x,yfori=:ny=yh*subs(f,{'x','y'},{x,y})x=xhszj=szjx,yendszjplot(szj(:,),szj(:,))附录:(fulum)clearf=sym('yexp(x)*cos(x)')a=b=h=n=(ba)hx=y=szj=x,yfori=: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,yendszjplot(szj(:,),szj(:,))PAGE73unknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknownunknown

用户评价(0)

关闭

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

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

提示

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

文档小程序码

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

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/9

Matlab求微分方程的解

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利