mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-10-31 23:57:10 -04:00
5ac886855d
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6437 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
91 lines
3.8 KiB
HTML
Executable File
91 lines
3.8 KiB
HTML
Executable File
<HTML><HEAD>
|
|
|
|
<TITLE> Sparse LU Decomposition Methods </TITLE>
|
|
|
|
</HEAD><BODY>
|
|
|
|
|
|
<H1> Sparse LU Decomposition Methods </H1>
|
|
|
|
<P>The sparse modulo-2 matrix LU decomposition routine <A
|
|
HREF="mod2sparse.html#decomp"><TT>mod2sparse_decomp</TT></A> (which
|
|
is used by the <A HREF="encoding.html#make-gen"><TT>make-gen</TT></A>
|
|
program when it is asked to create a sparse generator matrix) tries to
|
|
find an sub-matrix of a matrix (for <TT>make-gen</TT>, the parity
|
|
check matrix), and an ordering of rows and columns for this
|
|
sub-matrix, that leads to the lower-triangular matrix <B>L</B> and the
|
|
upper-triangular matrix <B>U</B> making up the LU decomposition being
|
|
as sparse as possible. Finding an optimal solution is too difficult,
|
|
so instead a heuristic strategy is used.
|
|
|
|
<P>The overall algorithm finds <B>L</B> and <B>U</B> a column at a
|
|
time, from left to right (as reordered, in the case of <B>U</B>). As
|
|
this is done, a copy, <B>B</B>, of the original matrix is modified.
|
|
To create column <I>i</I> of <B>L</B> and <B>U</B>, some element with
|
|
value 1 in <B>B</B> whose row and column indexes, after reordering,
|
|
are both greater than <I>i</I> is found. The row and column of this
|
|
element are considered to come next in the reordering, and the
|
|
contents of the column containing this element is copied to <B>L</B>
|
|
and <B>U</B> (upper elements going to <B>U</B>, lower to <B>L</B>).
|
|
The row containing this element is then added to some later rows so as
|
|
to clear the lower part of this column to zeros.
|
|
|
|
<P>At the first step of this process - selecting an element with value
|
|
1 from the later rows and columns - there will often be several
|
|
possibilities. Different choices can lead to the final result being
|
|
more or less sparse. The possible strategies for picking an element
|
|
are identified by the constants <TT>Mod2sparse_first</TT>,
|
|
<TT>Mod2sparse_mincol</TT>, and <TT>Mod2sparse_minprod</TT>. These
|
|
strategies operate as follows:
|
|
|
|
<P><TT>Mod2sparse_first</TT>
|
|
<BLOCKQUOTE>
|
|
Select the first element with value 1 that is encountered in a top
|
|
to bottom, left to right search.
|
|
</BLOCKQUOTE>
|
|
|
|
<P><TT>Mod2sparse_mincol</TT>
|
|
<BLOCKQUOTE>
|
|
Select the first element with value 1 that is contained in a column
|
|
of <B>B</B> that has the smallest number of 1s of any column.
|
|
</BLOCKQUOTE>
|
|
|
|
<P><TT>Mod2sparse_minprod</TT>
|
|
<BLOCKQUOTE>
|
|
Select an element with value 1 for which the product of the number of
|
|
1s in that row of <B>B</B> minus one times the number of 1s in that
|
|
column of <B>B</B> minus one is as small as possible.
|
|
</BLOCKQUOTE>
|
|
|
|
<P>The <B>abandon_number</B> and <B>abandon_when</B> parameters can
|
|
modify the basic strategy. If <B>abandon_number</B> is greater than
|
|
zero, then after <B>abandon_when</B> columns have been selected,
|
|
<B>abandon_number</B> of the remaining columns are abandoned as
|
|
candidates for possible future selection, the abandoned columns being
|
|
those with the greatest number of entries. Abandoning such columns
|
|
saves space and time, but may make the final result less sparse than
|
|
it would otherwise be, and can possibly result in the matrix appearing
|
|
to have lower rank than it actually has.
|
|
|
|
<P>The methods described here are fairly straightforward adaptations
|
|
of standard methods for sparse square matrices of reals, as described, for
|
|
example, in
|
|
<BLOCKQUOTE>
|
|
I. S. Duff, A. M. Erisman, J. K. Reid (1986) <I>Direct Methods for
|
|
Sparse Matrices</I>, Oxford: Clarendon Press.
|
|
</BLOCKQUOTE>
|
|
In the coding context, however, we are interested in matrices of
|
|
modulo-2 elements, and it is enough to find a sparse LU decomposition
|
|
of any square sub-matrix that can be obtained by selecting columns of
|
|
the rectangular parity check matrix. I talked about the application
|
|
of sparse matrix methods to encoding of LDPC codes at the 1999 IMA
|
|
workshop on Codes, Systems and Graphical Models (see the <A
|
|
HREF="refs.html">references</A>).
|
|
|
|
|
|
<HR>
|
|
|
|
<A HREF="index.html">Back to index for LDPC software</A>
|
|
|
|
</BODY></HTML>
|