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