1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
>> amd_demo
AMD Approximate minimum degree permutation.
P = AMD (S) returns the approximate minimum degree permutation vector for
the sparse matrix C = S+S'. The Cholesky factorization of C (P,P), or
S (P,P), tends to be sparser than that of C or S. AMD tends to be faster
than SYMMMD and SYMAMD, and tends to return better orderings than SYMMMD.
S must be square. If S is full, amd (S) is equivalent to amd (sparse (S)).
Usage: P = amd (S) ; % finds the ordering
[P, Info] = amd (S, Control) ; % optional parameters & statistics
Control = amd ; % returns default parameters
amd ; % prints default parameters.
Control (1); If S is n-by-n, then rows/columns with more than
max (16, (Control (1))* sqrt(n)) entries in S+S' are considered
"dense", and ignored during ordering. They are placed last in the
output permutation. The default is 10.0 if Control is not present.
Control (2): If nonzero, then aggressive absorption is performed.
This is the default if Control is not present.
Control (3): If nonzero, print statistics about the ordering.
Info (1): status (0: ok, -1: out of memory, -2: matrix invalid)
Info (2): n = size (A,1)
Info (3): nnz (A)
Info (4): the symmetry of the matrix S (0.0 means purely unsymmetric,
1.0 means purely symmetric). Computed as:
B = tril (S, -1) + triu (S, 1) ; symmetry = nnz (B & B') / nnz (B);
Info (5): nnz (diag (S))
Info (6): nnz in S+S', excluding the diagonal (= nnz (B+B'))
Info (7): number "dense" rows/columns in S+S'
Info (8): the amount of memory used by AMD, in bytes
Info (9): the number of memory compactions performed by AMD
The following statistics are slight upper bounds because of the
approximate degree in AMD. The bounds are looser if "dense" rows/columns
are ignored during ordering (Info (7) > 0). The statistics are for a
subsequent factorization of the matrix C (P,P). The LU factorization
statistics assume no pivoting.
Info (10): the number of nonzeros in L, excluding the diagonal
Info (11): the number of divide operations for LL', LDL', or LU
Info (12): the number of multiply-subtract pairs for LL' or LDL'
Info (13): the number of multiply-subtract pairs for LU
Info (14): the max # of nonzeros in any column of L (incl. diagonal)
Info (15:20): unused, reserved for future use
An assembly tree post-ordering is performed, 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/columns
do not take part in the post-order. It well-suited for a subsequent
"chol", however. If you require a precise elimination tree post-ordering,
then do:
P = amd (S) ;
C = spones (S) + spones (S') ; % skip this if S already symmetric
[ignore, Q] = sparsfun ('symetree', C (P,P)) ;
P = P (Q) ;
--------------------------------------------------------------------------
AMD Version 1.1 (Jan. 21, 2004), Copyright (c) 2004 by Timothy A. Davis,
Patrick R. Amestoy, and Iain S. Duff. See ../README for License.
email: davis@cise.ufl.edu CISE Department, Univ. of Florida.
web: http://www.cise.ufl.edu/research/sparse/amd
--------------------------------------------------------------------------
Acknowledgements: This work was supported by the National Science
Foundation, under grants ASC-9111263, DMS-9223088, and CCR-0203270.
See also COLMMD, COLAMD, COLPERM, SYMAMD, SYMMMD, SYMRCM.
Matrix name: HB/can_24
Matrix title: 1SYMMETRIC PATTERN FROM CANNES,LUCIEN MARRO,JUNE 1981.
If the next step fails, then you have
not yet compiled the AMD mexFunction.
amd: approximate minimum degree ordering, parameters:
dense row parameter: 10
(rows with more than max (10 * sqrt (n), 16) entries are
considered "dense", and placed last in output permutation)
aggressive absorption: yes
input matrix A is 24-by-24
input matrix A has 160 nonzero entries
amd: approximate minimum degree ordering, results:
status: OK
n, dimension of A: 24
nz, number of nonzeros in A: 160
symmetry of A: 1.0000
number of nonzeros on diagonal: 24
nonzeros in pattern of A+A' (excl. diagonal): 136
# dense rows/columns of A+A': 0
memory used, in bytes: 1516
# of memory compactions: 0
The following approximate statistics are for a subsequent
factorization of A(P,P) + A(P,P)'. They are slight upper
bounds if there are no dense rows/columns in A+A', and become
looser if dense rows/columns exist.
nonzeros in L (excluding diagonal): 97
nonzeros in L (including diagonal): 121
# divide operations for LDL' or LU: 97
# multiply-subtract operations for LDL': 275
# multiply-subtract operations for LU: 453
max nz. in any column of L (incl. diagonal): 8
chol flop count for real A, sqrt counted as 1 flop: 671
LDL' flop count for real A: 647
LDL' flop count for complex A: 3073
LU flop count for real A (with no pivoting): 1003
LU flop count for complex A (with no pivoting): 4497
Permutation vector:
23 21 11 24 13 6 17 9 15 5 16 8 2 10 14 18 1 3 4 7 12 19 22 20
Analyze A(p,p) with MATLAB's symbfact routine:
predicted nonzeros: 120
predicted flops: 656
predicted height: 16
predicted front size: 7
number of nonzeros in L (including diagonal): 120
floating point operation count for chol (A (p,p)): 656
Results from AMD's approximate analysis:
number of nonzeros in L (including diagonal): 121
floating point operation count for chol (A (p,p)): 671
Note that the nonzero and flop counts from AMD are slight
upper bounds. This is due to the approximate minimum degree
method used, in conjunction with "mass elimination".
See the discussion about mass elimination in amd.h and
amd_2.c for more details.
>> diary off
|