% rabbit_fox.m : pursuit problem % y1' = s*(r1-y1), y2' = s*(r2-y2) % s = k*norm(r')/norm(r-y), r = sqrt(1+t)*[cos(t); sin(t) ]; % y1(0) = 3; y2(0) = 0; % function main(k)
function main(k)
tspan = [0, 10]; yz = [5; 0]; options = odeset( 'AbsTol', 1e-7, 'RelTol', 1e-4 ); [t, y] = ode45( @fox1, tspan, yz, options, k ); % rabbit path r1 = sqrt(1+t).*cos(t); r2 =sqrt(1+t).*sin(t); plot(r1,r2,'--', y(:,1), y(:,2) );
pause; clf; plot(5,0,'o'); axis([min(r1)-1 max(r1)+1 min(r2)-1 max(r2)+1 ]); hold on title(' Rabbit(...) and Fox(--) ') xlabel y_1, ylabel y_2
mov = avifile('fox.avi');
for j=1:length(t) plot(r1(j),r2(j),'d', y(j,1), y(j,2), 'or'); F = getframe(gca); mov = addframe(mov,F); end mov = close(mov);
%%%% Right hand side function function yp = fox1(t, y, k); r = sqrt(1+t)*[cos(t); sin(t)]; rp = (.5/sqrt(1+t))*[ cos(t)-2*(1+t)*sin(t); sin(t)+2*(1+t)*cos(t) ]; dist = norm(r-y); if dist > 1e-4 st = k*norm(rp)/dist; yp = st*(r-y); else error(' ODE model ill-defined '); end
|
|