% This code is the supplimentary to the problem set 2.
% It demonstrates the use of the function streamsclice and quiver to plot
% phase portraits and vector fields in 2D.
%
% Your task is to modify the code to use in various problems in pset 2.
% Establish the system to be plotted
x = -4:.01:4; % x is in the range from -4 to 4
y = -4:.01:4; % y is in the same range
[X Y] = meshgrid(x,y);
% meshgrid transforms the domain specified by vectors
% x and y into arrays X and Y that can be used for the evaluation
% of functions of two variables and 3-D surface plots.
% The rows of the output array X are copies of the vector x and
% the columns of the output array Y are copies of the vector y.
% Establish the vector-field, in this example it is x' = xy-1, y' = x-y^3.
% The dots in vector multiplication X.*Y mean that the multiplication is
% done component by component
Xdot = X.*Y-1;
Ydot = X - Y.^3;
% Plot the phase portriat in figure(1) in the first subplot
figure(1);
subplot(1,2,1); % to learn more about subplot type in MATLAB command window
% help subplot
%^^^^^^^^^^^ the funciton streamslice plots the phase portrait
streamslice(X,Y,Xdot,Ydot);
hold on
axis equal
grid on
% Plotting the fixed points. Use the dot for stable fixed points and the
% circle for unstable points. Plot in red.
plot(-1,-1,'.r','MarkerSize',18)
plot( 1,1,'or','MarkerSize',6)
% Label the two axes for the system.
xlabel('X')
ylabel('Y')
title('Phase portrait')
%-----------------------------------------------
% in a second subplot plot the vector field only.
% this is done with function quiver. Sometimes it is useful.
subplot(1,2,2);
x = -2:.25:2;
y = -2:.25:2;
[X Y] = meshgrid(x,y);
Xdot = X.*Y-1;
Ydot = X - Y.^3;
% ^^^^^^^^ the only new function here -- quiver -- plots the vector field
% given by Xdot and Ydot at the points (X,Y)
quiver(X,Y,Xdot,Ydot);
hold on; axis equal; grid on;
plot(-1,-1,'.r','MarkerSize',18)
plot( 1,1,'or','MarkerSize',6)
xlabel('X'); ylabel('Y'); title('Vector Field')