谁能帮我用MATLAB做一道数学题啊?很有挑战性的
题目:在正方形的四个顶点各有一个人,在某一时刻,四个人同时出发以匀速按顺时针方向追赶下一个人,如果他们始终保持对准目标,试确定每个人的行进路线...
题目:在正方形的四个顶点各有一个人,在某一时刻,四个人同时出发以匀速按顺时针方向追赶下一个人,如果他们始终保持对准目标,试确定每个人的行进路线
展开
2个回答
展开全部
我做过这题。
我找找,用偏微分方程组。
ode45求解。
我找找,用偏微分方程组。
ode45求解。
追问
这个我们要求用MATLAB做,帮帮忙吧
追答
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Author :wacs5
%Date :20110317(YYYYMMDD)
%针对:http://zhidao.baidu.com/question/238873128.html#here
%问题提出:
%在正方形的四个顶点各有一个人,在某一时刻,四个人同时出发以匀速按顺时针方向追赶下一个人,如果他们始终保持对准目标,试确定每个人的行进路线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
第1步:描述偏微分方程
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function dxdt=square(t,xx)
global v
x=xx([1:2:7,1]); %四个点的横坐标,方便循环再加第一个点横坐标
y=xx([2:2:8,2]); %四个点的纵坐标
for i=1:4
dx=x(i+1)-x(i);
dy=y(i+1)-y(i);
r=sqrt(dx*dx+dy*dy);
dxdt(i+i-1)=v*dx/r;
dxdt(i+i )=v*dy/r;
end
dxdt=dxdt(:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
第2步:描述何时迭代终止
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [value,isterminal,direction]=square_events(t,xx)
global dr;
x=xx([1:2:7,1]); %四个点的横坐标,方便循环再加第一个点横坐标
y=xx([2:2:8,2]); %四个点的纵坐标
for i=1:4
dx=x(i+1)-x(i);
dy=y(i+1)-y(i);
r(i)=sqrt(dx*dx+dy*dy);
end
value=min(r)-dr;
isterminal=1;
direction=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
第3步.求解
在Matlab下面输入:
clear
clc
global v
global dr
v=0.5; %速度
dr=0.01; %多近的时候,停止迭代
x0=[0,0,0,1,1,1,1,0]; %从原点开始顺时针
options = odeset('Events',@square_events);
[t,xy,te,ye,ie]=ode45(@square,[0,10],x0,options);
%成图
hold on
axis equal
axis([0,1,0,1])
xlabel('x')
ylabel('y')
x=xy(:,1:2:end);
y=xy(:,2:2:end);
for i=1:(size(x,1)-1)
plot([x(i,:);x(i+1,:)],[y(i,:);y(i+1,:)])
pause(0.1);
end
t(end) %何时终止
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询