firerumble 发表于 2007-7-7 12:31

新手求救MATLAB追赶问题

请教各位高中一个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=;
>> t=;
>> = ode45(@pursuit,t,x);
>> daspect(), 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人的运动轨迹”先搞清原理,再读程序就简单了。程序本身不难懂,难的是求解思路。

w89986581 发表于 2007-7-7 17:13

呵呵,你是想读懂这个程序还是想计算这个结果?
如果是为了结果,可以采用别的方法来实现。

[ 本帖最后由 w89986581 于 2007-7-7 18:04 编辑 ]

firerumble 发表于 2007-7-7 22:46

谢谢2位我想读懂这个算法

3楼的高手 如果有其他的算法,可以教我一下吗?这个算法感觉可读性满差的 我问了很多人才看懂

w89986581 发表于 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]
查看完整版本: 新手求救MATLAB追赶问题