数学建模第三次作业

更新时间:2023-10-16 07:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

院 系: 数学学院 专 业: 信息与计算科学 年 级: 2014级 学生姓名: 王继禹 学 号: 201401050335 教师姓名: 徐霞

6.6 习题

3.一个慢跑者在平面上沿着他喜欢的路径跑步,突然一只狗攻击他,这只狗以恒定速率跑向慢跑者,狗的运动方向始终指向慢跑者,计算并画出狗的轨迹。 解:

(1)模型分析建立:

狗的轨迹:在任意时刻,狗的速度向量都指向它的目标慢跑者。

假设1:慢跑者在某路径上跑步,他的运动由两个函数X(t)和Y(t)描述。 假设2:当t=0时,狗是在点(x0,y0)处,在时刻t时,它的位置是(x(t),y(t)) 那么下列方程成立: (1)狗以恒定速率跑: X’

2

+y’2=w2

(2) 狗的速度向量平行于慢跑者与狗的位置的差向量:

将上述方程带入等式:,可得:

再将λ代入第二个方程,可得狗的轨迹的微分方程:

(2)程序及结果 dog函数 [dog.m]

function [zs,isterminal,direction] = dog(t,z,flag) global w;% w=speed of the dog X=jogger(t); h = X-z; nh=norm(h);

if nargin<3 || isempty(flag) zs=(w/nh)*h; else

switch(flag) case 'events' zs = nh-1e-3; isterminal = 1; direction = 0; otherwise

error(['Unknow flag:' flag]); end

end

慢跑者的运动轨迹方程,水平向右 [jogger.m]

function s = jogger(t); s = [8*t;0]; 标记的函数 [cross.m]

function cross(Cx,Cy,v) Kx = [Cx Cx Cx Cx-v Cx+v];

Ky = [Cy Cy+2.5*v Cy+1.5*v Cy+1.5*v Cy+1.5*v] plot(Kx,Ky); plot(Cx,Cy,'o');

主程序: 静态显示 [main1.m] global w

y0 = [60;70]; w=10;

options = odeset('RelTol',1e-5,'Events','on'); [t,Y] = ode23('dog',[0,20],y0,options); clf;hold on;

axis([-10,100,-10,70]); plot(Y(:,1),Y(:,2)); J=[];

for h=1:length(t), w = jogger(t(h)); J=[J;w']; end

plot(J(:,1),J(:,2),':'); p = max(size(Y)); cross(Y(p,1),Y(p,2),2) hold off;

动态显示 [main2.m]

global w; y0=[60;70]; w=10;

options = odeset('RelTol',1e-5,'Events','on'); [t,Y]=ode23('dog',[0,20],y0,options); J=[]; for h=1:length(t); w= jogger(t(h)); J=[J;w'];

end

xmin = min(min(Y(:,1)),min(J(:,1))); xmax = max(max(Y(:,1)),max(J(:,1))); ymin = min(min(Y(:,2)),min(J(:,2))); ymax = max(max(Y(:,2)),max(J(:,2))); clf;hold on;

axis([xmin-10 xmax ymin-10 ymax]); title('The jogger and the Dog'); for h = 1:length(t)-1,

plot([Y(h,1),Y(h+1,1)],[Y(h,2),Y(h+1,2)],'-','Color','red','EraseMode','none');

plot([J(h,1),J(h+1,1)],[J(h,2),J(h+1,2)],'-','Color','green','EraseMode','none'); drawnow; pause(0.1); end

plot(J(:,1),J(:,2),':'); p = max(size(Y)); cross(Y(p,1),Y(p,2),2) hold off;

结果

t=12.2761812635281,在12.27秒后狗追上慢跑者。

慢跑者轨迹是椭圆轨迹 [jogger2.m]

function s=jogger2(t)

s=[10+20*cos(t) 20+15*sin(t)];

狗的微分方程 [dog.m]

function [zs,isterminal,direction] = dog(t,z,flag) global w;% w=speed of the dog X=jogger2(t); h = X-z; nh=norm(h);

if nargin<3 || isempty(flag)

zs=(w/nh)*h; else

switch(flag) case 'events' zs = nh-1e-3; isterminal = 1; direction = 0; otherwise

error(['Unknow flag:' flag]); end end

主程序

[main3.m] global w; y0=[60;70]; w=10;

options = odeset('RelTol',1e-5,'Events','on'); [t,Y]=ode23('dog',[0,20],y0,options); J=[]; for h=1:length(t); w= jogger2(t(h)); J=[J;w']; end

xmin = min(min(Y(:,1)),min(J(:,1))); xmax = max(max(Y(:,1)),max(J(:,1))); ymin = min(min(Y(:,2)),min(J(:,2))); ymax = max(max(Y(:,2)),max(J(:,2))); clf;hold on;

axis([xmin-10 xmax ymin-10 ymax]); title('The jogger and the Dog');

本文来源:https://www.bwwdw.com/article/i8df.html

Top