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