声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1292|回复: 4

[综合讨论] 新手求救MATLAB追赶问题

[复制链接]
发表于 2007-7-7 12:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
请教各位高中一个MATLAB解决追赶问题的问题
一个正方形的4个顶点各有一人,以相同的速度且朝着下一人的方向运动,画出4人的运动轨迹
下面这个是网上面的答案:
要解一个ODE,先定义个函数:
function dy = pursuit(t, x)

v=2.0*ones(4,1);
dy=zeros(8,1);
for i=1:1:4
m=2*i-1;
n=mod(m+2,8);
dy(m:m+1)=v(i)*(x(n:n+1)-x(m:m+1))/norm(x(n:n+1)-x(m:m+1));
end

按下面顺序运行就成了

>> x=[0,0, 1,0, 1,1, 0,1];
>> t=[0, 2];
>> [T,Y] = ode45(@pursuit,t,x);
>> daspect([1 1 1]), hold on, plot(Y(:,1),Y(:,2), 'k-', Y(:,3),Y(:,4), 'b-', Y(:,5),Y(:,6), 'r-', Y(:,7),Y(:,8), 'g-');

我运行了 程序正确 但是小弟才疏学浅……看不懂这些程序。有哪位高手 可以解释一下这个程序,最好可以每一句后面都解释一下,像书里写注释那样 ,万分感谢!!!
回复
分享到:

使用道具 举报

发表于 2007-7-7 13:04 | 显示全部楼层
一句一句读吧,不懂的看help就行了。“一个正方形的4个顶点各有一人,以相同的速度且朝着下一人的方向运动,画出4人的运动轨迹”先搞清原理,再读程序就简单了。程序本身不难懂,难的是求解思路。
发表于 2007-7-7 17:13 | 显示全部楼层
呵呵,你是想读懂这个程序还是想计算这个结果?
如果是为了结果,可以采用别的方法来实现。

[ 本帖最后由 w89986581 于 2007-7-7 18:04 编辑 ]
新建 BMP 图像.bmp
 楼主| 发表于 2007-7-7 22:46 | 显示全部楼层
谢谢2位  我想读懂这个算法

3楼的高手 如果有其他的算法,可以教我一下吗?这个算法感觉可读性满差的 我问了很多人才看懂
发表于 2007-7-8 11:12 | 显示全部楼层

回复 #4 firerumble 的帖子

呵呵,实现起来很容易.
设置x1,y1,x2,y2,x3,y3,x4,y4分别代表人1,2,3,4的运动轨迹,并赋初值
再设置增量l,代表每次前进步长.
计算每人前进方位角
theta21 = atan2(y2-y1,x2-x1);
theta32 = atan2(y3-y2,x3-x2);
theta43 = atan2(y4-y3,x4-x3);
theta14 = atan2(y1-y4,x1-x4);
然后更新位置坐标
x1(ii+1) = x1(ii) +/-  l*cos(theta21);
y1(ii+1) = y1(ii) +/-  l*sin(theta21);
....
其中,加号对应逆时针编号,减号对应顺时针编号.
根据当前位置与坐标原点的距离,判断是否停止循环(设置变化的步长增量l,可以提高计算速度)


这个问题我第一见到时是蚂蚁版本的(2000年时老师出的一道课后题),呵呵.以后我就对这东西比较感兴趣了.那时侯用的还是Fortran.

[ 本帖最后由 w89986581 于 2007-7-8 11:23 编辑 ]

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-12 10:29 , Processed in 0.071278 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表