实验 2 缉私艇追击走私船
2.1 实验目的通过本次实验,目的在于提高学生根据实际问题建立微分方程模型的能力,学会求微分方程解析解与数值解的方法,并会做简单的计算机仿真 。
2.2 实验问题海上边防缉私艇发现距 c公里处有一走私船正以匀速 a沿直线行驶,缉私艇立即以最大速度 b追赶,在雷达的引导下,缉私艇的方向始终指向走私船。问缉私艇何时追赶上走私船?并求出缉私艇追赶的路线。
x
y
co
2.3 建立模型
xco
y
走私船初始位置在点 (0,0),
行驶方向为 y轴正方向,
缉私艇的初始位置在点 (c,0),
缉私艇行驶的历程为 s 。
在时刻 t:
缉私艇到达点
),0( atR
),( yxD
走私船的位置到达点
0?

x
atytg
dx
dy? b
dt
ds?
dx
dta
dx
ydx
2
2 211?


dx
dy
bdx
ds
ds
dt
dx
dt


0)(,0)(
1
2
2
2
cycy
dx
dy
r
dx
yd
x
bar /?
2.4 模型求解


0)(,0)(
1
2
2
2
cycy
dx
dy
r
dx
yd
x
bar /?
(1) 求解析解令,
pdxdy?,dxdpdx yd?2
2,
0)(
1 2
cp
x
dx
r
p
dp
r
c
xpp?

21
r
x
cpp?

21

0)(
2
1
cy
x
c
c
x
dx
dy
rr


0)(
2
1
cy
x
c
c
x
dx
dy
rr
1 bar
1),
2
11
11
1
1
1
2 r
cr
c
x
rc
x
r
cy rr




当 x = 0 时,
21 r
cry


)()1( 222 ab
bc
ra
cr
a
yt

0 0,5 1 1,5 2 2,5 3 3,5
0
0,5
1
1,5
2
2,5
3
3,5
4
c=3千米,a=0.4千米 /秒,
分别取 b=0.6,0.8,1.2千米 /秒时,
缉私艇追赶路线的图形 。
追赶时间分别为,
t=9,5,2.8125( 分钟 )
Matlab
2)
1 bar


0)(
2
1
cy
x
c
c
x
dx
dy
rr
11
1
1
1
2 2
11




r
cr
x
c
rc
x
r
cy rr
当 0?x 时,y,缉私艇不可能追赶上走私船 。
3) 1?r





c
xc
c
cxy ln
22
1 22
当 0?x 时,y,缉私艇不可能追赶上走私船 。
( 2) 用 MATLAB软件求解析解
MATLAB软件 5.3以上版本提供的解常微分方程解析解的指令是
dsolve,完整的调用格式是,
dsolve('eqn1','eqn2',...)
其中 ‘ eqn1’,‘eqn2’,...是输入宗量,包括三部分,微分方程、初始条件、指定变量,若不指定变量,则默认小写字母 t为独立变量 。
微分方程的书写格式规定,当 y是因变量时,用,Dny”表示 y的 n阶导数 。
例 求微分方程 xyxy 的通解 。
dsolve('Dy=x+x*y','x')
Ans=-1+exp(1/2*x^2)*C1?

0)(
2
1
cy
x
c
c
x
dx
dy
rr
dsolve('Dy=1/2*((x/c)^r-(c/x)^r)','y(c)=0','x')
ans=1/2*exp(-r*(log(c)-log(x)))*c^r*(1/c)^r/(r+1)*x+
1/2*exp(r*(log(c)-log(x)))/(-1+r)*x-
1/2*c*(-(1/c)^r*c^r+c^r*(1/c)^r*r+r+1)/(r^2-1)
Matlab
( 3) 用 MATLAB软件求数值解

0)(
2
1
cy
x
c
c
x
dx
dy
rr
c=3,a=0.4,b=0.8,5.0/ bar
程序 zx.m
function y=zx(t,y)
y=0.5*((t/3)^0.5-(3/t)^0.5)
执行下面的命令,ode23('zx',3,0.0005,0) matlab
若想看图中,o”点的坐标可执行下面的命令,
[t,y]=ode23('zx',3,0.0005,0)
plot(t,y)
此时缉私艇的位置坐标是 ( 0.00050000000000,1.96013657712118)
执行下面的命令,ode45('zx',3,0.0005,0)
若想看图中,o”点的坐标可执行下面的命令,
[t,y]=ode45('zx',3,0.0005,0)
plot(t,y)
此时缉私艇的位置坐标是 ( 0.0005,1.9675 )
(4) 用 MATLAB软件防真法当建立动态系统的微分方程模型很困难时,
我们可以用计算机仿真法对系统进行分析研究。
所谓计算机仿真就是利用计算机对实际动态系统的结构和行为进行编程、模拟和计算,以此来预测系统的行为效果。 xco
y
方向为 y轴正方向,
,缉私艇的位置,走私船的位置,
走私船初始位在点 (0,0),缉私艇的初始位在点 (c,0),
),0( kat,ktt? ),( kk yx
追赶方向可用方向余弦表示为,
22 )()0(
0c os
kkk
k
k yatx
x


22 )()0(s i n
kkk
kk
k yatx
yat


时间步长为 t?,则在时刻 tt
k
时,,c o s1 kkkk tbxxx?
kkkk tbyyy?s i n1
仿真算法,
第一步:设置时间步长,速度 a,b及初始位置t? cx?
0
,00?y
第二步,计算动点缉私艇 D在时刻 ttt
kk 1
时的坐标 ),( 11 kk yx
221 )(
kkk
k
kk yatx
xtbxx


221 )(
kkk
k
kk yatx
yattbyy



compare
计算走私船 R在时刻 ttt
kk 1
时的坐标 )~,~( 11 kk yx
0~ 1kx )(~ 1 ttay kk,
第三步:计算缉私艇与走私船这两个动点之间的距离,
211211 )~()~( kkkkk yyxxd
根据事先给定的距离,判断缉私艇是否已经追上了走私船,从而判断退出循环还是让时间产生一个步长,返回到第二步继续进入下一次循环 ;
第四步:当从上述循环退出后,由点列 ),(
11 kk yx
和 )~,~(
11 kk yx
可分别绘制成两条曲线即为缉私艇和走私船走过的轨迹曲线。
取 c=3千米,a=0.4千米 /分钟,b=0.8千米 /分钟,5.0/ bar,
程序 zhuixiantu.m
c=3; a=0.4/60; b=0.8/60;
jstxb=[];jstyb=[];zscxb=[];zscyb=[];
d=0.01;dt=2;t=0;
jstx=c;jsty=0;zscx=0;zscy=0;
while (sqrt((jstx-zscx)^2+(jsty-zscy)^2)>d)
t=t+dt;
jstx=jstx-b*dt*jstx/sqrt(jstx^2+(a*t-jsty)^2);
jstxb=[jstxb,jstx];
jsty=jsty+b*dt*(a*t-jsty)/sqrt(jstx^2+(a*t-jsty)^2);
jstyb=[jstyb,jsty];
zscy=a*t;
zscyb=[zscyb,zscy];
end
zscxb=zeros(length(zscyb));
plot(jstxb,jstyb,zscxb,zscyb,'*') matlab
历时,296秒,艇,( 0.00004135527497,1.97150212967435)
船,( 0,1.97333333333333)
2.5 结果分析用求解析解的方法算得的解是最为精确的;用数值方法计算的结果依赖于迭代终值的设定,减小迭代终值可以提高计算精度;用计算机仿真法计算的结果依赖于时间迭代步长的选取和程序终止条件的设定,修改终止条件的设定和减小时间迭代步长可以提高计算精度,减小误差。
2.6 实验任务
1,有一只猎狗在 B点位置发现了一只兔子在正东北方距离它 200米的地方 O处,此时兔子开始以 8米 /秒的速度向正西北方距离为 120米的洞口 A全速跑去,假设猎狗在追赶兔子的时候始终朝着兔子的方向全速奔跑,用计算机仿真法等多种方法完成下面的实验:
(1) 问猎狗能追上兔子的最小速度是多少?
(2) 在猎狗能追上兔子的情况下,猎狗跑过的路程是多少?
(3) 画出猎狗追赶兔子奔跑的曲线图。
(4) 假设在追赶过程中,当猎狗与兔子之间的距离为 30米时,兔子由于害怕,奔跑的速度每秒减半,而猎狗却由于兴奋奔跑的速度每秒增加 0.1倍,在这种情况下,再按前面的 ( 1) — ( 3) 完成实验任务。
A
B
N
W O
2,使用计算机仿真方法求解下述问题:在正方形的四个顶点上各有一人,如下图所示,在某一时刻,四人同时出发以匀速按顺时针方向追赶下一个人,如果他们始终保持对准目标,试确定每个人的行进路线。
Thank you for your cooperation