Column approximate minimum degree permutation
p = colamd(S)
p = colamd(S)
returns
the column approximate minimum degree permutation vector for the sparse
matrix S
. For a non-symmetric matrix S
, S(:,p)
tends
to have sparser LU factors than S
. The Cholesky
factorization of S(:,p)' * S(:,p)
also tends to
be sparser than that of S'*S
.
knobs
is a two-element vector. If S is m
-by-n
,
then rows with more than (knobs(1))*n
entries are
ignored. Columns with more than (knobs(2))*m
entries
are removed prior to ordering, and ordered last in the output permutation p
.
If the knobs
parameter is not present, then knobs(1)
= knobs(2) = spparms('wh_frac')
.
stats
is an optional vector that provides
data about the ordering and the validity of the matrix S
.
| Number of dense or empty rows ignored by |
| Number of dense or empty columns ignored by |
| Number of garbage collections performed on the internal
data structure used by |
|
|
| Rightmost column index that is unsorted or contains duplicate
entries, or |
| Last seen duplicate or out-of-order row index in the
column index given by |
| Number of duplicate and out-of-order row indices |
Although MATLAB® built-in functions generate valid sparse
matrices, a user may construct an invalid sparse matrix using the MATLAB C
or Fortran APIs and pass it to colamd
. For this
reason, colamd
verifies that S
is
valid:
If a row index appears two or more times in the same
column, colamd
ignores the duplicate entries,
continues processing, and provides information about the duplicate
entries in stats(4:7)
.
If row indices in a column are out of order, colamd
sorts
each column of its internal copy of the matrix S
(but
does not repair the input matrix S
), continues
processing, and provides information about the out-of-order entries
in stats(4:7)
.
If S
is invalid in any other way, colamd
cannot
continue. It prints an error message, and returns no output arguments
(p
or stats
) .
The ordering is followed by a column elimination tree post-ordering.
[1] The authors of the code for colamd
are Stefan
I. Larimore and Timothy A. Davis. The algorithm was developed in collaboration with John
Gilbert, Xerox PARC, and Esmond Ng, Oak Ridge National Laboratory. Sparse Matrix Algorithms
Research: http://faculty.cse.tamu.edu/davis/research.html