Eugene Johnson - Lab 10

ode_solver.m


% ode_solver.m
%
% This function first calls RK4 method to get first three
% values of t, this is a jump start because the way the AB/AM
% methods work.

function XX = ode_solver(Xinit,h,f,tfinal);

XX = zeros(5,(tfinal/h)+1);

XX(:,1) = Xinit;

% getting next three from rk4 method 

for i = 1:3,

   XX(:,i+1) = rk4(XX(:,i),h,f);

end

% Calling ab_am function to get predictor/corrector.

for i = 4:(tfinal/h),

    XX(:,i+1) = ab_am(XX(:,(i-3):i),h,f);

end

make_movie.m


function M = make_movie(XX)     

% make_movie takes as input the XX matrix which is the output of
% ode_solver.  This function should pick about twenty equally-spaced
% columns of XX and make a movie of them.

% clear the figure window and initialize M to be big enough to hold
% fifty frames.  If MATLAB whines about running out of memory at this
% point, make your figure window smaller.

% You really don't get the true picture because the laws of physics
% the physics law is Kepler's law and this causes the shuttle to
% zip around the earth so fast that it looks like it passes through 
% the earth.  I tryed to make it look more reallistic. I got to where
% I wass take 200 pictures and it didn't change the movie so I
% decided that it was best to write a little comment and leave it 
% at 50 clips.  So here we go.

clf reset; M = moviein(50);

% xpos and ypos should end up being 1-by-50 (or smaller) row vectors 
% picked at equal intervals from the second and third row of XX

% ------ finish these lines ------ %

xpos = XX(2,1:(6200/50):6201);
ypos = XX(3,1:(6200/50):6201); 

% determine how to fix the axis limits so the movie doesn't wiggle around
% as it plays

% loop through the values of xpos and ypos.  Plot the earth as a white 'o',
% the moon as a white 'x', and the shuttle as a white '+'.

u = .0121285;

for i = 1:length(xpos),

   plot(-u,0,'wo',1-u,0,'wx',xpos(i),ypos(i),'w+'); 


        axis([min(xpos)-.5 max(xpos)+.5 min(ypos) max(ypos)]); axis equal

        M(:,i) = getframe;

end


movie(M,2);

rk4.m

% rk4.m
% 
% This function is used to jump start everything.  It gets the first 
% three values of t

function Z = rk4(X,h,f);

f1 = func(X,f);
f2 = func(X+h/2*f1,f);
f3 = func(X+h/2*f2,f);
f4 = func(X+h*f3,f);

% getting the values of Z for the whole thing to meet

Z = X + h/6*(f1+2*f2+2*f3+f4);

ab_am.m


% ab_am.m
%
% This function uses the AB/AM methods (predictor/corrector) to
% evaluate the values of the differential equations.

% implementing the predictor/corrector methods

function Z = ab_am(XX,h,f);

% Temp is a temperary variable which holds the predicted value
% Getting predicted value.

TEMP = XX(:,4) + h/24*(55*func(XX(:,4),f) - 59*func(XX(:,3),f) + ... 
       37*func(XX(:,2),f) - 9*func(XX(:,1),f));

% Correcting the predicted value

Z = XX(:,4) + h/24*(9*func(TEMP,f) + 19*func(XX(:,4),f) - ... 
    5*func(XX(:,3),f) + func(XX(:,2),f));