matlab研究微分方程,matlab求微分方程的解.doc

41528d3028836879cd698677c3999917.gifmatlab求微分方程的解.doc

matlab求微分方程的解一、问题背景与实验目的二、相关函数(命令)及简介三、实验内容四、自己动手一、问题背景与实验目的实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)的数值解法(近似解).对微分方程(组)的解析解法(精确解),Matlab有专门的函数可以用,本实验将作一定的介绍.本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍Euler折线法.二、相关函数(命令)及简介1.dsolve( equ1 , equ2 ,…):Matlab求微分方程的解析解.equ1、equ2、…为方程(或条件).写方程(或条件)时用Dy表示y关于自变量的一阶导数,用用D2y表示y关于自变量的二阶导数,依此类推.2.simplify(s):对表达式s使用maple的化简规则进行化简.例如:symsxsimplify(sin(x)^2+cos(x)^2)ans=13.[r,how]=simple(s):由于Matlab提供了多种化简规则,simple命令就是对表达式s用各种规则进行化简,然后用r返回最简形式,how返回形成这种形式所用的规则.例如:symsx[r,how]=simple(cos(x)^2-sin(x)^2)r=cos(2*x)how=combine4.[T,Y]=solver(odefun,tspan,y0)求微分方程的数值解.说明:(1)其中的solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb之一.(2)odefun是显式常微分方程:(3)在积分区间tspan=上,从到,用初始条件求解.(4)要获得问题在其他指定时间点上的解,则令tspan=(要求是单调的).(5)因为没有一种算法可以有效地解决所有的ODE问题,为此,Matlab提供了多种求解器Solver,对于不同的ODE问题,采用不同的Solver.求解器SolverODE类型特点说明ode45非刚性单步算法;4、5阶Runge-Kutta方程;累计截断误差达大部分场合的首选算法ode23非刚性单步算法;2、3阶Runge-Kutta方程;累计截断误差达使用于精度较低的情形ode113非刚性多步法;Adams算法;高低精度均可到计算时间比ode45短ode23t适度刚性采用梯形算法适度刚性情形ode15s刚性多步法;Gear s反向数值微分;精度中等若ode45失效时,可尝试使用ode23s刚性单步法;2阶Rosebrock算法;低精度当精度较低时,计算时间比ode15s短ode23tb刚性梯形算法;低精度当精度较低时,计算时间比ode15s短(6)要特别的是:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶常微分方程(组)的初值问题的解的Matlab的常用程序,其中:ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.5.ezplot(x,y,[tmin,tmax]):符号函数的作图命令.x,y为关于参数t的符号函数,[tmin,tmax]为t的取值范围.6.inline():建立一个内联函数.格式:inline( expr , var1 , var2 ,…),注意括号里的表达式要加引号.例:Q=dblquad(inline( y*sin(x) ),pi,2*pi,0,pi).三、实验内容1.几个可以直接用Matlab求微分方程精确解的例子:例1:求解微分方程,并加以验证.求解本问题的Matlab程序为:symsxy%line1y=dsolve( Dy+2*x*y=x*exp(-x^2) , x )%line2diff(y,x)+2*x*y-x*exp(-x^2)%line3simplify(diff(y,x)+2*x*y-x*exp(-x^2))%line4说明:(1)行line1是用命令定义x,y为符号变量.这里可以不写,但为确保正确性,建议写上;(2)行line2是用命令求出的微分方程的解:1/2*exp(-x^2)*x^2+exp(-x^2)*C1(3)行line3使用所求得的解.这里是将解代入原微分方程,结果应该为0,但这里给出:-x^3*exp(-x^2)-2*x*exp(-x^2)*C1+2*x*(1/2*exp(-x^2)*x^2+exp(-x^2)*C1)(4)行line4用simplify()函数对上式进行化简,结果为0,表明的确是微分方程的解.例2:求微分方程在初始条件下的特解,并画出解函数的图形.求解本问题的Matlab程序为:symsxyy=dsolve( x*Dy+y-exp(x)=0 , y(1)=2*exp(1) , x )ezplot(y)微分方程的特解为:y=1/x*exp(x)+1/x*exp(1)(Matlab格式),即,解函数的图形如图1:图1例3:求微分方程组在初始条件下的特解,并画出解函数的图形.求解本问题的Matlab程序为:symsxyt[x,y]=dsolve( Dx+5*x+y=exp(t) , Dy-x-3*y=0 , x(0)=1 , y(0)=0 , t )simple(x);simple(y);ezplot(x,y,[0,1.3]);axisauto微分方程的特解(式子特别长)以及解函数的图形均略.2.用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).例4:求解微分方程初值问题的数值解,求解范围为区间[0,0.5].fun=inline( -2*y+2*x^2+2*x , x , y );%fun=@(x)(-2*y+2*x^2+2*x)[x,y]=ode23(fun,[0,0.5],1);x ;y ;plot(x,y, o- )>>x ans=0.00000.04000.09000.14000.19000.24000.29000.34000.39000.44000.49000.5000>>y ans=1.00000.92470.84340.77540.71990.67640.64400.62220.61050.60840.61540.6179图形结果为图2.图2例5:求解描述振荡器的经典的VerderPol微分方程分析:令则先编写函数文件verderpol.m:functionxprime=verderpol(t,x)globalmu;xprime=[x(2);mu*(1-x(1)^2)*x(2)-x(1)];再编写命令文件vdp1.m:globalmu;mu=7;y0=[1;0][t,x]=ode45( verderpol ,[0,40],y0);x1=x(:,1);x2=x(:,2);plot(t,x1)图形结果为图3.图33.用Euler折线法求解前面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值