第五讲 Matlab求解微分方程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第五讲 Matlab求解微分方程

教学目的:学会用MATLAB求简单微分方程的解析解、数值解,加深对微分方程概念和应用的理解;针对一些具体的问题,如追击问题,掌握利用软件求解微分方程的过程;了解微分方程模型解决问题思维方法及技巧;体会微分方程建摸的艺术性.

教学重点:利用机理分析建模微分方程模型,掌握追击问题的建模方法,掌握利用MATLAB求解数值解.

教学难点:利用机理分析建模微分方程模型,通过举例,结合图形以及与恰当的假设突破教学难点.

1微分方程相关函数(命令)及简介

因为没有一种算法可以有效地解决所有的ODE 问题,为此,Matlab 提供了多种求解器Solver,对于不同的ODE 问题,采用不同的Solver.

阶常微分方程(组)的初值问题的解的 Matlab 的常用程序,其中:

ode23 采用龙格-库塔2 阶算法,用3 阶公式作误差估计来调节步长,具有低等的精度.

ode45 则采用龙格-库塔4 阶算法,用5 阶公式作误差估计来调节步长,具有中等的精度.

2 求解微分方程的一些例子

几个可以直接用 Matlab 求微分方程精确解的例子:

例1:求解微分方程

22x xe xy dx

dy

-=+,并加以验证. 求解本问题的Matlab 程序为:

syms x y %line1 y=dsolve('Dy+2*x*y=x*exp(-x^2)','x') %line2 diff(y,x)+2 *x*y-x*exp(-x^2) %line3 simplify(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, 表明)(x y y =的确是微分方程的解.

例2:求微分方程0'=-+x e y xy 在初始条件e y 2)1(=下的特解,并画出解函数的图形.

求解本问题的 Matlab 程序为: syms x y

y=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 格式),即x

e e y x

+=,

此函数的图形如图 1:

图1 y 关于x 的函数图象

用ode23、ode45等求解非刚性的标准形式的一阶常微分方程(组)的初值问题的数值解(近似解).

例3:求解微分方程初值问题⎪⎩⎪⎨⎧=++-=1)0(2222

y x

x y dx dy 的数值解,求解范围为

区间[0, ].

fun=inline('-2*y+2*x^2+2*x','x','y'); [x,y]=ode23(fun,[0,],1); x'; y'; plot(x,y,'o-') >> x' ans =

>> y' ans =

图形结果为图 2.

图2 y 关于x 的函数图像

3 常微分在实际中的应用 导弹追踪问题

1、符号说明,w ,乙舰的速率恒为v 0;设时刻t 乙舰的坐标为((),())X t Y t ,导弹的坐标为((),())x t y t ;当零时刻,((0),(0))(1,0)X Y =,((0),(0))(0,0)x y =.建立微分方程模型.

20

2

,01(0)0,'(0)0v d y

k x dx w y y ⎧⎪⎪= =<<⎨⎪⎪==⎩

由微分方程模型解得

11(1)(1)11

(),12(1)2(1)2(1)2(1)

k k x x y x k k k k k +-+--=-+-≠+-+-++

代入题设的数据1/5k =,得到导弹的运行轨迹为

46

55555(1)(1)81224

y x x =--+-+

当1=x 时245=

y ,即当乙舰航行到点)24

5

,1(处时被导弹击中. 被击中时间

为:0

245

v v y t ==

. 若v 0=1, 则在t =处被击中. 利用MALAB 作图如图3.

clear, x=0::1; y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24; plot(x,y,'*')

图3导弹运行轨迹(解析法) 图4两种方法对比的导弹运行轨迹

2、数值方法求解.设导弹速率恒为w ,则得到参数方程为

⎪⎪⎩

⎪⎨⎧--+-=--+-=)

()()()()()(222

2y Y y Y x X w

dt dy x X y Y x X w dt dx

因乙舰以速度0v 沿直线1x =运动,设01v =,5,1,w X Y t ===,因此导弹运动轨迹的参数方程为:

⎪⎪⎪⎩

⎪⎪

⎪⎨

⎧==--+-=--+-=0)0(,0)0()()()1(5)1()()1(52

22

2y x y t y t x dt

dy

x y t x dt dx

MATLAB 求解数值解程序如下,结果见图4 t0=0,tf=;

[t,y]=ode45('eq2',[t0 tf],[0 0]); X=1;Y=0::;plot(X,Y,'-')

plot(y(:,1),y(:,2),'*'),hold on

x=0::1; y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24; plot(x,y,'r')

很明显数值计算的方法比较简单而且适用. 蚂蚁追击问题

(1)建立平面直角坐标系.以正多边形的中心为原点, 设正多边形的一个顶点为起始点, 连接此点和原点作x 轴. 根据x 轴作出相应的y 轴; 选取足够小的进行采样.

(2)在每一时刻t ,计算每只蚂蚁在下一时刻t t +∆时的坐标.不妨设甲追

相关文档
最新文档