]> Creatis software - CreaPhase.git/blobdiff - octave_packages/communications-1.1.1/@galois/lu.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / communications-1.1.1 / @galois / lu.m
diff --git a/octave_packages/communications-1.1.1/@galois/lu.m b/octave_packages/communications-1.1.1/@galois/lu.m
new file mode 100644 (file)
index 0000000..40dca06
--- /dev/null
@@ -0,0 +1,63 @@
+## Copyright (C) 2011 David Bateman
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Loadable Function} {[@var{l}, @var{u}, @var{p}] =} lu (@var{a})
+## @cindex LU decomposition of Galois matrix
+## Compute the LU decomposition of @var{a} in a Galois Field. The result is
+## returned in a permuted form, according to the optional return value
+## @var{p}.  For example, given the matrix
+## @code{a = gf([1, 2; 3, 4],3)},
+## 
+## @example
+## [l, u, p] = lu (a)
+## @end example
+## 
+## @noindent
+## returns
+## 
+## @example
+## l =
+## GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
+## 
+## Array elements = 
+## 
+##   1  0
+##   6  1
+## 
+## u =
+## GF(2^3) array. Primitive Polynomial = D^3+D+1 (decimal 11)
+## 
+## Array elements = 
+## 
+##   3  4
+##   0  7
+## 
+## p =
+## 
+##   0  1
+##   1  0
+## @end example
+## 
+## Such that @code{@var{p} * @var{a} = @var{l} * @var{u}}. If the argument
+## @var{p} is not included then the permutations are applied to @var{l}
+## so that @code{@var{a} = @var{l} * @var{u}}. @var{l} is then a pseudo-
+## lower triangular matrix. The matrix @var{a} can be rectangular.
+## @end deftypefn
+
+function varargout = lu (varargin)
+  varargout = cell (1, max(1, nargout));
+  [varargout{:}] = glu (varargin{:});
+endfunction