function [ x, y ] = trapezoid ( f, x_range, y_initial, nstep )
%
%  function [ x, y ] = trapezoid ( f, x_range, y_initial, nstep )
%
%  TRAPEZOID uses NSTEP steps of the trapzezoid PECECE 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).  
%
%  One step of the predictor, Euler's forward method,
%  is followed by two steps of the corrector.  
%
%  The name of the derivative function is F. 
%
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;
%
%  Predict.
%
  y_temp = y(:,i) + dx * feval ( f, x(i), y(:,i) );
%
%  Correct two times.
%
  y_temp = y(:,i) + dx * ( feval ( f, x(i+1), y_temp ) ...
                         + feval ( f, x(i), y(:,i) ) ) / 2.0;

  y_temp = y(:,i) + dx * ( feval ( f, x(i+1), y_temp ) ...
                         + feval ( f, x(i), y(:,i) ) ) / 2.0;

  y(:,i+1) = y_temp;

end
