PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_sparse_direct_real_gen_lu (f11me)
Purpose
nag_sparse_direct_real_gen_lu (f11me) computes the factorization of a real sparse matrix in compressed column (Harwell–Boeing), column-permuted format.
Syntax
[
iprm,
nzlumx,
il,
lval,
iu,
uval,
nnzl,
nnzu,
flop,
ifail] = f11me(
n,
irowix,
a,
iprm,
thresh,
nzlmx,
nzlumx,
nzumx)
[
iprm,
nzlumx,
il,
lval,
iu,
uval,
nnzl,
nnzu,
flop,
ifail] = nag_sparse_direct_real_gen_lu(
n,
irowix,
a,
iprm,
thresh,
nzlmx,
nzlumx,
nzumx)
Description
Given a real sparse matrix
,
nag_sparse_direct_real_gen_lu (f11me) computes an
factorization of
with partial pivoting,
, where
is a row permutation matrix (computed by
nag_sparse_direct_real_gen_lu (f11me)),
is a (supplied) column permutation matrix,
is unit lower triangular and
is upper triangular. The column permutation matrix,
, must be computed by a prior call to
nag_sparse_direct_real_gen_setup (f11md). The matrix
must be presented in the column permuted, compressed column (Harwell–Boeing) format.
The
factorization is output in the form of four one-dimensional arrays: integer arrays
il and
iu and real-valued arrays
lval and
uval. These describe the sparsity pattern and numerical values in the
and
matrices. The minimum required dimensions of these arrays cannot be given as a simple function of the size arguments (order and number of nonzero values) of the matrix
. This is due to unpredictable fill-in created by partial pivoting.
nag_sparse_direct_real_gen_lu (f11me) will, on return, indicate which dimensions of these arrays were not adequate for the computation or (in the case of one of them) give a firm bound. You should then allocate more storage and try again.
References
Demmel J W, Eisenstat S C, Gilbert J R, Li X S and Li J W H (1999) A supernodal approach to sparse partial pivoting SIAM J. Matrix Anal. Appl. 20 720–755
Demmel J W, Gilbert J R and Li X S (1999) An asynchronous parallel supernodal algorithm for sparse gaussian elimination SIAM J. Matrix Anal. Appl. 20 915–952
Parameters
Compulsory Input Parameters
- 1:
– int64int32nag_int scalar
-
, the order of the matrix .
Constraint:
.
- 2:
– int64int32nag_int array
-
The dimension of the array
irowix
must be at least
, the number of nonzeros of the sparse matrix
The row index array of sparse matrix .
- 3:
– double array
-
The dimension of the array
a
must be at least
, the number of nonzeros of the sparse matrix
The array of nonzero values in the sparse matrix .
- 4:
– int64int32nag_int array
-
Contains the column permutation which defines the permutation
and associated data structures as computed by function
nag_sparse_direct_real_gen_setup (f11md).
- 5:
– double scalar
Suggested value:
. Smaller values may result in a faster factorization, but the benefits are likely to be small in most cases. It might be possible to use if you are confident about the stability of the factorization, for example, if is diagonally dominant.
The diagonal pivoting threshold, . At step of the Gaussian elimination, if , use as a pivot, otherwise use . A value of corresponds to partial pivoting, a value of corresponds to always choosing the pivot on the diagonal (unless it is zero).
Constraint:
.
- 6:
– int64int32nag_int scalar
-
Indicates the available size of array
il. The dimension of
il should be at least
. A good range for
nzlmx that works for many problems is
to
, where
is the number of nonzeros in the sparse matrix
. If, on exit,
, the given
nzlmx was too small and you should attempt to provide more storage and call the function again.
Constraint:
.
- 7:
– int64int32nag_int scalar
-
Indicates the available size of array
lval. The dimension of
lval should be at least
nzlumx.
Constraint:
.
- 8:
– int64int32nag_int scalar
-
Indicates the available sizes of arrays
iu and
uval. The dimension of
iu should be at least
and the dimension of
uval should be at least
nzumx. A good range for
nzumx that works for many problems is
to
, where
is the number of nonzeros in the sparse matrix
. If, on exit,
, the given
nzumx was too small and you should attempt to provide more storage and call the function again.
Constraint:
.
Optional Input Parameters
None.
Output Parameters
- 1:
– int64int32nag_int array
-
Part of the array is modified to record the row permutation determined by pivoting.
- 2:
– int64int32nag_int scalar
-
If
, the given
nzlumx was too small and is reset to a value that will be sufficient. You should then provide the indicated storage and call the function again.
- 3:
– int64int32nag_int array
-
Encapsulates the sparsity pattern of matrix .
- 4:
– double array
-
Records the nonzero values of matrix and some of the nonzero values of matrix .
- 5:
– int64int32nag_int array
-
Encapsulates the sparsity pattern of matrix .
- 6:
– double array
-
Records some of the nonzero values of matrix .
- 7:
– int64int32nag_int scalar
-
The number of nonzero values in the matrix .
- 8:
– int64int32nag_int scalar
-
The number of nonzero values in the matrix .
- 9:
– double scalar
-
The number of floating-point operations performed.
- 10:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
-
-
Constraint: .
Constraint: .
Constraint: .
Constraint: .
Constraint: .
-
-
-
-
-
-
-
-
The matrix is singular – no factorization possible.
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
The computed factors
and
are the exact factors of a perturbed matrix
, where
is a modest linear function of
, and
is the
machine precision, when partial pivoting is used. If no partial pivoting is used, the factorization accuracy can be considerably worse. A call to
nag_sparse_direct_real_gen_diag (f11mm) after
nag_sparse_direct_real_gen_lu (f11me) can help determine the quality of the factorization.
Further Comments
The total number of floating-point operations depends on the sparsity pattern of the matrix .
A call to
nag_sparse_direct_real_gen_lu (f11me) may be followed by calls to the functions:
Example
This example computes the
factorization of the matrix
, where
Open in the MATLAB editor:
f11me_example
function f11me_example
fprintf('f11me example results\n\n');
n = int64(5);
nz = int64(11);
icolzp = int64([1; 3; 5; 7; 9; 12]);
irowix = int64([1; 3;
1; 5;
2; 3;
2; 4;
3; 4; 5]);
a = [ 2; 4;
1; -2;
1; 1;
-1; 1;
1; 2; 3];
iprm = zeros(1, 7*n, 'int64');
spec = 'M';
[iprm, ifail] = f11md( ...
spec, n, icolzp, irowix, iprm);
thresh = 1;
nzlmx = int64(8*nz);
nzlumx = nzlmx;
nzumx = nzlmx;
[iprm, nzlumx, il, lval, iu, uval, nnzl, nnzu, flop, ifail] = ...
f11me(...
n, irowix, a, iprm, thresh, nzlmx, nzlumx, nzumx);
fprintf('\nNumber of nonzeros in factors (excluding unit diagonal)');
fprintf('%8d\n',nnzl + nnzu - n);
disp('Factor elements in lval');
fprintf('%7.2f%7.2f%7.2f%7.2f%7.2f\n',lval(1:10)');
disp('Factor elements in uval');
fprintf('%7.2f%7.2f%7.2f%7.2f\n',uval(1:4)');
f11me example results
Number of nonzeros in factors (excluding unit diagonal) 14
Factor elements in lval
-2.00 -0.50 4.00 0.50 2.00
0.50 -1.00 0.50 1.00 -1.00
Factor elements in uval
1.00 3.00 1.00 1.00
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015