From: Michael Orlitzky Date: Mon, 25 Feb 2013 15:24:40 +0000 (-0500) Subject: Add permutation_matrices() and its tests. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=octave.git;a=commitdiff_plain;h=23a3da45293aef5568409c8c1c46fc3b0758ca2d;ds=sidebyside Add permutation_matrices() and its tests. --- diff --git a/permutation_matrices.m b/permutation_matrices.m new file mode 100644 index 0000000..9032d2e --- /dev/null +++ b/permutation_matrices.m @@ -0,0 +1,31 @@ +function PMs = permutation_matrices(integerN) + ## Generate all permutation matrices of size ``integerN``. + ## + ## INPUT: + ## + ## - ``integerN`` -- The dimension of the resulting matrices. + ## + ## OUTPUT: + ## + ## - ``PMs`` -- A cell array of permutation matrices. + ## + + if (integerN < 1) + PMs = NA; + return; + end + + ## Append to this as we generate them. + PMs = {}; + + ## Generate all permutations of [1,2,...,integerN]. + permutations = perms([1:integerN]); + + for idx = [ 1 : factorial(integerN) ] + sigma = permutations(idx,:); + ## Create a permutation matrix from the permutation, sigma. + P = eye(integerN) (sigma,:); + PMs{end+1} = P; + end + +end diff --git a/tests/permutation_matrices_tests.m b/tests/permutation_matrices_tests.m new file mode 100644 index 0000000..d65049e --- /dev/null +++ b/tests/permutation_matrices_tests.m @@ -0,0 +1,6 @@ +expected = { [1] }; +actual = permutation_matrices(1); + +unit_test_equals("permutation_matrices(1) works", ... + true, ... + isequal(actual,expected));