amd
Approximate minimum degree permutation
Syntax
P = amd(A)
P = amd(A,opts)
Description
P = amd(A) returns the
approximate minimum degree permutation vector for the sparse matrix C
= A + A'. The Cholesky factorization of C(P,P) or A(P,P) tends
to be sparser than that of C or A.
The amd function tends to be faster than symamd, and also tends to return better
orderings than symamd. Matrix A must
be square. If A is a full matrix, then amd(A) is
equivalent to amd(sparse(A)).
P = amd(A,opts) allows additional
options for the reordering. The opts input is a
structure with the two fields shown below. You only need to set the
fields of interest:
dense — A nonnegative scalar value that indicates what is considered to be dense. If A is n-by-n, then rows and columns with more than
max(16,(dense*sqrt(n)))entries inA + A'are considered to be "dense" and are ignored during the ordering. MATLAB® software places these rows and columns last in the output permutation. The default value for this field is 10.0 if this option is not present.aggressive — A scalar value controlling aggressive absorption. If this field is set to a nonzero value, then aggressive absorption is performed. This is the default if this option is not present.
MATLAB software performs an assembly tree post-ordering,
which is typically the same as an elimination tree post-ordering.
It is not always identical because of the approximate degree update
used, and because “dense” rows and columns do not take
part in the post-order. It well-suited for a subsequent chol operation, however, If you require
a precise elimination tree post-ordering, you can use the following
code:
P = amd(S); C = spones(S)+spones(S'); [ignore, Q] = etree(C(P,P)); P = P(Q);
If S is already symmetric, omit the second
line, C = spones(S)+spones(S').
Examples
References
[1] Amestoy, Patrick R., Timothy A. Davis, and Iain S. Duff. “Algorithm 837: AMD, an Approximate Minimum Degree Ordering Algorithm.” ACM Transactions on Mathematical Software 30, no. 3 (September 2004): 381–388. https://doi.org/10.1145/1024074.1024081.
