From: Michael Orlitzky Date: Thu, 7 Feb 2013 00:38:31 +0000 (-0500) Subject: Add advection matrix_sparse() and a test for it. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=commitdiff_plain;h=9b1a3c694305734969d771a6e67a67123006b5ca;ds=sidebyside Add advection matrix_sparse() and a test for it. --- diff --git a/advection_matrix_sparse.m b/advection_matrix_sparse.m new file mode 100644 index 0000000..ce45e15 --- /dev/null +++ b/advection_matrix_sparse.m @@ -0,0 +1,29 @@ +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 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 diff --git a/tests/advection_matrix_sparse_tests.m b/tests/advection_matrix_sparse_tests.m new file mode 100644 index 0000000..1880dee --- /dev/null +++ b/tests/advection_matrix_sparse_tests.m @@ -0,0 +1,16 @@ +result = true; + +for n = [3:100] + ## Check the sparse matrix against the full one. + expected = advection_matrix(n,0,1); + actual = advection_matrix_sparse(n); + + if (expected != actual) + result = false; + end +end + + +unit_test_equals("Sparse advection matrices agree with full ones", ... + true, ... + result);