function S = advection_matrix_sparse(integerN)
  ##
  ## Sparse version of the advection_matrix function. See
  ## advection_matrix.m for details.
  ##

  if (integerN < 2)
    S = NA;
    return
  end

  ## The ones directly above the diagonal.
  top = [ [zeros(integerN-1, 1), speye(integerN-1)]; ...
          zeros(1, integerN)];

  ## The negative ones directly below the diagonal.
  bottom = [ [zeros(1, integerN-1); ...
	     -speye(integerN-1)    ], zeros(integerN, 1)];

  ## Combine the top and bottom.
  S = top + bottom;

  ## Fill in the entries in the corner.
  S(1, integerN) = -1;
  S(integerN, 1) = 1;

  ## And divide the whole thing by 2.
  S = (1/2)*S;
end
