function [ x, y ] = euler ( f, x_range, y_initial, nstep )
%
%  function [ x, y ] = euler ( f, x_range, y_initial, nstep )
%
%  EULER uses NSTEP steps of Euler's method to estimate Y, the solution
%  of an ODE, at the equally spaced points X in the range X_RANGE(1)
%  to X_RANGE(2).  
%
%  The dependent variable Y can be a vector quantity.
%
%  The derivative function F is expected to return a COLUMN vector.  
%
x(1) = x_range(1);
dx = ( x_range(2) - x_range(1) ) / nstep;
y(:,1) = y_initial;

for i = 1 : nstep
  x(i+1) = x(i) + dx;
  y(:,i+1) = y(:,i) + dx * feval ( f, x(i), y(:,i) );
end
