]> gitweb.michael.orlitzky.com - octave.git/blobdiff - permutation_matrices.m
Add permutation_matrices() and its tests.
[octave.git] / permutation_matrices.m
diff --git a/permutation_matrices.m b/permutation_matrices.m
new file mode 100644 (file)
index 0000000..9032d2e
--- /dev/null
@@ -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