umfpack_details.m
8.34 KB
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
function umfpack_details
%UMFPACK_DETAILS details on all the options for using umfpack2 in MATLAB
%
% Factor or solve a sparse linear system, returning either the solution x to
% Ax=b or A'x'=b', the factorization LU=PAQ, or LU=P(R\A)Q. A must be sparse.
% For the solve, A must be square and b must be a dense n-by-1 vector. For LU
% factorization, A can be rectangular. In both cases, A and/or b can be real
% or complex.
%
% UMFPACK analyzes the matrix and selects one of three strategies to factorize
% the matrix. It first finds a set of k initial pivot entries of zero Markowitz
% cost. This forms the first k rows and columns of L and U. The remaining
% submatrix S is then analyzed, based on the symmetry of the nonzero pattern of
% the submatrix and the values on the diagaonal. The strategies include:
%
% (1) unsymmetric: use a COLAMD pre-ordering, a column elimination tree
% post-ordering, refine the column ordering during factorization,
% and make no effort at selecting pivots on the diagonal.
% (2) 2-by-2: like the symmetric strategy (see below), except that local
% row permutations are first made to attempt to place large entries
% on the diagonal.
% (3) symmetric: use an AMD pre-ordering on the matrix S+S', an
% elimination tree post-ordering, do not refine the column ordering
% during factorization, and attempt to select pivots on the diagonal.
%
% Each of the following uses of umfpack2 (except for "Control = umfpack2") is
% stand-alone. That is, no call to umfpack2 is required for any subsequent
% call. In each usage, the Info output argument is optional.
%
% Example:
%
% [x, Info] = umfpack2 (A, '\', b) ;
% [x, Info] = umfpack2 (A, '\', b, Control) ;
% [x, Info] = umfpack2 (A, Qinit, '\', b, Control) ;
% [x, Info] = umfpack2 (A, Qinit, '\', b) ;
%
% Solves Ax=b (similar to x = A\b in MATLAB).
%
% [x, Info] = umfpack2 (b, '/', A) ;
% [x, Info] = umfpack2 (b, '/', A, Control) ;
% [x, Info] = umfpack2 (b, '/', A, Qinit) ;
% [x, Info] = umfpack2 (b, '/', A, Qinit, Control) ;
%
% Solves A'x'=b' (similar to x = b/A in MATLAB).
%
% [L, U, P, Q, R, Info] = umfpack2 (A) ;
% [L, U, P, Q, R, Info] = umfpack2 (A, Control) ;
% [L, U, P, Q, R, Info] = umfpack2 (A, Qinit) ;
% [L, U, P, Q, R, Info] = umfpack2 (A, Qinit, Control) ;
%
% Returns the LU factorization of A. P and Q are returned as permutation
% matrices. R is a diagonal sparse matrix of scale factors for the rows
% of A, L is lower triangular, and U is upper triangular. The
% factorization is L*U = P*(R\A)*Q. You can turn off scaling by setting
% Control (17) to zero (in which case R = speye (m)), or by using the
% following syntaxes (in which case Control (17) is ignored):
%
% [L, U, P, Q] = umfpack2 (A) ;
% [L, U, P, Q] = umfpack2 (A, Control) ;
% [L, U, P, Q] = umfpack2 (A, Qinit) ;
% [L, U, P, Q] = umfpack2 (A, Qinit, Control) ;
%
% Same as above, except that no row scaling is performed. The Info array
% is not returned, either.
%
% [P1, Q1, Fr, Ch, Info] = umfpack2 (A, 'symbolic') ;
% [P1, Q1, Fr, Ch, Info] = umfpack2 (A, 'symbolic', Control) ;
% [P1, Q1, Fr, Ch, Info] = umfpack2 (A, Qinit, 'symbolic') ;
% [P1, Q1, Fr, Ch, Info] = umfpack2 (A, Qinit, 'symbolic', Control);
%
% Performs only the fill-reducing column pre-ordering (including the
% elimination tree post-ordering) and symbolic factorization. Q1 is the
% initial column permutation (either from colamd, amd, or the input
% ordering Qinit), possibly followed by a column elimination tree post-
% ordering or a symmetric elimination tree post-ordering, depending on
% the strategy used.
%
% For the unsymmetric strategy, P1 is the row ordering induced by Q1
% (row-merge order). For the 2-by-2 strategy, P1 is the row ordering that
% places large entries on the diagonal of P1*A*Q1. For the symmetric
% strategy, P1 = Q1.
%
% Fr is a (nfr+1)-by-4 array containing information about each frontal
% matrix, where nfr <= n is the number of frontal matrices. Fr (:,1) is
% the number of pivot columns in each front, and Fr (:,2) is the parent
% of each front in the supercolumn elimination tree. Fr (k,2) is zero if
% k is a root. The first Fr (1,1) columns of P1*A*Q1 are the pivot
% columns for the first front, the next Fr (2,1) columns of P1*A*Q1
% are the pivot columns for the second front, and so on.
%
% For the unsymmetric strategy, Fr (:,3) is the row index of the first
% row in P1*A*Q1 whose leftmost nonzero entry is in a pivot column for
% the kth front. Fr (:,4) is the leftmost descendent of the kth front.
% Rows in the range Fr (Fr (k,4),3) to Fr (k+1,3)-1 form the entire set
% of candidate pivot rows for the kth front (some of these will typically
% have been selected as pivot rows of fronts Fr (k,3) to k-1, before the
% factorization reaches the kth front. If front k is a leaf node, then
% Fr (k,4) is k.
%
% Ch is a (nchains+1)-by-3 array containing information about each "chain"
% (unifrontal sequence) of frontal matrices, and where nchains <= nfr
% is the number of chains. The ith chain consists of frontal matrices.
% Chain (i,1) to Chain (i+1,1)-1, and the largest front in chain i is
% Chain (i,2)-by-Chain (i,3).
%
% This use of umfpack2 is not required to factor or solve a linear system
% in MATLAB. It analyzes the matrix A and provides information only.
% The MATLAB statement "treeplot (Fr (:,2)')" plots the column elimination
% tree.
%
% Control = umfpack2 ;
%
% Returns a 20-by-1 vector of default parameter settings for umfpack2.
%
% umfpack_report (Control, Info) ;
%
% Prints the current Control settings, and Info
%
% det = umfpack2 (A, 'det') ;
% [det dexp] = umfpack2 (A, 'det') ;
%
% Computes the determinant of A. The 2nd form returns the determinant
% in the form det*10^dexp, where det is in the range +/- 1 to 10,
% which helps to avoid overflow/underflow when dexp is out of range of
% normal floating-point numbers.
%
% If present, Qinit is a user-supplied 1-by-n permutation vector. It is an
% initial fill-reducing column pre-ordering for A; if not present, then colamd
% or amd are used instead. If present, Control is a user-supplied 20-by-1
% array. Control and Info are optional; if Control is not present, defaults
% are used. If a Control entry is NaN, then the default is used for that entry.
%
%
% Copyright 1995-2007 by Timothy A. Davis, University of Florida.
% All Rights Reserved.
% UMFPACK is available under alternate licenses, contact T. Davis for details.
%
% UMFPACK License:
%
% Your use or distribution of UMFPACK or any modified version of
% UMFPACK implies that you agree to this License.
%
% This library is free software; you can redistribute it and/or
% modify it under the terms of the GNU Lesser General Public
% License as published by the Free Software Foundation; either
% version 2.1 of the License, or (at your option) any later version.
%
% This library 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
% Lesser General Public License for more details.
%
% You should have received a copy of the GNU Lesser General Public
% License along with this library; if not, write to the Free Software
% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
% USA
%
% Permission is hereby granted to use or copy this program under the
% terms of the GNU LGPL, provided that the Copyright, this License,
% and the Availability of the original version is retained on all copies.
% User documentation of any code that uses this code or any modified
% version of this code must cite the Copyright, this License, the
% Availability note, and "Used by permission." Permission to modify
% the code and to distribute modified code is granted, provided the
% Copyright, this License, and the Availability note are retained,
% and a notice that the code was modified is included.
%
% Availability: http://www.cise.ufl.edu/research/sparse/umfpack
%
% See also umfpack, umfpack2, umfpack_make, umfpack_report,
% umfpack_demo, and umfpack_simple.
more on
help umfpack_details
more off