aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/pages/nagf.ht
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/hyper/pages/nagf.ht
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/hyper/pages/nagf.ht')
-rw-r--r--src/hyper/pages/nagf.ht12302
1 files changed, 12302 insertions, 0 deletions
diff --git a/src/hyper/pages/nagf.ht b/src/hyper/pages/nagf.ht
new file mode 100644
index 00000000..7a3b37d2
--- /dev/null
+++ b/src/hyper/pages/nagf.ht
@@ -0,0 +1,12302 @@
+\begin{page}{manpageXXf}{NAG On-line Documentation: f}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F(3NAG) Foundation Library (12/10/92) F(3NAG)
+
+
+
+ F -- Linear Algebra Introduction -- F
+ Chapter F
+ Linear Algebra
+
+ 1. Introduction
+
+ The F Chapters of the Library are concerned with linear algebra
+ and cover a large area. This general introduction is intended to
+ help users decide which particular F Chapter is relevant to their
+ problem. There are F Chapters with the following titles:
+
+ F01 -- Matrix Factorizations
+
+ F02 -- Eigenvalues and Eigenvectors
+
+ F04 -- Simultaneous Linear Equations
+
+ F06 -- Linear Algebra Support Routines
+
+ F07 -- Linear Equations (LAPACK)
+
+ The principal problem areas addressed by the above Chapters are:
+
+ Systems of linear equations
+
+ Linear least-squares problems
+
+ Eigenvalue and singular value problems
+
+ The solution of these problems usually involves several matrix
+ operations, such as a matrix factorization followed by the
+ solution of the factorized form, and the routines for these
+ operations themselves utilize lower level support routines;
+ typically routines from Chapter F06. Most users will not normally
+ need to be concerned with these support routines.
+
+ NAG has been involved in a project, called LAPACK [1], to develop
+ a linear algebra package for modern high-performance computers
+ and some of the routines developed within that project are
+ incorporated into the Library as Chapter F07. It should be
+ emphasised that, while the LAPACK project has been concerned with
+ high-performance computers, the routines do not compromise
+ efficiency on conventional machines.
+
+ For background information on numerical algorithms for the
+ solution of linear algebra problems see Golub and Van Loan [4].
+ For some problem areas the user has the choice of selecting a
+ single routine to solve the problem, a so-called Black Box
+ routine, or selecting more than one routine to solve the problem,
+ such as a factorization routine followed by a solve routine, so-
+ called General Purpose routines. The following sections indicate
+ which chapters are relevant to particular problem areas.
+
+ 2. Linear Equations
+
+ The Black Box routines for solving linear equations of the form
+
+ Ax=b and AX=B,
+
+ where A is an n by n real or complex, non-singular matrix, are to
+ be found in Chapter F04. Such equations can also be solved by
+ selecting a General Purpose factorization routine from Chapter
+ F01 and combining it with a solve routine in Chapter F04, or by
+ selecting a factorization and a solve routine from Chapter F07.
+
+ There are routines to cater for a variety of types of matrix,
+ including general, symmetric or Hermitian, symmetric or Hermitian
+ positive definite, tridiagonal, skyline and sparse matrices.
+
+ In order to select the appropriate routine, users are recommended
+ to consult the F04 Chapter Introduction in the first instance.
+
+ 3. Linear Least-squares
+
+ Routines for solving linear least-squares problems of the form
+
+
+ T
+ minimize r r, where r=b-Ax,
+ x
+
+ where A is an m by n, possibly rank deficient, matrix are to be
+ found in Chapter F04. Linear least-squares problems can also be
+ solved by routines in the statistical Chapter G02.
+
+ In order to select the appropriate routine, users are recommended
+ to consult the F04 Chapter Introduction in the first instance,
+ but users with additional statistical requirements may prefer to
+ consult the G02 Chapter Introduction.
+
+ 4. Eigenvalue Problems and Singular Value Problems
+
+ Routines for solving standard matrix eigenvalue problems of the
+ form
+
+
+ Ax=(lambda)x,
+
+ where A is an n by n real or complex matrix, and generalized
+ matrix eigenvalue problems of the form
+
+
+ Ax=(lambda)Bx
+
+ where B is also an n by n matrix are to be found in Chapter F02.
+
+ There are routines to cater for various types of matrices,
+ including general, symmetric or Hermitian and sparse matrices.
+
+ Similarly, the routines for finding singular values and/or
+ singular vectors of an m by n real or complex matrix A are to be
+ found in Chapter F02.
+
+ In order to select the appropriate routine, users are recommended
+ to consult the F02 Chapter Introduction in the first instance.
+
+ 5. Matrix Factorizations
+
+ Routines for various sorts of matrix factorization are to be
+ found in Chapters F01 and F07 together with associated
+ transformation routines. In order to select the appropriate
+ routine users are recommended to consult the F01 Chapter
+ Introduction in the first instance.
+
+ 6. Support Routines
+
+ Chapter F06 contains a variety of routines to perform elementary
+ algebraic operations involving scalars, vectors and matrices,
+ such as setting up a plane rotation, performing a dot product and
+ computing a matrix-vector product. Chapter F06 contains routines
+ that meet the specification of the BLAS (Basic Linear Algebra
+ Subprograms) [5, 3, 2]. The routines in this chapter will not
+ normally be required by the general user, but are intended for
+ use by those who require to build specialist linear algebra
+ modules. The BLAS are extensively used by other NAG Foundation
+ Library routines.
+
+ References
+
+ [1] Anderson E, Bai Z, Bischof C, Demmel J, Dongarra J J, Du
+ Croz J, Greenbaum A, Hammarling S, McKenney A, Ostrouchov S
+ and Sorensen D (1992) LAPACK Users' Guide. SIAM
+ Philadelphia.
+
+ [2] Dongarra J J, Du Croz J J, Duff I S and Hammarling S (1990)
+ A Set of Level 3 Basic Linear Algebra Subprograms. ACM
+ Trans. Math. Softw. 16 1--28.
+
+ [3] Dongarra J J, Du Croz J J, Hammarling S and Hanson R J
+ (1988) An Extended Set of FORTRAN Basic Linear Algebra
+ Subprograms. ACM Trans. Math. Softw. 14 1--32.
+
+ [4] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ [5] Lawson C L, Hanson R J, Kincaid D R and Krogh F T (1979)
+ Basic Linear Algebra Subprograms for Fortran Usage. ACM
+ Trans. Math. Softw. 5 308--325.
+
+ [6] Parlett B N (1980) The Symmetric Eigenvalue Problem.
+ Prentice-Hall.
+
+ [7] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Clarendon Press.
+
+ [8] Wilkinson J H (1977) Some Recent Advances in Numerical
+ Linear Algebra. The State of the Art in Numerical Analysis.
+ (ed D A H Jacobs) Academic Press.
+
+ [9] Wilkinson J H (1978) Singular Value Decomposition -- Basic
+ Aspects. Numerical Software -- Needs and Availability. (ed D
+ A H Jacobs) Academic Press.
+
+ [10] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01}{NAG On-line Documentation: f01}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01(3NAG) Foundation Library (12/10/92) F01(3NAG)
+
+
+
+ F01 -- Matrix Factorization Introduction -- F01
+ Chapter F01
+ Matrix Factorization
+
+ 1. Scope of the Chapter
+
+ This chapter provides facilities for matrix factorizations and
+ associated transformations.
+
+ 2. Background to the Problems
+
+ An n by n matrix may be factorized as
+
+ T
+ A=PLUQ ,
+
+ where L and U are respectively lower and uper triangular
+ matrices, and P and Q are permutation matrices. This is called an
+ LU factorization. For general dense matrices it is usual to
+ choose Q=I and to then choose P to ensure that the factorization
+ is numerically stable. For sparse matrices, judicious choice of P
+ and Q ensures numerical stability as well as maintaining as much
+ sparsity as possible in the factors L and U. The LU factorization
+ is normally used in connection with the solution of the linear
+ equations
+
+
+ Ax=b,
+
+ whose solution, x, may then be obtained by solving in succession
+ the simpler equations
+
+ T
+ Ly=P b, Uz=y, x=Qz
+
+ the first by forward substitution and the second by backward
+ substitution. Routines to perform this solution are to be found
+ in Chapter F04.
+
+ T
+ When A is symmetric positive-definite then we can choose U=L and
+ Q=P, to give the Cholesky factorization. This factorization is
+ numerically stable without permutations, but in the sparse case
+ the permutations can again be used to try to maintain sparsity.
+ The Cholesky factorization is sometimes expressed as
+
+ T T
+ A=PLDL P ,
+
+ where D is a diagonal matrix with positive diagonal elements and
+ L is unit lower triangular.
+
+ The LU factorization can also be performed on rectangular
+ matrices, but in this case it is more usual to perform a QR
+ factorization. When A is an m by n (m>=n) matrix this is given by
+
+
+ (R)
+ A=Q(0),
+
+ where R is an n by n upper triangular matrix and Q is an
+ orthogonal (unitary in the complex case) matrix.
+
+ 3. Recommendations on Choice and Use of Routines
+
+ Routine F07ADF performs the LU factorization of a real m by n
+ dense matrix.
+
+ The LU factorization of a sparse matrix is performed by routine
+ F01BRF. Following the use of F01BRF, matrices with the same
+ sparsity pattern may be factorized by routine F01BSF.
+
+ The Cholesky factorization of a real symmetric positive-definite
+ dense matrix is performed by routine F07FDF.
+
+ Routine F01MCF performs the Cholesky factorization of a real
+ symmetric positive-definite variable band (skyline) matrix, and a
+ general sparse symmetric positive-definite matrix may be
+ factorized using routine F01MAF.
+
+ The QR factorization of an m by n (m>=n) matrix is performed by
+ routine F01QCF in the real case, and F01RCF in the complex case.
+ Following the use of F01QCF, operations with Q may be performed
+ using routine F01QDF and some, or all, of the columns of Q may be
+ formed using routine F01QEF. Routines F01RDF and F01REF perform
+ the same tasks following the use of F01RCF.
+
+
+ F01 -- Matrix Factorizations Contents -- F01
+ Chapter F01
+
+ Matrix Factorizations
+
+ F01BRF LU factorization of real sparse matrix
+
+ F01BSF LU factorization of real sparse matrix with known
+ sparsity pattern
+
+ T
+ F01MAF LL factorization of real sparse symmetric positive-
+ definite matrix
+
+ T
+ F01MCF LDL factorization of real symmetric positive-definite
+ variable-bandwidth matrix
+
+ F01QCF QR factorization of real m by n matrix (m>=n)
+
+ T
+ F01QDF Operations with orthogonal matrices, compute QB or Q B
+ after factorization by F01QCF
+
+ F01QEF Operations with orthogonal matrices, form columns of Q
+ after factorization by F01QCF
+
+ F01RCF QR factorization of complex m by n matrix (m>=n)
+
+ H
+ F01RDF Operations with unitary matrices, compute QB or Q B after
+ factorization by F01RCF
+
+ F01REF Operations with unitary matrices, form columns of Q after
+ factorization by F01RCF
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01brf}{NAG On-line Documentation: f01brf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01BRF(3NAG) Foundation Library (12/10/92) F01BRF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01BRF
+ F01BRF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01BRF factorizes a real sparse matrix. The routine either forms
+ the LU factorization of a permutation of the entire matrix, or,
+ optionally, first permutes the matrix to block lower triangular
+ form and then only factorizes the diagonal blocks.
+
+ 2. Specification
+
+ SUBROUTINE F01BRF (N, NZ, A, LICN, IRN, LIRN, ICN, PIVOT,
+ 1 IKEEP, IW, W, LBLOCK, GROW, ABORT,
+ 2 IDISP, IFAIL)
+ INTEGER N, NZ, LICN, IRN(LIRN), LIRN, ICN(LICN),
+ 1 IKEEP(5*N), IW(8*N), IDISP(10), IFAIL
+ DOUBLE PRECISION A(LICN), PIVOT, W(N)
+ LOGICAL LBLOCK, GROW, ABORT(4)
+
+ 3. Description
+
+ Given a real sparse matrix A, this routine may be used to obtain
+ the LU factorization of a permutation of A,
+
+ PAQ=LU
+
+ where P and Q are permutation matrices, L is unit lower
+ triangular and U is upper triangular. The routine uses a sparse
+ variant of Gaussian elimination, and the pivotal strategy is
+ designed to compromise between maintaining sparsity and
+ controlling loss of accuracy through round-off.
+
+ Optionally the routine first permutes the matrix into block lower
+ triangular form and then only factorizes the diagonal blocks. For
+ some matrices this gives a considerable saving in storage and
+ execution time.
+
+ Extensive data checks are made; duplicated non-zeros can be
+ accumulated.
+
+ The factorization is intended to be used by F04AXF to solve
+ T
+ sparse systems of linear equations Ax=b or A x=b. If several
+ matrices of the same sparsity pattern are to be factorized,
+ F01BSF should be used for the second and subsequent matrices.
+
+ The method is fully described by Duff [1].
+
+ 4. References
+
+ [1] Duff I S (1977) MA28 -- a set of Fortran subroutines for
+ sparse unsymmetric linear equations. A.E.R.E. Report R.8730.
+ HMSO.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N > 0.
+
+ 2: NZ -- INTEGER Input
+ On entry: the number of non-zero elements in the matrix A.
+ Constraint: NZ > 0.
+
+ 3: A(LICN) -- DOUBLE PRECISION array Input/Output
+ On entry: A(i), for i = 1,2,...,NZ must contain the non-
+ zero elements of the sparse matrix A. They can be in any
+ order since the routine will reorder them. On exit: the non-
+ zero elements in the LU factorization. The array must not be
+ changed by the user between a call of this routine and a
+ call of F04AXF.
+
+ 4: LICN -- INTEGER Input
+ On entry:
+ the dimension of the arrays A and ICN as declared in the
+ (sub)program from which F01BRF is called.
+ Since the factorization is returned in A and ICN, LICN
+ should be large enough to accommodate this and should
+ ordinarily be 2 to 4 times as large as NZ. Constraint: LICN
+ >= NZ.
+
+ 5: IRN(LIRN) -- INTEGER array Input/Output
+ On entry: IRN(i), for i = 1,2,...,NZ must contain the row
+ index of the non-zero element stored in A(i). On exit: the
+ array is overwritten and is not needed for subsequent calls
+ of F01BSF or F04AXF.
+
+ 6: LIRN -- INTEGER Input
+ On entry:
+ the dimension of the array IRN as declared in the
+ (sub)program from which F01BRF is called.
+ It need not be as large as LICN; normally it will not need
+ to be very much greater than NZ. Constraint: LIRN >= NZ.
+
+ 7: ICN(LICN) -- INTEGER array Input/Output
+ On entry: ICN(i), for i = 1,2,...,NZ must contain the
+ column index of the non-zero element stored in A(i). On
+ exit: the column indices of the non-zero elements in the
+ factorization. The array must not be changed by the user
+ between a call of this routine and subsequent calls of
+ F01BSF or F04AXF.
+
+ 8: PIVOT -- DOUBLE PRECISION Input
+ On entry: PIVOT should have a value in the range 0.0 <=
+ PIVOT <= 0.9999 and is used to control the choice of pivots.
+ If PIVOT < 0.0, the value 0.0 is assumed, and if PIVOT > 0.
+ 9999, the value 0.9999 is assumed. When searching a row for
+ a pivot, any element is excluded which is less than PIVOT
+ times the largest of those elements in the row available as
+ pivots. Thus decreasing PIVOT biases the algorithm to
+ maintaining sparsity at the expense of stability. Suggested
+ value: PIVOT = 0.1 has been found to work well on test
+ examples.
+
+ 9: IKEEP(5*N) -- INTEGER array Output
+ On exit: indexing information about the factorization. The
+ array must not be changed by the user between a call of this
+ routine and calls of F01BSF or F04AXF.
+
+ 10: IW(8*N) -- INTEGER array Workspace
+
+ 11: W(N) -- DOUBLE PRECISION array Output
+ On exit: if GROW = .TRUE., W(1) contains an estimate (an
+ upper bound) of the increase in size of elements encountered
+ during the factorization (see GROW); the rest of the array
+ is used as workspace.
+
+ If GROW = .FALSE., the array is not used.
+
+ 12: LBLOCK -- LOGICAL Input
+ On entry: if LBLOCK = .TRUE., the matrix is pre-ordered
+ into block lower triangular form before the LU factorization
+ is performed; otherwise the entire matrix is factorized.
+ Suggested value: LBLOCK = .TRUE. unless the matrix is known
+ to be irreducible.
+
+ 13: GROW -- LOGICAL Input
+ On entry: if GROW = .TRUE., then on exit W(1) contains an
+ estimate (an upper bound) of the increase in size of
+ elements encountered during the factorization. If the matrix
+ is well-scaled (see Section 8.2), then a high value for W(1)
+ indicates that the LU factorization may be inaccurate and
+ the user should be wary of the results and perhaps increase
+ the parameter PIVOT for subsequent runs (see Section 7).
+ Suggested value: GROW = .TRUE..
+
+ 14: ABORT(4) -- LOGICAL array Input
+ On entry:
+ if ABORT(1) = .TRUE., the routine will exit
+ immediately on detecting a structural singularity (one
+ that depends on the pattern of non-zeros) and return
+
+ IFAIL = 1; otherwise it will complete the
+ factorization (see Section 8.3).
+
+ If ABORT(2) = .TRUE., the routine will exit
+ immediately on detecting a numerical singularity (one
+ that depends on the numerical values) and return IFAIL
+ = 2; otherwise it will complete the factorization (see
+ Section 8.3).
+
+ If ABORT(3) = .TRUE., the routine will exit
+ immediately (with IFAIL = 5) when the arrays A and ICN
+ are filled up by the previously factorized, active and
+ unfactorized parts of the matrix; otherwise it
+ continues so that better guidance on necessary array
+ sizes can be given in IDISP(6) and IDISP(7), and will
+ exit with IFAIL in the range 4 to 6. Note that there
+ is always an immediate error exit if the array IRN is
+ too small.
+
+ If ABORT(4) = .TRUE., the routine exits immediately
+ (with IFAIL = 13) if it finds duplicate elements in
+ the input matrix. If ABORT(4) = .FALSE., the routine
+ proceeds using a value equal to the sum of the
+ duplicate elements. In either case details of each
+ duplicate element are output on the current advisory
+ message unit (see X04ABF), unless suppressed by the
+ value of IFAIL on entry.
+ Suggested values:
+ ABORT(1) = .TRUE.
+
+ ABORT(2) = .TRUE.
+
+ ABORT(3) = .FALSE.
+
+ ABORT(4) = .TRUE..
+
+ 15: IDISP(10) -- INTEGER array Output
+ On exit: IDISP is used to communicate information about the
+ factorization to the user and also between a call of F01BRF
+ and subsequent calls to F01BSF or F04AXF.
+ IDISP(1) and IDISP(2), indicate the position in arrays
+ A and ICN of the first and last elements in the LU
+ factorization of the diagonal blocks. (IDISP(2) gives
+ the number of non-zeros in the factorization.)
+
+ IDISP(3) and IDISP(4), monitor the adequacy of 'elbow
+ room' in the arrays IRN and A/ICN respectively, by
+ giving the number of times that the data in these
+ arrays has been compressed during the factorization to
+ release more storage. If either IDISP(3) or IDISP(4)
+ is quite large (say greater than 10), it will probably
+ pay the user to increase the size of the corresponding
+ array(s) for subsequent runs. If either is very low or
+ zero, then the user can perhaps save storage by
+ reducing the size of the corresponding array(s).
+
+ IDISP(5), gives an upper bound on the rank of the
+ matrix.
+
+ IDISP(6) and IDISP(7), give the minimum size of arrays
+ IRN and A/ICN respectively which would enable a
+ successful run on an identical matrix (but some '
+ elbow-room' should be allowed - see Section 8).
+
+ IDISP(8) to (10), are only used if LBLOCK = .TRUE..
+
+ IDISP(8), gives the structural rank of the matrix.
+
+ IDISP(9), gives the number of diagonal blocks.
+
+ IDISP(10), gives the size of the largest diagonal
+ block.
+
+ IDISP(1) and IDISP(2), must not be changed by the user
+ between a call of F01BRF and subsequent calls to
+ F01BSF or F04AXF.
+
+ 16: IFAIL -- INTEGER Input/Output
+ For this routine, the normal use of IFAIL is extended to
+ control the printing of error and warning messages as well
+ as specifying hard or soft failure (see the Essential
+ Introduction).
+
+ Before entry, IFAIL must be set to a value with the decimal
+ expansion cba, where each of the decimal digits c, b and a
+ must have a value of 0 or 1.
+ a=0 specifies hard failure, otherwise soft failure;
+
+ b=0 suppresses error messages, otherwise error messages
+ will be printed (see Section 6);
+
+ c=0 suppresses warning messages, otherwise warning
+ messages will be printed (see Section 6).
+ The recommended value for inexperienced users is 110 (i.e.,
+ hard failure with all messages printed).
+
+ Unless the routine detects an error (see Section 6), IFAIL
+ contains 0 on exit.
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ For each error, an explanatory error message is output on the
+ current error message unit (as defined by X04AAF), unless
+ suppressed by the value of IFAIL on entry.
+
+ IFAIL=-2
+ Successful factorization of a numerically singular matrix
+ (which may also be structurally singular) (see Section 8.3).
+
+ IFAIL=-1
+ Successful factorization of a structurally singular matrix
+ (see Section 8.3).
+
+ IFAIL= 1
+ The matrix is structurally singular and the factorization
+ has been abandoned (ABORT(1) was .TRUE. on entry).
+
+ IFAIL= 2
+ The matrix is numerically singular and the factorization has
+ been abandoned (ABORT(2) was .TRUE. on entry).
+
+ IFAIL= 3
+ LIRN is too small: there is not enough space in the array
+ IRN to continue the factorization. The user is recommended
+ to try again with LIRN (and the length of IRN) equal to at
+ least IDISP(6) + N/2.
+
+ IFAIL= 4
+ LICN is much too small: there is much too little space in
+ the arrays A and ICN to continue the factorization.
+
+ IFAIL= 5
+ LICN is too small: there is not enough space in the arrays A
+ and ICN to store the factorization. If ABORT(3) was .FALSE.
+ on entry, the factorization has been completed but some of
+ the LU factors have been discarded to create space, IDISP(7)
+ then gives the minimum value of LICN (i.e., the minimum
+ length of A and ICN) required for a successful factorization
+ of the same matrix.
+
+ IFAIL= 6
+ LICN and LIRN are both too small: effectively this is a
+ combination of IFAIL = 3 and IFAIL = 5 (with ABORT(3) = .
+ FALSE.).
+
+ IFAIL= 7
+ LICN is too small: there is not enough space in the arrays A
+ and ICN for the permutation to block triangular form.
+
+ IFAIL= 8
+ On entry N <= 0.
+
+ IFAIL= 9
+ On entry NZ <= 0.
+
+ IFAIL= 10
+ On entry LICN < NZ.
+
+ IFAIL= 11
+ On entry LIRN < NZ.
+
+ IFAIL= 12
+ On entry an element of the input matrix has a row or column
+ index (i.e., an element of IRN or ICN) outside the range 1
+ to N.
+
+ IFAIL= 13
+ Duplicate elements have been found in the input matrix and
+ the factorization has been abandoned (ABORT(4) = .TRUE. on
+ entry).
+
+ 7. Accuracy
+
+ The factorization obtained is exact for a perturbed matrix whose
+ (i,j)th element differs from a by less than 3(epsilon)(rho)m
+ ij ij
+ where (epsilon) is the machine precision, (rho) is the growth
+ value returned in W(1) if GROW = .TRUE., and m the number of
+ ij
+ Gaussian elimination operations applied to element (i,j). The
+ value of m is not greater than n and is usually much less.
+ ij
+ Small (rho) values therefore guarantee accurate results, but
+ unfortunately large (rho) values may give a very pessimistic
+ indication of accuracy.
+
+ 8. Further Comments
+
+ 8.1. Timing
+
+ The time required may be estimated very roughly from the number
+ (tau) of non-zeros in the factorized form (output as IDISP(2))
+ and for this routine and its associates is
+
+ 2
+ F01BRF: 5(tau) /n units
+
+ 2
+ F01BSF: (tau) /n units
+
+ F04AXF: 2(tau) units
+
+ where our unit is the time for the inner loop of a full matrix
+ 1 3
+ code (e.g. solving a full set of equations takes about -n
+ 3
+ units). Note that the faster F01BSF time makes it well worthwhile
+ to use this for a sequence of problems with the same pattern.
+
+ It should be appreciated that (tau) varies widely from problem to
+ problem. For network problems it may be little greater than NZ,
+ the number of non-zeros in A; for discretisation of 2-dimensional
+ and 3-dimensional partial differential equations it may be about
+ 1 5/3
+ 3nlog n and -n , respectively.
+ 2 2
+
+ The time taken to find the block lower triangular form (LBLOCK =
+ it is not found (LBLOCK = .FALSE.). If the matrix is irreducible
+ (IDISP(9) = 1 after a call with LBLOCK = .TRUE.) then this time
+ is wasted. Otherwise, particularly if the largest block is small
+ (IDISP(10)<<n), the consequent savings are likely to be greater.
+
+ The time taken to estimate growth (GROW = .TRUE.) is typically
+ under 2% of the overall time.
+
+ The overall time may be substantially increased if there is
+ inadequate 'elbow-room' in the arrays A, IRN and ICN. When the
+ sizes of the arrays are minimal (IDISP(6) and IDISP(7)) it can
+ execute as much as three times slower. Values of IDISP(3) and
+ IDISP(4) greater than about 10 indicate that it may be worthwhile
+ to increase array sizes.
+
+ 8.2. Scaling
+
+ The use of a relative pivot tolerance PIVOT essentially
+ presupposes that the matrix is well-scaled, i.e., that the matrix
+ elements are broadly comparable in size. Practical problems are
+ often naturally well-scaled but particular care is needed for
+ problems containing mixed types of variables (for example
+ millimetres and neutron fluxes).
+
+ 8.3. Singular and Rectangular Systems
+
+ It is envisaged that this routine will almost always be called
+ for square non-singular matrices and that singularity indicates
+ an error condition. However, even if the matrix is singular it is
+ possible to complete the factorization. It is even possible for
+ F04AXF to solve a set of equations whose matrix is singular
+ provided the set is consistent.
+
+ Two forms of singularity are possible. If the matrix would be
+ singular for any values of the non-zeros (e.g. if it has a whole
+ row of zeros), then we say it is structurally singular, and
+ continue only if ABORT(1) = .FALSE.. If the matrix is non-
+ singular by virtue of the particular values of the non-zeros,
+ then we say that it is numerically singular and continue only if
+ ABORT(2) = .FALSE..
+
+ Rectangular matrices may be treated by setting N to the larger of
+ the number of rows and numbers of columns and setting ABORT(1) =
+
+ Note: the soft failure option should be used (last digit of IFAIL
+ = 1) if the user wishes to factorize singular matrices with ABORT
+ (1) or ABORT(2) set to .FALSE..
+
+ 8.4. Duplicated Non-zeros
+
+ The matrix A may consist of a sum of contributions from different
+ sub-systems (for example finite elements). In such cases the user
+ may rely on this routine to perform assembly, since duplicated
+ elements are summed.
+
+ 9. Example
+
+ To factorize the real sparse matrix:
+
+ ( 5 0 0 0 0 0)
+ ( 0 2 -1 2 0 0)
+ ( 0 0 3 0 0 0)
+ (-2 0 0 1 1 0).
+ (-1 0 0 -1 2 -3)
+ (-1 -1 0 0 0 6)
+
+ This example program simply prints out some information about the
+ factorization as returned by F01BRF in W(1) and IDISP. Normally
+ the call of F01BRF would be followed by a call of F04AXF (see
+ Example for F04AXF).
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01bsf}{NAG On-line Documentation: f01bsf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01BSF(3NAG) Foundation Library (12/10/92) F01BSF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01BSF
+ F01BSF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01BSF factorizes a real sparse matrix using the pivotal sequence
+ previously obtained by F01BRF when a matrix of the same sparsity
+ pattern was factorized.
+
+ 2. Specification
+
+ SUBROUTINE F01BSF (N, NZ, A, LICN, IVECT, JVECT, ICN,
+ 1 IKEEP, IW, W, GROW, ETA, RPMIN, ABORT,
+ 2 IDISP, IFAIL)
+ INTEGER N, NZ, LICN, IVECT(NZ), JVECT(NZ), ICN
+ 1 (LICN), IKEEP(5*N), IW(8*N), IDISP(2),
+ 2 IFAIL
+ DOUBLE PRECISION A(LICN), W(N), ETA, RPMIN
+ LOGICAL GROW, ABORT
+
+ 3. Description
+
+ This routine accepts as input a real sparse matrix of the same
+ sparsity pattern as a matrix previously factorized by a call of
+ F01BRF. It first applies to the matrix the same permutations as
+ were used by F01BRF, both for permutation to block triangular
+ form and for pivoting, and then performs Gaussian elimination to
+ obtain the LU factorization of the diagonal blocks.
+
+ Extensive data checks are made; duplicated non-zeros can be
+ accumulated.
+
+ The factorization is intended to be used by F04AXF to solve
+ T
+ sparse systems of linear equations Ax=b or A x=b.
+
+ F01BSF is much faster than F01BRF and in some applications it is
+ expected that there will be many calls of F01BSF for each call of
+ F01BRF.
+
+ The method is fully described in Duff [1].
+
+ 4. References
+
+ [1] Duff I S (1977) MA28 -- a set of Fortran subroutines for
+ sparse unsymmetric linear equations. A.E.R.E. Report R.8730.
+ HMSO.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N > 0.
+
+ 2: NZ -- INTEGER Input
+ On entry: the number of non-zeros in the matrix A.
+ Constraint: NZ > 0.
+
+ 3: A(LICN) -- DOUBLE PRECISION array Input/Output
+ On entry: A(i), for i = 1,2,...,NZ must contain the non-
+ zero elements of the sparse matrix A. They can be in any
+ order since the routine will reorder them. On exit: the non-
+ zero elements in the factorization. The array must not be
+ changed by the user between a call of this routine and a
+ call of F04AXF.
+
+ 4: LICN -- INTEGER Input
+ On entry:
+ the dimension of the arrays A and ICN as declared in the
+ (sub)program from which F01BSF is called.
+ It should have the same value as it had for F01BRF.
+ Constraint: LICN >= NZ.
+
+ 5: IVECT(NZ) -- INTEGER array Input
+
+ 6: JVECT(NZ) -- INTEGER array Input
+ On entry: IVECT(i) and JVECT(i), for i = 1,2,...,NZ must
+ contain the row index and the column index respectively of
+ the non-zero element stored in A(i).
+
+ 7: ICN(LICN) -- INTEGER array Input
+ On entry: the same information as output by F01BRF. It must
+ not be changed by the user between a call of this routine
+ and a call of F04AXF.
+
+ 8: IKEEP(5*N) -- INTEGER array Input
+ On entry: the same indexing information about the
+ factorization as output from F01BRF. It must not be changed
+ between a call of this routine and a call of F04AXF.
+
+ 9: IW(8*N) -- INTEGER array Workspace
+
+ 10: W(N) -- DOUBLE PRECISION array Output
+ On exit: if GROW = .TRUE., W(1) contains an estimate (an
+ upper bound) of the increase in size of elements encountered
+ during the factorization (see GROW); the rest of the array
+ is used as workspace.
+
+ If GROW = .FALSE., the array is not used.
+
+ 11: GROW -- LOGICAL Input
+ On entry: if GROW = .TRUE., then on exit W(1) contains an
+ estimate (an upper bound) of the increase in size of
+ elements encountered during the factorization. If the matrix
+ is well-scaled (see Section 8.2), then a high value for W(1)
+ indicates that the LU factorization may be inaccurate and
+ the user should be wary of the results and perhaps increase
+ the parameter PIVOT for subsequent runs (see Section 7).
+
+ 12: ETA -- DOUBLE PRECISION Input
+ On entry: the relative pivot threshold below which an error
+ diagnostic is provoked and IFAIL is set to 7. If ETA is
+ greater than 1.0, then no check on pivot size is made.
+ -4
+ Suggested value: ETA = 10 .
+
+ 13: RPMIN -- DOUBLE PRECISION Output
+ On exit: if ETA is less than 1.0, then RPMIN gives the
+ smallest ratio of the pivot to the largest element in the
+ row of the corresponding upper triangular factor thus
+ monitoring the stability of the factorization. If RPMIN is
+ very small it may be advisable to perform a new
+ factorization using F01BRF.
+
+ 14: ABORT -- LOGICAL Input
+ On entry: if ABORT = .TRUE., the routine exits immediately
+ (with IFAIL = 8) if it finds duplicate elements in the input
+ matrix. If ABORT = .FALSE., the routine proceeds using a
+ value equal to the sum of the duplicate elements. In either
+ case details of each duplicate element are output on the
+ current advisory message unit (see X04ABF), unless
+ suppressed by the value of IFAIL on entry. Suggested value:
+ ABORT = .TRUE..
+
+ 15: IDISP(2) -- INTEGER array Input
+ On entry: IDISP(1) and IDISP(2) must be unchanged since the
+ previous call of F01BRF.
+
+ 16: IFAIL -- INTEGER Input/Output
+ For this routine, the normal use of IFAIL is extended to
+ control the printing of error and warning messages as well
+ as specifying hard or soft failure (see the Essential
+ Introduction).
+
+ Before entry, IFAIL must be set to a value with the decimal
+ expansion cba, where each of the decimal digits c, b and a
+ must have a value of 0 or 1.
+ a=0 specifies hard failure, otherwise soft failure;
+
+ b=0 suppresses error messages, otherwise error messages
+ will be printed (see Section 6);
+
+ c=0 suppresses warning messages, otherwise warning
+ messages will be printed (see Section 6).
+ The recommended value for inexperienced users is 110 (i.e.,
+ hard failure with all messages printed).
+
+ Unless the routine detects an error (see Section 6), IFAIL
+ contains 0 on exit.
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ For each error, an explanatory error message is output on the
+ current error message unit (as defined by X04AAF), unless
+ suppressed by the value of IFAIL on entry.
+
+ IFAIL= 1
+ On entry N <= 0.
+
+ IFAIL= 2
+ On entry NZ <= 0.
+
+ IFAIL= 3
+ On entry LICN < NZ.
+
+ IFAIL= 4
+ On entry an element of the input matrix has a row or column
+ index (i.e., an element of IVECT or JVECT) outside the range
+ 1 to N.
+
+ IFAIL= 5
+ The input matrix is incompatible with the matrix factorized
+ by the previous call of F01BRF (see Section 8).
+
+ IFAIL= 6
+ The input matrix is numerically singular.
+
+ IFAIL= 7
+ A very small pivot has been detected (see Section 5, ETA).
+ The factorization has been completed but is potentially
+ unstable.
+
+ IFAIL= 8
+ Duplicate elements have been found in the input matrix and
+ the factorization has been abandoned (ABORT = .TRUE. on
+ entry).
+
+ 7. Accuracy
+
+ The factorization obtained is exact for a perturbed matrix whose
+ (i,j)th element differs from a by less than 3(epsilon)(rho)m
+ ij ij
+ where (epsilon) is the machine precision, (rho) is the growth
+ value returned in W(1) if GROW = .TRUE., and m the number of
+ ij
+ Gaussian elimination operations applied to element (i,j).
+
+ If (rho) = W(1) is very large or RPMIN is very small, then a
+ fresh call of F01BRF is recommended.
+
+ 8. Further Comments
+
+ If the user has a sequence of problems with the same sparsity
+ pattern then this routine is recommended after F01BRF has been
+ called for one such problem. It is typically 4 to 7 times faster
+ but is potentially unstable since the previous pivotal sequence
+ is used. Further details on timing are given in document F01BRF.
+
+ If growth estimation is performed (GROW = .TRUE.), then the time
+ increases by between 5% and 10%. Pivot size monitoring (ETA <= 1.
+ 0) involves a similar overhead.
+
+ We normally expect this routine to be entered with a matrix
+ having the same pattern of non-zeros as was earlier presented to
+ F01BRF. However there is no record of this pattern, but rather a
+ record of the pattern including all fill-ins. Therefore we permit
+ additional non-zeros in positions corresponding to fill-ins.
+
+ If singular matrices are being treated then it is also required
+ that the present matrix be sufficiently like the previous one for
+ the same permutations to be suitable for factorization with the
+ same set of zero pivots.
+
+ 9. Example
+
+ To factorize the real sparse matrices
+
+ ( 5 0 0 0 0 0)
+ ( 0 2 -1 2 0 0)
+ ( 0 0 3 0 0 0)
+ (-2 0 0 1 1 0)
+ (-1 0 0 -1 2 -3)
+ (-1 -1 0 0 0 6)
+
+ and
+
+ (10 0 0 0 0 0)
+ ( 0 12 -3 -1 0 0)
+ ( 0 0 15 0 0 0)
+ (-2 0 0 10 -1 0).
+ (-1 0 0 -5 1 -1)
+ (-1 -2 0 0 0 6)
+
+ This example program simply prints the values of W(1) and RPMIN
+ returned by F01BSF. Normally the calls of F01BRF and F01BSF would
+ be followed by calls of F04AXF.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01maf}{NAG On-line Documentation: f01maf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01MAF(3NAG) Foundation Library (12/10/92) F01MAF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01MAF
+ F01MAF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01MAF computes an incomplete Cholesky factorization of a real
+ sparse symmetric positive-definite matrix A.
+
+ 2. Specification
+
+ SUBROUTINE F01MAF (N, NZ, A, LICN, IRN, LIRN, ICN, DROPTL,
+ 1 DENSW, WKEEP, IKEEP, IWORK, ABORT,
+ 2 INFORM, IFAIL)
+ INTEGER N, NZ, LICN, IRN(LIRN), LIRN, ICN(LICN),
+ 1 IKEEP(2*N), IWORK(6*N), INFORM(4), IFAIL
+ DOUBLE PRECISION A(LICN), DROPTL, DENSW, WKEEP(3*N)
+ LOGICAL ABORT(3)
+
+ 3. Description
+
+ F01MAF computes an incomplete Cholesky factorization
+
+ T T
+ C=PLDL P , WAW=C+E
+
+ for the sparse symmetric positive-definite matrix A, where P is a
+ permutation matrix, L is a unit lower triangular matrix, D is a
+ diagonal matrix with positive diagonal elements, E is an error
+ matrix representing elements dropped during the factorization and
+ diagonal elements that have been modified to ensure that C is
+ positive-definite, and W is a diagonal matrix, chosen to make the
+ diagonal elements of WAW unity.
+
+ -1 -1
+ W CW is a pre-conditioning matrix for A, and the factorization
+ of C is intended to be used by F04MAF to solve systems of linear
+ equations Ax=b.
+
+ The permutation matrix P is chosen to reduce the amount of fill-
+ in that occurs in L and the user-supplied parameter DROPTL can
+ also be used to control the amount of fill-in that occurs.
+
+ Full details on the factorization can be found in Munksgaard [1].
+
+ F01MAF is based on the Harwell Library routine MA31A.
+
+ 4. References
+
+ [1] Munksgaard N (1980) Solving Sparse Symmetric Sets of Linear
+ Equations by Pre-conditioned Conjugate Gradients. ACM Trans.
+ Math. Softw. 6 206--219.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 1.
+
+ 2: NZ -- INTEGER Input
+ On entry: the number of non-zero elements in the upper
+ triangular part of the matrix A, including the number of
+ elements on the leading diagonal. Constraint: NZ >= N.
+
+ 3: A(LICN) -- DOUBLE PRECISION array Input/Output
+ On entry: the first NZ elements of the array A must contain
+ the non-zero elements of the upper triangular part of the
+ sparse positive-definite symmetric matrix A, including the
+ elements on the leading diagonal. On exit: the first (NZ-N)
+ elements of A contain the elements above the diagonal of the
+ matrix WAW, where W is a diagonal matrix whose ith diagonal
+ -1/2
+ element is w =a . These elements are returned in order by
+ i ii
+ rows and the value returned in ICN(k) gives the column index
+ of the element returned in A(k). The value w is returned in
+ i
+ the ith element of the array WKEEP. The remaining LROW-NZ+N
+ elements of A, where LROW is the value returned in INFORM(1),
+ return details of the factorization for use by F04MAF.
+
+ 4: LICN -- INTEGER Input
+ On entry:
+ the dimension of the array A as declared in the (sub)program
+ from which F01MAF is called.
+ If fill-in is expected during the factorization, then a
+ larger value of LICN will allow fewer elements to be dropped
+ during the factorization, thus giving a more accurate
+ factorization, which in turn will almost certainly mean that
+ fewer iterations will be required by F04MAF. Constraint:
+ LICN>=2*NZ.
+
+ 5: IRN(LIRN) -- INTEGER array Input/Output
+ On entry: IRN(k), for k = 1,2,...,NZ must contain the row
+ index of the non-zero element of the matrix A supplied in A
+ (k). On exit: the first LCOL elements of IRN, where LCOL is
+ the value returned in INFORM(2), return details of the
+ factorization for use by F04MAF.
+
+ 6: LIRN -- INTEGER Input
+ On entry:
+ the dimension of the array IRN as declared in the
+ (sub)program from which F01MAF is called.
+ LIRN must be at least NZ, but, as with LICN, if fill-in is
+ expected then a larger value of LIRN will allow a more
+ accurate factorization. For this purpose LIRN should exceed
+ NZ by the same amount that LICN exceeds 2*NZ. Constraint:
+ LIRN >= NZ.
+
+ 7: ICN(LICN) -- INTEGER array Input/Output
+ On entry: ICN(k), for k = 1,2,...,NZ must contain the column
+ index of the non-zero element of the matrix A supplied in A
+ (k). Thus a =A(k), where i = IRN(k) and j = ICN(k). On
+ ij
+ exit: the first (NZ-N) elements of ICN give the column
+ indices of the first (NZ-N) elements returned in A. The
+ remaining LROW - NZ + N elements of ICN return details of
+ the factorization for use by F04MAF.
+
+ 8: DROPTL -- DOUBLE PRECISION Input/Output
+ On entry: a value in the range [-1.0,1.0] to be used as a
+ tolerance in deciding whether or not to drop elements during
+ (k+1)
+ the factorization. At the kth pivot step the element a
+ ij
+ is dropped if it would cause fill-in and if
+
+
+ (k+1) / (k) (k)
+ |a |<|DROPTL|* / a a .
+ ij \/ ii jj
+ If DROPTL is supplied as negative, then it is not altered
+ during the factorization and so is unchanged on exit, but if
+ DROPTL is supplied as positive then it may be altered by the
+ routine with the aim of obtaining an accurate factorization
+ in the space available. If DROPTL is supplied as -1.0, then
+ no fill-in will occur during the factorization; and if
+ DROPTL is supplied as 0.0 then a complete factorization is
+ performed. On exit: may be overwritten with the value used
+ by the routine in order to obtain an accurate factorization
+ in the space available, if DROPTL > 0.0 on entry.
+
+ 9: DENSW -- DOUBLE PRECISION Input/Output
+ On entry: a value in the range [0.0,1.0] to be used in
+ deciding whether or not to regard the active part of the
+ matrix at the kth pivot step as being full. If the ratio of
+ non-zero elements to the total number of elements is greater
+ than or equal to DENSW, then the active part is regarded as
+ full. If DENSW < 1.0, then the storage used is likely to
+ increase compared to the case where DENSW = 0, but the
+ execution time is likely to decrease. Suggested value: DENSW
+ = 0.8. On exit: if on entry DENSW is not in the range
+ [0.0,1.0], then it is set to 0.8. Otherwise it is unchanged.
+
+ 10: WKEEP(3*N) -- DOUBLE PRECISION array Output
+ On exit: information which must be passed unchanged to
+ F04MAF. The first N elements contain the values w , for
+ i
+ i=1,2,...,n, and the next N elements contain the diagonal
+ elements of D.
+
+ 11: IKEEP(2*N) -- INTEGER array Output
+ On exit: information which must be passed unchanged to
+ F04MAF.
+
+ 12: IWORK(6*N) -- INTEGER array Workspace
+
+ 13: ABORT(3) -- LOGICAL array Input
+ On entry:
+ if ABORT(1) = .TRUE., the routine will exit
+ immediately on detecting duplicate elements and return
+ IFAIL = 5. Otherwise when ABORT(1) = .FALSE., the
+ calculations will continue using the sum of the
+ duplicate entries. In either case details of the
+ duplicate elements are output on the current advisory
+ message unit (see X04ABF), unless suppressed by the
+ value of IFAIL on entry.
+
+ If ABORT(2) = .TRUE., the routine will exit
+ immediately on detecting a zero or negative pivot
+ element and return IFAIL = 6. Otherwise when ABORT(2)
+ = .FALSE., the zero or negative pivot element will be
+ modified to ensure positive-definiteness and a message
+ will be printed on the current advisory message unit,
+ unless suppressed by the value of IFAIL on entry.
+
+ If ABORT(3) = .TRUE., the routine will exit
+ immediately if the arrays A and ICN have been filled
+ up and return IFAIL = 7. Otherwise when ABORT(3) = .
+ FALSE., the data in the arrays is compressed to
+ release more storage and a message will be printed on
+ the current advisory message unit, unless suppressed
+ by the value of IFAIL on entry. If DROPTL is positive
+ on entry, it may be modified in order to allow a
+ factorization to be completed in the available space.
+ Suggested values:
+ ABORT(1) = .TRUE.,
+
+ ABORT(2) = .TRUE.,
+
+ ABORT(3) = .TRUE..
+
+ 14: INFORM(4) -- INTEGER array Output
+ On exit:
+ INFORM(1) returns the number of elements of A and ICN
+ that have been used by the routine. Thus at least the
+ first INFORM(1) elements of A and of ICN must be
+ supplied to F04MAF.
+
+ Similarly, INFORM(2) returns the number of elements of
+ IRN that have been used by the routine and so at least
+ the first INFORM(2) elements must be supplied to
+ F04MAF.
+
+ INFORM(3) returns the number of entries supplied in A
+ that corresponded to diagonal and duplicate elements.
+ If no duplicate entries were found, then INFORM(3)
+ will return the value of N.
+
+ INFORM(4) returns the value k of the pivot step from
+ which the active matrix was regarded as full.
+ INFORM must be passed unchanged to F04MAF.
+
+ 15: IFAIL -- INTEGER Input/Output
+ For this routine, the normal use of IFAIL is extended to
+ control the printing of error and warning messages as well
+ as specifying hard or soft failure (see the Essential
+ Introduction).
+
+ Before entry, IFAIL must be set to a value with the decimal
+ expansion cba, where each of the decimal digits c, b and a
+ must have a value of 0 or 1.
+ a=0 specifies hard failure, otherwise soft failure;
+
+ b=0 suppresses error messages, otherwise error messages
+ will be printed (see Section 6);
+
+ c=0 suppresses warning messages, otherwise warning
+ messages will be printed (see Section 6).
+ The recommended value for inexperienced users is 110 (i.e.,
+ hard failure with all messages printed).
+
+ Unless the routine detects an error (see Section 6), IFAIL
+ contains 0 on exit.
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ For each error, an explanatory error message is output on the
+ current error message unit (as defined by X04AAF), unless
+ suppressed by the value of IFAIL on entry.
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or NZ < N,
+
+ or LIRN < NZ,
+
+ or LICN<2*NZ.
+
+ IFAIL= 2
+ One of the conditions 0 < IRN(k) <= ICN(k) <= N is not
+ satisfied so that A(k) is not in the upper triangle of the
+ matrix. No further computation is attempted.
+
+ IFAIL= 3
+ One of the diagonal elements of the matrix A is zero or
+ negative so that A is not positive-definite. No further
+ computation is attempted.
+
+ IFAIL= 4
+ The available space has been used and no further
+ compressions are possible. The user should either increase
+ DROPTL, or allocate more space to A, IRN and ICN.
+
+ For all the remaining values of IFAIL the computations will
+ continue in the case of soft failure, so that more than one
+ advisory message may be printed.
+
+ IFAIL= 5
+ Duplicate elements have been detected and ABORT(1) = .TRUE..
+
+ IFAIL= 6
+ A zero or negative pivot element has been detected during
+ the factorization and ABORT(2) = .TRUE..
+
+ This should not happen if A is an M-matrix (see Munksgaard
+ [1]), but may occur for other types of positive-definite
+ matrix.
+
+ IFAIL= 7
+ The available space has been used and ABORT(3) = .TRUE..
+
+ 7. Accuracy
+
+ The accuracy of the factorization will be determined by the size
+ of the elements that are dropped and the size of the
+ modifications made to the diagonal elements. If these sizes are
+ small then the computed factors will correspond to a matrix close
+ to A and the number of iterations required by F04MAF will be
+ small. The more incomplete the factorization, the higher the
+ number of iterations required by F04MAF.
+
+ 8. Further Comments
+
+ The time taken by the routine will depend upon the sparsity
+ pattern of the matrix and the number of fill-ins that occur
+ during the factorization. At the very least the time taken can be
+ expected to be roughly proportional to n(tau), where (tau) is the
+ number of non-zeros.
+ The routine is intended for use with positive-definite matrices,
+ but the user is warned that it will not necessarily detect non-
+ positive-definiteness. Indeed the routine may return a
+ factorization that can satisfactorily be used by F04MAF even when
+ A is not positive-definite, but this should not be relied upon as
+ F04MAF may not converge.
+
+ 9. Example
+
+ The example program illustrates the use of F01MAF in conjunction
+ with F04MAF to solve the 16 linear equations Ax=b, where
+
+ (1 z z )
+ (z 1 z z )
+ ( z 1 z z )
+ ( z 1 0 z )
+ (z 0 1 z z )
+ ( z z 1 z z )
+ ( z z 1 z z )
+ ( z z 1 0 z )
+ A=( z 0 1 z z ).
+ ( z z 1 z z )
+ ( z z 1 z z )
+ ( z z 1 0 z)
+ ( z 0 1 z )
+ ( z z 1 z )
+ ( z z 1 z)
+ ( z z 1)
+
+ T ( 1 1 1 1 1 1 1 1 1 1 1 1)
+ b =( - - - - - 0 0 - - 0 0 - - - - -),
+ ( 2 4 4 2 4 4 4 4 2 4 4 2)
+
+ 1
+ where z=- -.
+ 4
+
+ The n by n matrix A arises in the solution of Laplace's equation
+ in a unit square, using a 5-point formula with a 6 by 6
+ discretisation, with unity on the boundaries.
+
+ The drop tolerance, DROPTL, is taken as 0.1, and the density
+ factor, DENSW, is taken as 0.8. The value IFAIL = 111 is used so
+ that advisory and error messages will be printed, but soft
+ failure would occur if IFAIL were returned as non-zero.
+
+ A relative accuracy of about 0.0001 is requested in the solution
+ from F04MAF, with a maximum of 50 iterations.
+
+ The example program for F02FJF illustrates the use of F01MAF and
+ F04MAF in solving an eigenvalue problem.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01mcf}{NAG On-line Documentation: f01mcf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01MCF(3NAG) Foundation Library (12/10/92) F01MCF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01MCF
+ F01MCF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01MCF computes the Cholesky factorization of a real symmetric
+ positive-definite variable-bandwidth matrix.
+
+ 2. Specification
+
+ SUBROUTINE F01MCF (N, A, LAL, NROW, AL, D, IFAIL)
+ INTEGER N, LAL, NROW(N), IFAIL
+ DOUBLE PRECISION A(LAL), AL(LAL), D(N)
+
+ 3. Description
+
+ This routine determines the unit lower triangular matrix L and
+ T
+ the diagonal matrix D in the Cholesky factorization A=LDL of a
+ symmetric positive-definite variable-bandwidth matrix A of order
+ n. (Such a matrix is sometimes called a 'sky-line' matrix.)
+
+ The matrix A is represented by the elements lying within the
+ envelope of its lower triangular part, that is, between the first
+ non-zero of each row and the diagonal (see Section 9 for an
+ example). The width NROW(i) of the ith row is the number of
+ elements between the first non-zero element and the element on
+ the diagonal, inclusive. Although, of course, any matrix
+ possesses an envelope as defined, this routine is primarily
+ intended for the factorization of symmetric positive-definite
+ matrices with an average bandwidth which is small compared with n
+ (also see Section 8).
+
+ The method is based on the property that during Cholesky
+ factorization there is no fill-in outside the envelope.
+
+ The determination of L and D is normally the first of two steps
+ in the solution of the system of equations Ax=b. The remaining
+ T
+ step, viz. the solution of LDL x=b may be carried out using
+ F04MCF.
+
+ 4. References
+
+ [1] Jennings A (1966) A Compact Storage Scheme for the Solution
+ of Symmetric Linear Simultaneous Equations. Comput. J. 9
+ 281--285.
+
+ [2] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 1.
+
+ 2: A(LAL) -- DOUBLE PRECISION array Input
+ On entry: the elements within the envelope of the lower
+ triangle of the positive-definite symmetric matrix A, taken
+ in row by row order. The following code assigns the matrix
+ elements within the envelope to the correct elements of the
+ array:
+
+ K = 0
+ DO 20 I = 1, N
+ DO 10 J = I-NROW(I)+1, I
+ K = K + 1
+ A(K) = matrix (I,J)
+ 10 CONTINUE
+ 20 CONTINUE
+
+ See also Section 8.
+
+ 3: LAL -- INTEGER Input
+ On entry: the smaller of the dimensions of the arrays A and
+ AL as declared in the calling (sub)program from which F01MCF
+ is called. Constraint: LAL >= NROW(1) + NROW(2) +... + NROW(
+ n).
+
+ 4: NROW(N) -- INTEGER array Input
+ On entry: NROW(i) must contain the width of row i of the
+ matrix A, i.e., the number of elements between the first
+ (leftmost) non-zero element and the element on the diagonal,
+ inclusive. Constraint: 1 <= NROW(i) <= i, for i=1,2,...,n.
+
+ 5: AL(LAL) -- DOUBLE PRECISION array Output
+ On exit: the elements within the envelope of the lower
+ triangular matrix L, taken in row by row order. The envelope
+ of L is identical to that of the lower triangle of A. The
+ unit diagonal elements of L are stored explicitly. See also
+ Section 8.
+
+ 6: D(N) -- DOUBLE PRECISION array Output
+ On exit: the diagonal elements of the the diagonal matrix D
+ . Note that the determinant of A is equal to the product of
+ these diagonal elements. If the value of the determinant is
+ required it should not be determined by forming the product
+ explicitly, because of the possibility of overflow or
+ underflow. The logarithm of the determinant may safely be
+ formed from the sum of the logarithms of the diagonal
+ elements.
+
+ 7: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or for some i, NROW(i) < 1 or NROW(i) > i,
+
+ or LAL < NROW(1) + NROW(2) +... + NROW(N).
+
+ IFAIL= 2
+ A is not positive-definite, or this property has been
+ destroyed by rounding errors. The factorization has not been
+ completed.
+
+ IFAIL= 3
+ A is not positive-definite, or this property has been
+ destroyed by rounding errors. The factorization has been
+ completed but may be very inaccurate (see Section 7).
+
+ 7. Accuracy
+
+ If IFAIL = 0 on exit, then the computed L and D satisfy the
+ T
+ relation LDL =A+F, where
+
+ 2
+ ||F|| <=km (epsilon)max a
+ 2 i ii
+
+ and
+
+ 2
+ ||F|| <=km (epsilon)||A|| ,
+ 2 2
+
+ where k is a constant of order unity, m is the largest value of
+ NROW(i), and (epsilon) is the machine precision. See Wilkinson
+ and Reinsch [2], pp 25--27, 54--55. If IFAIL = 3 on exit, then
+ the factorization has been completed although the matrix was not
+ positive-definite. However the factorization may be very
+ inaccurate and should be used only with great caution. For
+ instance, if it is used to solve a set of equations Ax=b using
+ F04MCF, the residual vector b-Ax should be checked.
+
+ 8. Further Comments
+
+ The time taken by the routine is approximately proportional to
+ the sum of squares of the values of NROW(i).
+
+ The distribution of row widths may be very non-uniform without
+ undue loss of efficiency. Moreover, the routine has been designed
+ to be as competitive as possible in speed with routines designed
+ for full or uniformly banded matrices, when applied to such
+ matrices.
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for parameters A and AL, in which case L
+ overwrites the lower triangle of A. However this is not standard
+ Fortran 77 and may not work in all implementations.
+
+ 9. Example
+
+ To obtain the Cholesky factorization of the symmetric matrix,
+ whose lower triangle is:
+
+ (1 )
+ (2 5 )
+ (0 3 13 )
+ (0 0 0 16 ).
+ (5 14 18 8 55 )
+ (0 0 0 24 17 77)
+
+ For this matrix, the elements of NROW must be set to 1, 2, 2, 1,
+ 5, 3, and the elements within the envelope must be supplied in
+ row order as:
+
+ 1, 2, 5, 3, 13, 16, 5, 14, 18, 8, 55, 24, 17, 77.
+
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01qcf}{NAG On-line Documentation: f01qcf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01QCF(3NAG) Foundation Library (12/10/92) F01QCF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01QCF
+ F01QCF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01QCF finds the QR factorization of the real m by n matrix A,
+ where m>=n.
+
+ 2. Specification
+
+ SUBROUTINE F01QCF (M, N, A, LDA, ZETA, IFAIL)
+ INTEGER M, N, LDA, IFAIL
+ DOUBLE PRECISION A(LDA,*), ZETA(*)
+
+ 3. Description
+
+ The m by n matrix A is factorized as
+
+ (R)
+ A=Q(0) when m>n,
+
+ A=QR when m=n,
+
+ where Q is an m by m orthogonal matrix and R is an n by n upper
+ triangular matrix. The factorization is obtained by Householder's
+ method. The kth transformation matrix, Q , which is used to
+ k
+ introduce zeros into the kth column of A is given in the form
+
+ (I 0 )
+ Q =(0 T )
+ k ( k)
+
+ where
+
+ T
+ T =I-u u ,
+ k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (zeta) is a scalar and z is an (m-k) element vector. (zeta)
+ k k k
+ and z are chosen to annihilate the elements below the triangular
+ k
+ part of A.
+
+ The vector u is returned in the kth element of the array ZETA
+ k
+ and in the kth column of A, such that (zeta) is in ZETA(k) and
+ k
+ the elements of z are in A(k+1,k),...,A(m,k). The elements of R
+ k
+ are returned in the upper triangular part of A.
+
+ Q is given by
+
+ T
+ Q=(Q Q ...Q ) .
+ n n-1 1
+
+ Good background descriptions to the QR factorization are given in
+ Dongarra et al [1] and Golub and Van Loan [2], but note that this
+ routine is not based upon LINPACK routine DQRDC.
+
+ 4. References
+
+ [1] Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979)
+ LINPACK Users' Guide. SIAM, Philadelphia.
+
+ [2] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ [3] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of columns of A.
+
+ When N = 0 then an immediate return is effected.
+ Constraint: N >= 0.
+
+ 3: A(LDA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,n).
+ On entry: the leading m by n part of the array A must
+ contain the matrix to be factorized. On exit: the n by n
+ upper triangular part of A will contain the upper triangular
+ matrix R and the m by n strictly lower triangular part of A
+ will contain details of the factorization as described in
+ Section 3.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01QCF is called.
+ Constraint: LDA >= max(1,M).
+
+ 5: ZETA(*) -- DOUBLE PRECISION array Output
+ Note: the dimension of the array ZETA must be at least max
+ (1,n) On exit: ZETA(k) contains the scalar (zeta) for the k
+ k
+ th transformation. If T =I then ZETA(k)=0.0, otherwise ZETA(
+ k
+ k) contains (zeta) as described in Section 3 and (zeta) is
+ k k
+
+ always in the range (1.0, \/2.0).
+
+ 6: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry M < N,
+
+ or N < 0,
+
+ or LDA < M.
+
+ 7. Accuracy
+
+ The computed factors Q and R satisfy the relation
+
+ (R)
+ Q(0)=A+E,
+
+ where
+
+ |||E|||<=c(epsilon)|||A|||,
+
+ and (epsilon) is the machine precision (see X02AJF(*)), c is a
+ modest function of m and n and |||.||| denotes the spectral (two)
+ norm.
+
+ 8. Further Comments
+
+ The approximate number of floating-point operations is given by
+ 2
+ 2n (3m-n)/3.
+
+ Following the use of this routine the operations
+
+ T
+ B:=QB and B:=Q B,
+
+ where B is an m by k matrix, can be performed by calls to F01QDF.
+ The operation B:=QB can be obtained by the call:
+
+
+ IFAIL = 0
+ CALL F01QDF('No transpose', 'Separate', M, N, A, LDA, ZETA,
+ * K, B, LDB, WORK, IFAIL)
+
+ T
+ and B:=Q B can be obtained by the call:
+
+
+ IFAIL = 0
+ CALL F01QDF('Transpose', 'Separate', M, N, A, LDA, ZETA,
+ * K, B, LDB, WORK, IFAIL)
+
+ In both cases WORK must be a k element array that is used as
+ workspace. If B is a one-dimensional array (single column) then
+ the parameter LDB can be replaced by M. See F01QDF for further
+ details.
+
+ The first k columns of the orthogonal matrix Q can either be
+ obtained by setting B to the first k columns of the unit matrix
+ and using the first of the above two calls, or by calling F01QEF,
+ which overwrites the k columns of Q on the first k columns of the
+ array A. Q is obtained by the call:
+
+
+ CALL F01QEF('Separate', M, N, K, A, LDA, ZETA, WORK, IFAIL)
+
+ As above WORK must be a k element array. If k is larger than N,
+ then A must have been declared to have at least k columns.
+
+ Operations involving the matrix R can readily be performed by the
+ Level 2 BLAS routines DTRSV and DTRMV (see Chapter F06), but note
+ that no test for near singularity of R is incorporated in DTRSV.
+ If R is singular, or nearly singular then F02WUF(*) can be used
+ to determine the singular value decomposition of R.
+
+ 9. Example
+
+ To obtain the QR factorization of the 5 by 3 matrix
+
+ (2.0 2.5 2.5)
+ (2.0 2.5 2.5)
+ A=(1.6 -0.4 2.8).
+ (2.0 -0.5 0.5)
+ (1.2 -0.3 -2.9)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01qdf}{NAG On-line Documentation: f01qdf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01QDF(3NAG) Foundation Library (12/10/92) F01QDF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01QDF
+ F01QDF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01QDF performs one of the transformations
+
+ T
+ B:=QB or B:=Q B,
+
+ where B is an m by ncolb real matrix and Q is an m by m
+ orthogonal matrix, given as the product of Householder
+ transformation matrices.
+
+ This routine is intended for use following F01QCF or F01QFF(*).
+
+ 2. Specification
+
+ SUBROUTINE F01QDF (TRANS, WHERET, M, N, A, LDA, ZETA,
+ 1 NCOLB, B, LDB, WORK, IFAIL)
+ INTEGER M, N, LDA, NCOLB, LDB, IFAIL
+ DOUBLE PRECISION A(LDA,*), ZETA(*), B(LDB,*), WORK(*)
+ CHARACTER*1 TRANS, WHERET
+
+ 3. Description
+
+ Q is assumed to be given by
+
+ T
+ Q=(Q Q ...Q ) ,
+ n n-1 1
+
+ Q being given in the form
+ k
+
+ (I 0 )
+ Q =(0 T )
+ k ( k)
+
+ where
+
+ T
+ T =I-u u ,
+ k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (zeta) is a scalar and z is an (m-k) element vector. z must be
+ k k k
+ supplied in the kth column of A in elements A(k+1,k),...,A(m,k)
+ and (zeta) must be supplied either in A(k,k) or in ZETA(k),
+ k
+ depending upon the parameter WHERET.
+
+ To obtain Q explicitly B may be set to I and pre-multiplied by Q.
+ T
+ This is more efficient than obtaining Q .
+
+ 4. References
+
+ [1] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ [2] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: TRANS -- CHARACTER*1 Input
+ On entry: the operation to be performed as follows:
+ TRANS = 'N' (No transpose)
+ Perform the operation B:=QB.
+
+ TRANS = 'T' or 'C' (Transpose)
+ T
+ Perform the operation B:=Q B.
+ Constraint: TRANS must be one of 'N', 'T' or 'C'.
+
+ 2: WHERET -- CHARACTER*1 Input
+ On entry: indicates where the elements of (zeta) are to be
+ found as follows:
+ WHERET = 'I' (In A)
+ The elements of (zeta) are in A.
+
+ WHERET = 'S' (Separate)
+ The elements of (zeta) are separate from A, in ZETA.
+ Constraint: WHERET must be one of 'I' or 'S'.
+
+ 3: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 4: N -- INTEGER Input
+ On entry: n, the number of columns of A.
+
+ When N = 0 then an immediate return is effected.
+ Constraint: N >= 0.
+
+ 5: A(LDA,*) -- DOUBLE PRECISION array Input
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the leading m by n strictly lower triangular part
+ of the array A must contain details of the matrix Q. In
+ addition, when WHERET = 'I', then the diagonal elements of A
+ must contain the elements of (zeta) as described under the
+ argument ZETA below.
+
+ When WHERET = 'S', the diagonal elements of the array A are
+ referenced, since they are used temporarily to store the
+ (zeta) , but they contain their original values on return.
+ k
+
+ 6: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01QDF is called.
+ Constraint: LDA >= max(1,M).
+
+ 7: ZETA(*) -- DOUBLE PRECISION array Input
+ Note: when WHERET = 'S', the dimension of the array ZETA
+ must be greater than or equal to max(1,N). On entry: if
+ WHERET = 'S', the array ZETA must contain the elements of
+ (zeta). If ZETA(k) = 0.0 then T is assumed to be I
+ k
+ otherwise ZETA(k) is assumed to contain (zeta) .
+ k
+
+ When WHERET = 'I', ZETA is not referenced.
+
+ 8: NCOLB -- INTEGER Input
+ On entry: ncolb, number of columns of B.
+
+ When NCOLB = 0 then an immediate return is effected.
+ Constraint: NCOLB >= 0.
+
+ 9: B(LDB,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,NCOLB).
+ On entry: the leading m by ncolb part of the array B must
+ contain the matrix to be transformed. On exit: B is
+ overwritten by the transformed matrix.
+
+ 10: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F01QDF is called.
+ Constraint: LDB >= max(1,M).
+
+ 11: WORK(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WORK must be at least
+ max(1,NCOLB).
+
+ 12: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry TRANS /= 'N', 'T' or 'C',
+
+ or WHERET /= 'I' or 'S',
+
+ or M < N,
+
+ or N < 0,
+
+ or LDA < M,
+
+ or NCOLB < 0,
+
+ or LDB < M.
+
+ 7. Accuracy
+
+ T
+ Letting C denote the computed matrix Q B, C satisfies the
+ relation
+
+ QC=B+E,
+
+ where
+
+ ||E||<=c(epsilon)||B||,
+
+ and (epsilon) the machine precision (see X02AJF(*)), c is a
+ modest function of m and |||.||| denotes the spectral (two) norm.
+ An equivalent result holds for the computed matrix QB. See also
+ Section 7 of F01QCF.
+
+ 8. Further Comments
+
+ The approximate number of floating-point operations is given by
+ 2n(2m-n)ncolb.
+
+ 9. Example
+
+ T
+ To obtain the matrix Q B for the matrix B given by
+
+ ( 1.1 0.00)
+ ( 0.9 0.00)
+ B=( 0.6 1.32)
+ ( 0.0 1.10)
+ (-0.8 -0.26)
+
+ following the QR factorization of the 5 by 3 matrix A given by
+
+ (2.0 2.5 2.5)
+ (2.0 2.5 2.5)
+ A=(1.6 -0.4 2.8).
+ (2.0 -0.5 0.5)
+ (1.2 -0.3 -2.9)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01qef}{NAG On-line Documentation: f01qef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01QEF(3NAG) Foundation Library (12/10/92) F01QEF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01QEF
+ F01QEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01QEF returns the first ncolq columns of the real m by m
+ orthogonal matrix Q, where Q is given as the product of
+ Householder transformation matrices.
+
+ This routine is intended for use following F01QCF or F01QFF(*).
+
+ 2. Specification
+
+ SUBROUTINE F01QEF (WHERET, M, N, NCOLQ, A, LDA, ZETA,
+ 1 WORK, IFAIL)
+ INTEGER M, N, NCOLQ, LDA, IFAIL
+ DOUBLE PRECISION A(LDA,*), ZETA(*), WORK(*)
+ CHARACTER*1 WHERET
+
+ 3. Description
+
+ Q is assumed to be given by
+
+ T
+ Q=(Q Q ...Q ) ,
+ n n-1 1
+
+ Q being given in the form
+ k
+
+ (I 0 )
+ Q =(0 T )
+ k ( k)
+
+ where
+
+ T
+ T =I-u u ,
+ k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (zeta) is a scalar and z is an (m-k) element vector. z must be
+ k k k
+ supplied in the kth column of A in elements A(k+1,k),...,A(m,k)
+ and (zeta) must be supplied either in A(k,k) or in ZETA(k),
+ k
+ depending upon the parameter WHERET.
+
+ 4. References
+
+ [1] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ [2] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: WHERET -- CHARACTER*1 Input
+ On entry: indicates where the elements of (zeta) are to be
+ found as follows:
+ WHERET = 'I' (In A)
+ The elements of (zeta) are in A.
+
+ WHERET = 'S' (Separate)
+ The elements of (zeta) are separate from A, in ZETA.
+ Constraint: WHERET must be one of 'I' or 'S'.
+
+ 2: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the number of columns of A. Constraint: N >=
+ 0.
+
+ 4: NCOLQ -- INTEGER Input
+ On entry: ncolq, the required number of columns of Q.
+ Constraint: 0 <= NCOLQ <= M.
+
+ When NCOLQ = 0 then an immediate return is effected.
+
+ 5: A(LDA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N,NCOLQ).
+ On entry: the leading m by n strictly lower triangular part
+ of the array A must contain details of the matrix Q. In
+ addition, when WHERET = 'I', then the diagonal elements of A
+ must contain the elements of (zeta) as described under the
+ argument ZETA below. On exit: the first NCOLQ columns of the
+ array A are overwritten by the first NCOLQ columns of the m
+ by m orthogonal matrix Q. When N = 0 then the first NCOLQ
+ columns of A are overwritten by the first NCOLQ columns of
+ the identity matrix.
+
+ 6: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01QEF is called.
+ Constraint: LDA >= max(1,M).
+
+ 7: ZETA(*) -- DOUBLE PRECISION array Input
+ Note: the dimension of the array ZETA must be at least
+ max(1,N).
+ On entry: with WHERET = 'S', the array ZETA must contain the
+ elements of (zeta). If ZETA(k) = 0.0 then T is assumed to
+ k
+ be I, otherwise ZETA(k) is assumed to contain (zeta) .
+ k
+
+ When WHERET = 'I', the array ZETA is not referenced.
+
+ 8: WORK(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WORK must be at least
+ max(1,NCOLQ).
+
+ 9: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry WHERET /= 'I' or 'S',
+
+ or M < N,
+
+ or N < 0,
+
+ or NCOLQ < 0 or NCOLQ > M,
+
+ or LDA < M.
+
+ 7. Accuracy
+
+ The computed matrix Q satisfies the relation
+
+ Q=P+E,
+
+ where P is an exactly orthogonal matrix and
+
+ ||E||<=c(epsilon)
+
+ (epsilon) is the machine precision (see X02AJF(*)), c is a modest
+ function of m and |||.||| denotes the spectral (two) norm. See
+ also Section 7 of F01QCF.
+
+ 8. Further Comments
+
+ The approximate number of floating-point operations required is
+ given by
+
+ 2
+ -n{(3m-n)(2ncolq-n)-n(ncolq-n)}, ncolq>n,
+ 3
+
+ 2 2
+ -ncolq (3m-ncolq), ncolq<=n.
+ 3
+
+ 9. Example
+
+ To obtain the 5 by 5 orthogonal matrix Q following the QR
+ factorization of the 5 by 3 matrix A given by
+
+ (2.0 2.5 2.5)
+ (2.0 2.5 2.5)
+ A=(1.6 -0.4 2.8).
+ (2.0 -0.5 0.5)
+ (1.2 -0.3 -2.9)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01rcf}{NAG On-line Documentation: f01rcf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01RCF(3NAG) Foundation Library (12/10/92) F01RCF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01RCF
+ F01RCF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01RCF finds the QR factorization of the complex m by n matrix A,
+ where m>=n.
+
+ 2. Specification
+
+ SUBROUTINE F01RCF (M, N, A, LDA, THETA, IFAIL)
+ INTEGER M, N, LDA, IFAIL
+ COMPLEX(KIND(1.0D0)) A(LDA,*), THETA(*)
+
+ 3. Description
+
+ The m by n matrix A is factorized as
+
+ (R)
+ A=Q(0) when m>n,
+
+ A=QR when m=n,
+
+ where Q is an m by m unitary matrix and R is an n by n upper
+ triangular matrix with real diagonal elements.
+
+ The factorization is obtained by Householder's method. The kth
+ transformation matrix, Q , which is used to introduce zeros into
+ k
+ the kth column of A is given in the form
+
+ (I 0 )
+ Q =(0 T ),
+ k ( k)
+
+ where
+
+ H
+ T =I-(gamma) u u ,
+ k k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (gamma) is a scalar for which Re (gamma) =1.0, (zeta) is a real
+ k k k
+ scalar and z is an (m-k) element vector. (gamma) , (zeta) and
+ k k k
+ z are chosen to annihilate the elements below the triangular
+ k
+ part of A and to make the diagonal elements real.
+
+ The scalar (gamma) and the vector u are returned in the kth
+ k k
+ element of the array THETA and in the kth column of A, such that
+ (theta) , given by
+ k
+
+ (theta) =((zeta) ,Im(gamma) ),
+ k k k
+
+ is in THETA(k) and the elements of z are in a ,...,a . The
+ k k+1,k m,k
+ elements of R are returned in the upper triangular part of A.
+
+ Q is given by
+
+ H
+ Q=(Q Q ...Q ) .
+ n n-1 1
+
+ A good background description to the QR factorization is given in
+ Dongarra et al [1], but note that this routine is not based upon
+ LINPACK routine ZQRDC.
+
+ 4. References
+
+ [1] Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979)
+ LINPACK Users' Guide. SIAM, Philadelphia.
+
+ [2] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of columns of A. Constraint: N >=
+ 0.
+
+ When N = 0 then an immediate return is effected.
+
+ 3: A(LDA,*) -- COMPLEX(KIND(1.0D0)) array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the leading m by n part of the array A must
+ contain the matrix to be factorized. On exit: the n by n
+ upper triangular part of A will contain the upper triangular
+ matrix R, with the imaginary parts of the diagonal elements
+ set to zero, and the m by n strictly lower triangular part
+ of A will contain details of the factorization as described
+ above.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01RCF is called.
+ Constraint: LDA >= max(1,M).
+
+ 5: THETA(*) -- COMPLEX(KIND(1.0D)) array Output
+ Note: the dimension of the array THETA must be at least
+ max(1,N).
+ On exit: the scalar (theta) for the kth transformation. If
+ k
+ T =I then THETA(k) = 0.0; if
+ k
+ ((alpha) 0)
+ T =( 0 I) Re(alpha)<0.0,
+ k
+ then THETA(k)=(alpha); otherwise THETA(k) contains THETA(k)
+ as described in Section 3 and Re(THETA(k)) is always in the
+
+
+ range (1.0, \/2.0).
+
+ 6: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry M < N,
+
+ or N < 0,
+
+ or LDA < M.
+
+ 7. Accuracy
+ The computed factors Q and R satisfy the relation
+
+ (R)
+ Q(0)=A+E,
+
+ where
+
+ ||E||<=c(epsilon)||A||,
+
+ (epsilon) being the machine precision, c is a modest function of
+ m and n and ||.|| denotes the spectral (two) norm.
+
+ 8. Further Comments
+
+ The approximate number of real floating-point operations is given
+ 2
+ by 8n (3m-n)/3.
+
+ Following the use of this routine the operations
+
+ H
+ B:=QB and B:=Q B,
+
+ where B is an m by k matrix, can be performed by calls to F01RDF.
+ The operation B:=QB can be obtained by the call:
+
+
+ IFAIL = 0
+ CALL F01RDF(`No conjugate', 'Separate', M, N, A, LDA, THETA,
+ * K, B, LDB, WORK, IFAIL)
+
+ H
+ and B:=Q B can be obtained by the call:
+
+
+ IFAIL = 0
+ CALL F01RDF(`Conjugate', 'Separate', M, N, A, LDA, THETA,
+ * K, B, LDB, WORK, IFAIL)
+
+ In both cases WORK must be a k element array that is used as
+ workspace. If B is a one-dimensional array (single column) then
+ the parameter LDB can be replaced by M. See F01RDF for further
+ details.
+
+ The first k columns of the unitary matrix Q can either be
+ obtained by setting B to the first k columns of the unit matrix
+ and using the first of the above two calls, or by calling F01REF,
+ which overwrites the k columns of Q on the first k columns of the
+ array A. Q is obtained by the call:
+
+
+ CALL F01REF(`Separate', M, N, K, A, LDA, THETA, WORK, IFAIL)
+
+ As above, WORK must be a k element array. If k is larger than n,
+ then A must have been declared to have at least k columns.
+
+ Operations involving the matrix R can readily be performed by the
+ Level 2 BLAS routines ZTRSV and ZTRMV (see Chapter F06), but note
+ that no test for near singularity of R is incorporated in ZTRSV.
+ If R is singular, or nearly singular, then F02XUF(*) can be used
+ to determine the singular value decomposition of R.
+
+ 9. Example
+
+ To obtain the QR factorization of the 5 by 3 matrix
+
+ ( 0.5i -0.5+1.5i -1.0+1.0i)
+ (0.4+0.3i 0.9+1.3i 0.2+1.4i)
+ A=( 0.4 -0.4+0.4i 1.8 ).
+ (0.3-0.4i 0.1+0.7i 0.0 )
+ ( -0.3i 0.3+0.3i 2.4i )
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01rdf}{NAG On-line Documentation: f01rdf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01RDF(3NAG) Foundation Library (12/10/92) F01RDF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01RDF
+ F01RDF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01RDF performs one of the transformations
+
+ H
+ B:=QB or B:=Q B,
+
+ where B is an m by ncolb complex matrix and Q is an m by m
+ unitary matrix, given as the product of Householder
+ transformation matrices.
+
+ This routine is intended for use following F01RCF or F01RFF(*).
+
+ 2. Specification
+
+ SUBROUTINE F01RDF (TRANS, WHERET, M, N, A, LDA, THETA,
+ 1 NCOLB, B, LDB, WORK, IFAIL)
+ INTEGER M, N, LDA, NCOLB, LDB, IFAIL
+ COMPLEX(KIND(1.0D0)) A(LDA,*), THETA(*), B(LDB,*), WORK(*)
+ CHARACTER*1 TRANS, WHERET
+
+ 3. Description
+
+ The unitary matrix Q is assumed to be given by
+
+ H
+ Q=(Q Q ...Q ) ,
+ n n-1 1
+
+ Q being given in the form
+ k
+
+ (I 0 )
+ Q =(0 T ),
+ k ( k)
+
+ where
+
+ H
+ T =I-(gamma) u u ,
+ k k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (gamma) is a scalar for which Re (gamma) =1.0, (zeta) is a real
+ k k k
+ scalar and z is an (m-k) element vector.
+ k
+
+ z must be supplied in the kth column of A in elements
+ k
+ a ,...,a and (theta) , given by
+ k+1,k m,k k
+
+ (theta) =((zeta) ,Im (gamma) ),
+ k k k
+
+ must be supplied either in a or in THETA(k), depending upon
+ k,k
+ the parameter WHERET.
+
+ To obtain Q explicitly B may be set to I and pre-multiplied by Q.
+ H
+ This is more efficient than obtaining Q . Alternatively, F01REF
+ may be used to obtain Q overwritten on A.
+
+ 4. References
+
+ [1] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: TRANS -- CHARACTER*1 Input
+ On entry: the operation to be performed as follows:
+ TRANS = 'N' (No transpose)
+ Perform the operation B:=QB.
+
+ TRANS = 'C' (Conjugate transpose)
+ H
+ Perform the operation B:=Q B.
+ Constraint: TRANS must be one of 'N' or 'C'.
+
+ 2: WHERET -- CHARACTER*1 Input
+ On entry: the elements of (theta) are to be found as
+ follows:
+ WHERET = 'I' (In A)
+ The elements of (theta) are in A.
+
+ WHERET = 'S' (Separate)
+ The elements of (theta) are separate from A, in THETA.
+ Constraint: WHERET must be one of 'I' or 'S'.
+
+ 3: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 4: N -- INTEGER Input
+ On entry: n, the number of columns of A. Constraint: N >=
+ 0.
+
+ When N = 0 then an immediate return is effected.
+
+ 5: A(LDA,*) -- COMPLEX(KIND(1.0D)) array Input
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the leading m by n strictly lower triangular part
+ of the array A must contain details of the matrix Q. In
+ addition, when WHERET = 'I', then the diagonal elements of A
+ must contain the elements of (theta) as described under the
+ argument THETA below.
+
+ When WHERET = 'S', then the diagonal elements of the array A
+ are referenced, since they are used temporarily to store the
+ (zeta) , but they contain their original values on return.
+ k
+
+ 6: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01RDF is called.
+ Constraint: LDA >= max(1,M).
+
+ 7: THETA(*) -- COMPLEX(KIND(1.0D)) array Input
+ Note: the dimension of the array THETA must be at least
+ max(1,N).
+ On entry: with WHERET = 'S', the array THETA must contain
+ the elements of (theta). If THETA(k)=0.0 then T is assumed
+ k
+ to be I; if THETA(k)=(alpha), with Re(alpha)<0.0, then T is
+ k
+ assumed to be of the form
+ ((alpha) 0)
+ T =(0 I);
+ k
+ otherwise THETA(k) is assumed to contain (theta) given by
+ k
+ (theta) =((zeta) ,Im(gamma) ).
+ k k k
+
+ When WHERET = 'I', the array THETA is not referenced, and
+ may be dimensioned of length 1.
+
+ 8: NCOLB -- INTEGER Input
+ On entry: ncolb, the number of columns of B. Constraint:
+ NCOLB >= 0.
+ When NCOLB = 0 then an immediate return is effected.
+
+ 9: B(LDB,*) -- COMPLEX(KIND(1.0D)) array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,NCOLB).
+ On entry: the leading m by ncolb part of the array B must
+ contain the matrix to be transformed. On exit: B is
+ overwritten by the transformed matrix.
+
+ 10: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F01RDF is called.
+ Constraint: LDB >= max(1,M).
+
+ 11: WORK(*) -- COMPLEX(KIND(1.0D)) array Workspace
+ Note: the dimension of the array WORK must be at least
+ max(1,NCOLB).
+
+ 12: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry TRANS /= 'N' or 'C',
+
+ or WHERET /= 'I' or 'S',
+
+ or M < N,
+
+ or N < 0,
+
+ or LDA < M,
+
+ or NCOLB < 0,
+
+ or LDB < M.
+
+ 7. Accuracy
+
+ Letting C denote the computed matrix Q B, C satisfies the
+ relation
+
+ QC=B+E,
+
+ where
+
+ ||E||<=c(epsilon)||B||,
+
+ (epsilon) being the machine precision, c is a modest function of
+ m and |||.||| denotes the spectral (two) norm. An equivalent
+ result holds for the computed matrix QB. See also Section 7 of
+ F01RCF.
+
+ 8. Further Comments
+
+ The approximate number of real floating-point operations is given
+ by 8n(2m-n)ncolb.
+
+ 9. Example
+
+ H
+ To obtain the matrix Q B for the matrix B given by
+
+ (-0.55+1.05i 0.45+1.05i)
+ ( 0.49+0.93i 1.09+0.13i)
+ B=( 0.56-0.16i 0.64+0.16i)
+ ( 0.39+0.23i -0.39-0.23i)
+ ( 1.13+0.83i -1.13+0.77i)
+
+ following the QR factorization of the 5 by 3 matrix A given by
+
+ ( 0.5i -0.5+1.5i -1.0+1.0i)
+ (0.4+0.3i 0.9+1.3i 0.2+1.4i)
+ A=( 0.4 -0.4+0.4i 1.8 ).
+ (0.3-0.4i 0.1+0.7i 0.0 )
+ ( -0.3i 0.3+0.3i 2.4i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf01ref}{NAG On-line Documentation: f01ref}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F01REF(3NAG) Foundation Library (12/10/92) F01REF(3NAG)
+
+
+
+ F01 -- Matrix Factorizations F01REF
+ F01REF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F01REF returns the first ncolq columns of the complex m by m
+ unitary matrix Q, where Q is given as the product of Householder
+ transformation matrices.
+
+ This routine is intended for use following F01RCF.
+
+ 2. Specification
+
+ SUBROUTINE F01REF (WHERET, M, N, NCOLQ, A, LDA, THETA,
+ 1 WORK, IFAIL)
+ INTEGER M, N, NCOLQ, LDA, IFAIL
+ COMPLEX(KIND(1.0D0)) A(LDA,*), THETA(*), WORK(*)
+ CHARACTER*1 WHERET
+
+ 3. Description
+
+ The unitary matrix Q is assumed to be given by
+
+ H
+ Q=(Q Q ...Q ) ,
+ n n-1 1
+
+ Q being given in the form
+ k
+
+ (I 0 )
+ Q =(0 T ),
+ k ( k)
+
+ where
+
+ H
+ T =I-(gamma) u u ,
+ k k k k
+
+ ((zeta) )
+ ( k)
+ u =(z ),
+ k ( k )
+
+ (gamma) is a scalar for which Re (gamma) =1.0, (zeta) is a real
+ k k k
+
+ scalar and z is an (m-k) element vector.
+ k
+
+ z must be supplied in the kth column of A in elements
+ k
+ a ,...,a and (theta) , given by
+ k+1,k m,k k
+
+ (theta) =((zeta) ,Im (gamma) ),
+ k k k
+
+ must be supplied either in a or in THETA(k) depending upon the
+ k,k
+ parameter WHERET.
+
+ 4. References
+
+ [1] Wilkinson J H (1965) The Algebraic Eigenvalue Problem.
+ Oxford University Press.
+
+ 5. Parameters
+
+ 1: WHERET -- CHARACTER*1 Input
+ On entry: the elements of (theta) are to be found as
+ follows:
+ WHERET = 'I' (In A)
+ The elements of (theta) are in A.
+
+ WHERET = 'S' (Separate)
+ The elements of (theta) are separate from A, in THETA.
+ Constraint: WHERET must be one of 'I' or 'S'.
+
+ 2: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the number of columns of A. Constraint: N >=
+ 0.
+
+ 4: NCOLQ -- INTEGER Input
+ On entry: ncolq, the required number of columns of Q.
+ Constraint: 0 <= NCOLQ <= M.
+
+ When NCOLQ = 0 then an immediate return is effected.
+
+ 5: A(LDA,*) -- COMPLEX(KIND(1.0D)) array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N,NCOLQ).
+ On entry: the leading m by n strictly lower triangular part
+ of the array A must contain details of the matrix Q. In
+ addition, when WHERET = 'I', then the diagonal elements of A
+ must contain the elements of (theta) as described under the
+ argument THETA below. On exit: the first NCOLQ columns of
+ the array A are overwritten by the first NCOLQ columns of
+ the m by m unitary matrix Q. When N = 0 then the first NCOLQ
+ columns of A are overwritten by the first NCOLQ columns of
+ the unit matrix.
+
+ 6: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F01REF is called.
+ Constraint: LDA >= max(1,M).
+
+ 7: THETA(*) -- COMPLEX(KIND(1.0D)) array Input
+ Note: the dimension of the array THETA must be at least
+ max(1,N).
+ On entry: if WHERET = 'S', the array THETA must contain the
+ elements of (theta). If THETA(k)=0.0 then T is assumed to
+ k
+ be I; if THETA(k)=(alpha), with Re(alpha)<0.0, then T is
+ k
+ assumed to be of the form
+ ((alpha) 0)
+ T =( 0 I);
+ k
+ otherwise THETA(k) is assumed to contain (theta) given by
+ k
+ (theta) =((zeta) ,Im(gamma) ).
+ k k k
+
+ When WHERET = 'I', the array THETA is not referenced.
+
+ 8: WORK(*) -- COMPLEX(KIND(1.0D)) array Workspace
+ Note: the dimension of the array WORK must be at least
+ max(1,NCOLQ).
+
+ 9: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ On entry WHERET /= 'I' or 'S',
+
+ or M < N,
+
+ or N < 0,
+
+ or NCOLQ < 0 or NCOLQ > M,
+
+ or LDA < M.
+
+ 7. Accuracy
+
+ The computed matrix Q satisfies the relation
+
+ Q=P+E,
+
+ where P is an exactly unitary matrix and
+
+ ||E||<=c(epsilon),
+
+ (epsilon) being the machine precision, c is a modest function of
+ m and |||.||| denotes the spectral (two) norm. See also Section 7
+ of F01RCF.
+
+ 8. Further Comments
+
+ The approximate number of real floating-point operations required
+ is given by
+
+ 8
+ -n{(3m-n)(2ncolq-n)-n(ncolq-n)}, ncolq>n
+ 3
+
+ 8 2
+ -ncolq (3m-ncolq), ncolq<=n
+ 3
+
+ 9. Example
+
+ To obtain the 5 by 5 unitary matrix Q following the QR
+ factorization of the 5 by 3 matrix A given by
+
+ ( 0.5i -0.5+1.5i -1.0+1.4i)
+ (0.4+0.3i 0.9+1.3i 0.2+1.4i)
+ A=(0.4 -0.4+0.4i 1.8 ).
+ (0.3-0.4i 0.1+0.7i 0.0 )
+ ( -0.3i 0.3+0.3i 2.4i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02}{NAG On-line Documentation: f02}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02(3NAG) Foundation Library (12/10/92) F02(3NAG)
+
+
+
+ F02 -- Eigenvalues and Eigenvectors Introduction -- F02
+ Chapter F02
+ Eigenvalues and Eigenvectors
+
+ 1. Scope of the Chapter
+
+ This chapter is concerned with computing
+
+ -- eigenvalues and eigenvectors of a matrix
+
+ -- eigenvalues and eigenvectors of generalized matrix
+ eigenvalue problems
+
+ -- singular values and singular vectors of a matrix.
+
+ 2. Background to the Problems
+
+ 2.1. Eigenvalue Problems
+
+ In the most usual form of eigenvalue problem we are given a
+ square n by n matrix A and wish to compute (lambda) (an
+ eigenvalue) and x/=0 (an eigenvector) which satisfy the equation
+
+ Ax=(lambda)x
+
+ Such problems are called 'standard' eigenvalue problems in
+ contrast to 'generalized' eigenvalue problems where we wish to
+ satisfy the equation
+
+ Ax=(lambda)Bx
+
+ B also being a square n by n matrix.
+
+ Section 2.1.1 and Section 2.1.2 discuss, respectively, standard
+ and generalized eigenvalue problems where the matrices involved
+ are dense; Section 2.1.3 discusses both types of problem in the
+ case where A and B are sparse (and symmetric).
+
+ 2.1.1. Standard eigenvalue problems
+
+ Some of the routines in this chapter find all the n eigenvalues,
+ some find all the n eigensolutions (eigenvalues and corresponding
+ eigenvectors), and some find a selected group of eigenvalues
+ and/or eigenvectors. The matrix A may be:
+
+ (i) general (real or complex)
+
+ (ii) real symmetric, or
+
+ (iii) complex Hermitian (so that if a =(alpha)+i(beta) then
+ ij
+ a =(alpha)-i(beta)).
+ ji
+
+ In all cases the computation starts with a similarity
+ -1
+ transformation S AS=T, where S is non-singular and is the
+ product of fairly simple matrices, and T has an 'easier form'
+ than A so that its eigensolutions are easily determined. The
+ matrices A and T, of course, have the same eigenvalues, and if y
+ is an eigenvector of T then Sy is the corresponding eigenvector
+ of A.
+
+ In case (i) (general real or complex A), the selected form of T
+ is an upper Hessenberg matrix (t =0 if i-j>1) and S is the
+ ij
+ product of n-2 stabilised elementary transformation matrices.
+ There is no easy method of computing selected eigenvalues of a
+ Hessenberg matrix, so that all eigenvalues are always calculated.
+ In the real case this computation is performed via the Francis QR
+ algorithm with double shifts, and in the complex case by means of
+ the LR algorithm. If the eigenvectors are required they are
+ computed by back-substitution following the QR and LR algorithm.
+
+ In case (ii) (real and symmetric A) the selected simple form of T
+ is a tridiagonal matrix (t =0 if |i-j|>1), and S is the product
+ ij
+ of n-2 orthogonal Householder transformation matrices. If only
+ selected eigenvalues are required, they are obtained by the
+ method of bisection using the Sturm sequence property, and the
+ corresponding eigenvectors of T are computed by inverse
+ iteration. If all eigenvalues are required, they are computed
+ from T via the QL algorithm (an adaptation of the QR algorithm),
+ and the corresponding eigenvectors of T are the product of the
+ transformations for the QL reduction. In all cases the
+ corresponding eigenvectors of A are recovered from the
+ computation of x=Sy.
+
+ In case (iii) (complex Hermitian A) analogous transformations as
+ in case (ii) are used. T has complex elements in off-diagonal
+ positions, but a simple diagonal similarity transformation is
+ then used to produce a real tridiagonal form, after which the QL
+ algorithm and succeeding methods described in the previous
+ paragraph are used to complete the solution.
+
+ 2.1.2. Generalized eigenvalue problems
+
+ Here we distinguish as a special case those problems in which
+ both A and B are symmetric and B is positive-definite and well-
+ conditioned with respect to inversion (i.e., all the eigenvalues
+ of B are significantly greater than zero). Such problems can be
+ satisfactorily treated by first reducing them to case (ii) of
+ Section 2.1.1 and then using the methods described there to
+ T
+ compute the eigensolutions. If B is factorized as LL (L lower
+ triangular), then Ax=(lambda)Bx is equivalent to the standard
+ -1 T -1 T
+ symmetric problem Ry=(lambda)y, where R=L A(L ) and y=L x.
+ After finding an eigenvector y of R, the required x is computed
+ T
+ by back-substitution in y=L x.
+
+ For generalized problems of the form Ax=(lambda)Bx which do not
+ fall into the special case, the QZ algorithm is provided.
+
+ In order to appreciate the domain in which this algorithm is
+ appropriate we remark first that when B is non-singular the
+ problem Ax=(lambda)Bx is fully equivalent to the problem
+ -1
+ (B A)x=(lambda)x; both the eigenvalues and eigenvectors being
+ the same. When A is non-singular Ax=(lambda)Bx is equivalent to
+ -1
+ the problem (A B)x=(mu)x; the eigenvalues (mu) being the
+ reciprocals of the required eigenvalues and the eigenvectors
+ remaining the same. In theory then, provided at least one of the
+ matrices A and B is non-singular, the generalized problem
+ Ax=(lambda)Bx could be solved via the standard problem
+ Cx=(lambda)x with an appropriate matrix C, and as far as economy
+ of effort is concerned this is quite satisfactory. However, in
+ practice, for this reduction to be satisfactory from the
+ standpoint of numerical stability, one requires more than the
+ -1
+ mere non-singularity of A or B. It is necessary that B A (or
+ -1
+ A B) should not only exist but that B (or A) should be well-
+ conditioned with respect to inversion. The nearer B (or A) is to
+ -1 -1
+ singularity the more unsatisfactory B A (or A B) will be as a
+ vehicle for determining the required eigenvalues. Unfortunately
+ -1
+ one cannot counter ill-conditioning in B (or A) by computing B A
+ -1
+ (or A B) accurately to single precision using iterative
+ refinement. Well-determined eigenvalues of the original
+ Ax=(lambda)Bx may be poorly determined even by the correctly
+ -1 -1
+ rounded version of B A (or A B). The situation may in some
+ instances be saved by the observation that if Ax=(lambda)Bx then
+ (A-kB)x=((lambda)-k)Bx. Hence if A-kB is non-singular we may
+ -1
+ solve the standard problem [(A-kB) B]x=(mu)x and for numerical
+ stability we require only that (A-kB) be well-conditioned with
+ respect to inversion.
+
+ In practice one may well be in a situation where no k is known
+ for which (A-kB) is well-conditioned with respect to inversion
+ and indeed (A-kB) may be singular for all k. The QZ algorithm is
+ designed to deal directly with the problem Ax=(lambda)Bx itself
+ and its performance is unaffected by singularity or near-
+ singularity of A, B or A-kB.
+
+ 2.1.3. Sparse symmetric problems
+
+ If the matrices A and B are large and sparse (i.e., only a small
+ proportion of the elements are non-zero), then the methods
+ described in the previous Section are unsuitable, because in
+ reducing the problem to a simpler form, much of the sparsity of
+ the problem would be lost; hence the computing time and the
+ storage required would be very large. Instead, for symmetric
+ problems, the method of simultaneous iteration may be used to
+ determine selected eigenvalues and the corresponding
+ eigenvectors. The routine provided has been designed to handle
+ both symmetric and generalized symmetric problems.
+
+ 2.2. Singular Value Problems
+
+ The singular value decomposition of an m by n real matrix A is
+ given by
+
+ T
+ A=QDP ,
+
+ where Q is an m by m orthogonal matrix, P is an n by n orthogonal
+ matrix and D is an m by n diagonal matrix with non-negative
+ diagonal elements. The first k==min(m,n) columns of Q and P are
+ the left- and right-hand singular vectors of A and the k diagonal
+ elements of D are the singular values.
+
+ When A is complex then the singular value decomposition is given
+ by
+
+ H
+ A=QDP ,
+
+ H T
+ where Q and P are unitary, P denotes the complex conjugate of P
+ and D is as above for the real case.
+
+ If the matrix A has column means of zero, then AP is the matrix
+ of principal components of A and the singular values are the
+ square roots of the sample variances of the observations with
+ respect to the principal components. (See also Chapter G03.)
+
+ Routines are provided to return the singular values and vectors
+ of a general real or complex matrix.
+
+ 3. Recommendations on Choice and Use of Routines
+
+ 3.1. General Discussion
+
+ There is one routine, F02FJF, which is designed for sparse
+ symmetric eigenvalue problems, either standard or generalized.
+ The remainder of the routines are designed for dense matrices.
+
+ 3.2. Eigenvalue and Eigenvector Routines
+
+ These reduce the matrix A to a simpler form by a similarity
+ -1
+ transformation S AS=T where T is an upper Hessenberg or
+ tridiagonal matrix, compute the eigensolutions of T, and then
+ recover the eigenvectors of A via the matrix S. The eigenvectors
+ are normalised so that
+
+ n
+ -- 2
+ > |x | =1
+ -- r
+ r=1
+
+ x being the rth component of the eigenvector x, and so that the
+ r
+ element of largest modulus is real if x is complex. For problems
+ of the type Ax=(lambda)Bx with A and B symmetric and B positive-
+ T
+ definite, the eigenvectors are normalised so that x Bx=1, x
+ always being real for such problems.
+
+ 3.3. Singular Value and Singular Vector Routines
+
+ These reduce the matrix A to real bidiagonal form, B say, by
+ T
+ orthogonal transformations Q AP=B in the real case, and by
+ H
+ unitary transformations Q AP=B in the complex case, and the
+ singular values and vectors are computed via this bidiagonal
+ form. The singular values are returned in descending order.
+
+ 3.4. Decision Trees
+
+ (i) Eigenvalues and Eigenvectors
+
+
+ Please see figure in printed Reference Manual
+
+
+ (ii) Singular Values and Singular Vectors
+
+
+ Please see figure in printed Reference Manual
+
+ F02 -- Eigenvalues and Eigenvectors Contents -- F02
+ Chapter F02
+
+ Eigenvalues and Eigenvectors
+
+ F02AAF All eigenvalues of real symmetric matrix
+
+ F02ABF All eigenvalues and eigenvectors of real symmetric matrix
+
+ F02ADF All eigenvalues of generalized real symmetric-definite
+ eigenproblem
+
+ F02AEF All eigenvalues and eigenvectors of generalized real
+ symmetric-definite eigenproblem
+
+ F02AFF All eigenvalues of real matrix
+
+ F02AGF All eigenvalues and eigenvectors of real matrix
+
+ F02AJF All eigenvalues of complex matrix
+
+ F02AKF All eigenvalues and eigenvectors of complex matrix
+
+ F02AWF All eigenvalues of complex Hermitian matrix
+
+ F02AXF All eigenvalues and eigenvectors of complex Hermitian
+ matrix
+
+ F02BBF Selected eigenvalues and eigenvectors of real symmetric
+ matrix
+
+ F02BJF All eigenvalues and optionally eigenvectors of
+ generalized eigenproblem by QZ algorithm, real matrices
+
+ F02FJF Selected eigenvalues and eigenvectors of sparse symmetric
+ eigenproblem
+
+ F02WEF SVD of real matrix
+
+ F02XEF SVD of complex matrix
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02aaf}{NAG On-line Documentation: f02aaf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AAF(3NAG) Foundation Library (12/10/92) F02AAF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AAF
+ F02AAF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AAF calculates all the eigenvalues of a real symmetric matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AAF (A, IA, N, R, E, IFAIL)
+ INTEGER IA, N, IFAIL
+ DOUBLE PRECISION A(IA,N), R(N), E(N)
+
+ 3. Description
+
+ This routine reduces the real symmetric matrix A to a real
+ symmetric tridiagonal matrix using Householder's method. The
+ eigenvalues of the tridiagonal matrix are then determined using
+ the QL algorithm.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the lower triangle of the n by n symmetric matrix
+ A. The elements of the array above the diagonal need not be
+ set. On exit: the elements of A below the diagonal are
+ overwritten, and the rest of the array is unchanged.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02AAF is called.
+ Constraint: IA >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 4: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 5: E(N) -- DOUBLE PRECISION array Workspace
+
+ 6: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ Failure in F02AVF(*) indicating that more than 30*N
+ iterations are required to isolate all the eigenvalues.
+
+ 7. Accuracy
+
+ The accuracy of the eigenvalues depends on the sensitivity of the
+ matrix to rounding errors produced in tridiagonalisation. For a
+ detailed error analysis see Wilkinson and Reinsch [1] pp 222 and
+ 235.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues of the real symmetric matrix:
+
+ ( 0.5 0.0 2.3 -2.6)
+ ( 0.0 0.5 -1.4 -0.7)
+ ( 2.3 -1.4 0.5 0.0).
+ (-2.6 -0.7 0.0 0.5)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02abf}{NAG On-line Documentation: f02abf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02ABF(3NAG) Foundation Library (12/10/92) F02ABF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02ABF
+ F02ABF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02ABF calculates all the eigenvalues and eigenvectors of a real
+ symmetric matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02ABF (A, IA, N, R, V, IV, E, IFAIL)
+ INTEGER IA, N, IV, IFAIL
+ DOUBLE PRECISION A(IA,N), R(N), V(IV,N), E(N)
+
+ 3. Description
+
+ This routine reduces the real symmetric matrix A to a real
+ symmetric tridiagonal matrix by Householder's method. The
+ eigenvalues and eigenvectors are calculated using the QL
+ algorithm.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input
+ On entry: the lower triangle of the n by n symmetric matrix
+ A. The elements of the array above the diagonal need not be
+ set. See also Section 8.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02ABF is called.
+ Constraint: IA >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 4: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 5: V(IV,N) -- DOUBLE PRECISION array Output
+ On exit: the normalised eigenvectors, stored by columns;
+ the ith column corresponds to the ith eigenvalue. The
+ eigenvectors are normalised so that the sum of squares of
+ the elements is equal to 1.
+
+ 6: IV -- INTEGER Input
+ On entry:
+ the first dimension of the array V as declared in the
+ (sub)program from which F02ABF is called.
+ Constraint: IV >= N.
+
+ 7: E(N) -- DOUBLE PRECISION array Workspace
+
+ 8: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ Failure in F02AMF(*) indicating that more than 30*N
+ iterations are required to isolate all the eigenvalues.
+
+ 7. Accuracy
+
+ The eigenvectors are always accurately orthogonal but the
+ accuracy of the individual eigenvectors is dependent on their
+ inherent sensitivity to changes in the original matrix. For a
+ detailed error analysis see Wilkinson and Reinsch [1] pp 222 and
+ 235.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for parameters A and V, in which case the
+ eigenvectors will overwrite the original matrix. However this is
+ not standard Fortran 77, and may not work on all systems.
+
+ 9. Example
+
+ To calculate all the eigenvalues and eigenvectors of the real
+ symmetric matrix:
+
+ ( 0.5 0.0 2.3 -2.6)
+ ( 0.0 0.5 -1.4 -0.7)
+ ( 2.3 -1.4 0.5 0.0).
+ (-2.6 -0.7 0.0 0.5)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02adf}{NAG On-line Documentation: f02adf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02ADF(3NAG) Foundation Library (12/10/92) F02ADF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02ADF
+ F02ADF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02ADF calculates all the eigenvalues of Ax=(lambda)Bx, where A
+ is a real symmetric matrix and B is a real symmetric positive-
+ definite matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02ADF (A, IA, B, IB, N, R, DE, IFAIL)
+ INTEGER IA, IB, N, IFAIL
+ DOUBLE PRECISION A(IA,N), B(IB,N), R(N), DE(N)
+
+ 3. Description
+
+ The problem is reduced to the standard symmetric eigenproblem
+ using Cholesky's method to decompose B into triangular matrices,
+ T
+ B=LL , where L is lower triangular. Then Ax=(lambda)Bx implies
+ -1 -T T T
+ (L AL )(L x)=(lambda)(L x); hence the eigenvalues of
+ Ax=(lambda)Bx are those of Py=(lambda)y where P is the symmetric
+ -1 -T
+ matrix L AL . Householder's method is used to tridiagonalise
+ the matrix P and the eigenvalues are then found using the QL
+ algorithm.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the upper triangle of the n by n symmetric matrix
+ A. The elements of the array below the diagonal need not be
+ set. On exit: the lower triangle of the array is
+ overwritten. The rest of the array is unchanged.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02ADF is called.
+ Constraint: IA >= N.
+
+ 3: B(IB,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the upper triangle of the n by n symmetric
+ positive-definite matrix B. The elements of the array below
+ the diagonal need not be set. On exit: the elements below
+ the diagonal are overwritten. The rest of the array is
+ unchanged.
+
+ 4: IB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F02ADF is called.
+ Constraint: IB >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrices A and B.
+
+ 6: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 7: DE(N) -- DOUBLE PRECISION array Workspace
+
+ 8: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ Failure in F01AEF(*); the matrix B is not positive-definite
+ possibly due to rounding errors.
+
+ IFAIL= 2
+ Failure in F02AVF(*), more than 30*N iterations are required
+ to isolate all the eigenvalues.
+
+ 7. Accuracy
+
+ In general this routine is very accurate. However, if B is ill-
+ conditioned with respect to inversion, the eigenvalues could be
+ inaccurately determined. For a detailed error analysis see
+ Wilkinson and Reinsch [1] pp 310, 222 and 235.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues of the general symmetric
+ eigenproblem Ax=(lambda) Bx where A is the symmetric matrix:
+
+ (0.5 1.5 6.6 4.8)
+ (1.5 6.5 16.2 8.6)
+ (6.6 16.2 37.6 9.8)
+ (4.8 8.6 9.8 -17.1)
+
+ and B is the symmetric positive-definite matrix:
+
+ (1 3 4 1)
+ (3 13 16 11)
+ (4 16 24 18).
+ (1 11 18 27)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02aef}{NAG On-line Documentation: f02aef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AEF(3NAG) Foundation Library (12/10/92) F02AEF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AEF
+ F02AEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AEF calculates all the eigenvalues and eigenvectors of
+ Ax=(lambda)Bx, where A is a real symmetric matrix and B is a
+ real symmetric positive-definite matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AEF (A, IA, B, IB, N, R, V, IV, DL, E, IFAIL)
+ INTEGER IA, IB, N, IV, IFAIL
+ DOUBLE PRECISION A(IA,N), B(IB,N), R(N), V(IV,N), DL(N), E
+ 1 (N)
+
+ 3. Description
+
+ The problem is reduced to the standard symmetric eigenproblem
+ using Cholesky's method to decompose B into triangular matrices
+ T
+ B=LL , where L is lower triangular. Then Ax=(lambda)Bx implies
+ -1 -T T T
+ (L AL )(L x)=(lambda)(L x); hence the eigenvalues of
+ Ax=(lambda)Bx are those of Py=(lambda)y, where P is the symmetric
+ -1 -T
+ matrix L AL . Householder's method is used to tridiagonalise
+ the matrix P and the eigenvalues are found using the QL
+ algorithm. An eigenvector z of the derived problem is related to
+ T
+ an eigenvector x of the original problem by z=L x. The
+ eigenvectors z are determined using the QL algorithm and are
+ T
+ normalised so that z z=1; the eigenvectors of the original
+ T
+ problem are then determined by solving L x=z, and are normalised
+ T
+ so that x Bx=1.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+
+ On entry: the upper triangle of the n by n symmetric matrix
+ A. The elements of the array below the diagonal need not be
+ set. On exit: the lower triangle of the array is
+ overwritten. The rest of the array is unchanged. See also
+ Section 8.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02AEF is called.
+ Constraint: IA >= N.
+
+ 3: B(IB,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the upper triangle of the n by n symmetric
+ positive-definite matrix B. The elements of the array below
+ the diagonal need not be set. On exit: the elements below
+ the diagonal are overwritten. The rest of the array is
+ unchanged.
+
+ 4: IB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F02AEF is called.
+ Constraint: IB >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrices A and B.
+
+ 6: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 7: V(IV,N) -- DOUBLE PRECISION array Output
+ On exit: the normalised eigenvectors, stored by columns;
+ the ith column corresponds to the ith eigenvalue. The
+ T
+ eigenvectors x are normalised so that x Bx=1. See also
+ Section 8.
+
+ 8: IV -- INTEGER Input
+ On entry:
+ the first dimension of the array V as declared in the
+ (sub)program from which F02AEF is called.
+ Constraint: IV >= N.
+
+ 9: DL(N) -- DOUBLE PRECISION array Workspace
+
+ 10: E(N) -- DOUBLE PRECISION array Workspace
+
+ 11: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ Failure in F01AEF(*); the matrix B is not positive-definite,
+ possibly due to rounding errors.
+
+ IFAIL= 2
+ Failure in F02AMF(*); more than 30*N iterations are required
+ to isolate all the eigenvalues.
+
+ 7. Accuracy
+
+ In general this routine is very accurate. However, if B is ill-
+ conditioned with respect to inversion, the eigenvectors could be
+ inaccurately determined. For a detailed error analysis see
+ Wilkinson and Reinsch [1] pp 310, 222 and 235.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for parameters A and V, in which case the
+ eigenvectors will overwrite the original matrix A. However this
+ is not standard Fortran 77, and may not work on all systems.
+
+ 9. Example
+
+ To calculate all the eigenvalues and eigenvectors of the general
+ symmetric eigenproblem Ax=(lambda) Bx where A is the symmetric
+ matrix:
+
+ (0.5 1.5 6.6 4.8)
+ (1.5 6.5 16.2 8.6)
+ (6.6 16.2 37.6 9.8)
+ (4.8 8.6 9.8 -17.1)
+
+ and B is the symmetric positive-definite matrix:
+
+ (1 3 4 1)
+ (3 13 16 11)
+ (4 16 24 18).
+ (1 11 18 27)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02aff}{NAG On-line Documentation: f02aff}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AFF(3NAG) Foundation Library (12/10/92) F02AFF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AFF
+ F02AFF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AFF calculates all the eigenvalues of a real unsymmetric
+ matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AFF (A, IA, N, RR, RI, INTGER, IFAIL)
+ INTEGER IA, N, INTGER(N), IFAIL
+ DOUBLE PRECISION A(IA,N), RR(N), RI(N)
+
+ 3. Description
+
+ The matrix A is first balanced and then reduced to upper
+ Hessenberg form using stabilised elementary similarity
+ transformations. The eigenvalues are then found using the QR
+ algorithm for real Hessenberg matrices.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the n by n matrix A. On exit: the array is
+ overwritten.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the dimension of the array A as declared in the (sub)program
+ from which F02AFF is called.
+ Constraint: IA >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 4: RR(N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvalues.
+
+ 5: RI(N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvalues.
+
+ 6: INTGER(N) -- INTEGER array Output
+ On exit: INTGER(i) contains the number of iterations used
+ to find the ith eigenvalue. If INTGER(i) is negative, the i
+ th eigenvalue is the second of a pair found simultaneously.
+
+ Note that the eigenvalues are found in reverse order,
+ starting with the nth.
+
+ 7: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ 7. Accuracy
+
+ The accuracy of the results depends on the original matrix and
+ the multiplicity of the roots. For a detailed error analysis see
+ Wilkinson and Reinsch [1] pp 352 and 367.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues of the real matrix:
+
+ ( 1.5 0.1 4.5 -1.5)
+ (-22.5 3.5 12.5 -2.5)
+ ( -2.5 0.3 4.5 -2.5).
+ ( -2.5 0.1 4.5 2.5)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02agf}{NAG On-line Documentation: f02agf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AGF(3NAG) Foundation Library (12/10/92) F02AGF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AGF
+ F02AGF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AGF calculates all the eigenvalues and eigenvectors of a real
+ unsymmetric matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AGF (A, IA, N, RR, RI, VR, IVR, VI, IVI,
+ 1 INTGER, IFAIL)
+ INTEGER IA, N, IVR, IVI, INTGER(N), IFAIL
+ DOUBLE PRECISION A(IA,N), RR(N), RI(N), VR(IVR,N), VI
+ 1 (IVI,N)
+
+ 3. Description
+
+ The matrix A is first balanced and then reduced to upper
+ Hessenberg form using real stabilised elementary similarity
+ transformations. The eigenvalues and eigenvectors of the
+ Hessenberg matrix are calculated using the QR algorithm. The
+ eigenvectors of the Hessenberg matrix are back-transformed to
+ give the eigenvectors of the original matrix A.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the n by n matrix A. On exit: the array is
+ overwritten.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02AGF is called.
+ Constraint: IA >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 4: RR(N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvalues.
+
+ 5: RI(N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvalues.
+
+ 6: VR(IVR,N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvalue.
+ The eigenvectors are normalised so that the sum of the
+ squares of the moduli of the elements is equal to 1 and the
+ element of largest modulus is real. This ensures that real
+ eigenvalues have real eigenvectors.
+
+ 7: IVR -- INTEGER Input
+ On entry:
+ the first dimension of the array VR as declared in the
+ (sub)program from which F02AGF is called.
+ Constraint: IVR >= N.
+
+ 8: VI(IVI,N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvalue.
+
+ 9: IVI -- INTEGER Input
+ On entry:
+ the first dimension of the array VI as declared in the
+ (sub)program from which F02AGF is called.
+ Constraint: IVI >= N.
+
+ 10: INTGER(N) -- INTEGER array Output
+ On exit: INTGER(i) contains the number of iterations used
+ to find the ith eigenvalue. If INTGER(i) is negative, the i
+ th eigenvalue is the second of a pair found simultaneously.
+
+ Note that the eigenvalues are found in reverse order,
+ starting with the nth.
+
+ 11: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ 7. Accuracy
+
+ The accuracy of the results depends on the original matrix and
+ the multiplicity of the roots. For a detailed error analysis see
+ Wilkinson and Reinsch [1] pp 352 and 390.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues and eigenvectors of the real
+ matrix:
+
+ ( 1.5 0.1 4.5 -1.5)
+ (-22.5 3.5 12.5 -2.5)
+ ( -2.5 0.3 4.5 -2.5).
+ ( -2.5 0.1 4.5 2.5)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02ajf}{NAG On-line Documentation: f02ajf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AJF(3NAG) Foundation Library (12/10/92) F02AJF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AJF
+ F02AJF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AJF calculates all the eigenvalues of a complex matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AJF (AR, IAR, AI, IAI, N, RR, RI, INTGER,
+ 1 IFAIL)
+ INTEGER IAR, IAI, N, INTGER(N), IFAIL
+ DOUBLE PRECISION AR(IAR,N), AI(IAI,N), RR(N), RI(N)
+
+ 3. Description
+
+ The complex matrix A is first balanced and then reduced to upper
+ Hessenberg form using stabilised elementary similarity
+ transformations. The eigenvalues are then found using the
+ modified LR algorithm for complex Hessenberg matrices.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: AR(IAR,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the real parts of the elements of the n by n
+ complex matrix A. On exit: the array is overwritten.
+
+ 2: IAR -- INTEGER Input
+ On entry:
+ the first dimension of the array AR as declared in the
+ (sub)program from which F02AJF is called.
+ Constraint: IAR >= N.
+
+ 3: AI(IAI,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the imaginary parts of the elements of the n by n
+ complex matrix A. On exit: the array is overwritten.
+
+ 4: IAI -- INTEGER Input
+ On entry:
+ the first dimension of the array AI as declared in the
+ (sub)program from which F02AJF is called.
+ Constraint: IAI >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 6: RR(N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvalues.
+
+ 7: RI(N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvalues.
+
+ 8: INTGER(N) -- INTEGER array Workspace
+
+ 9: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ 7. Accuracy
+
+ The accuracy of the results depends on the original matrix and
+ the multiplicity of the roots. For a detailed error analysis see
+ Wilkinson and Reinsch [1] pp 352 and 401.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues of the complex matrix:
+
+ (-21.0-5.0i 24.60i 13.6+10.2i 4.0i)
+ ( 22.5i 26.00-5.00i 7.5-10.0i 2.5 )
+ ( -2.0+1.5i 1.68+2.24i 4.5-5.0i 1.5+2.0i).
+ ( -2.5i -2.60 -2.7+3.6i 2.5-5.0i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02akf}{NAG On-line Documentation: f02akf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AKF(3NAG) Foundation Library (12/10/92) F02AKF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AKF
+ F02AKF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AKF calculates all the eigenvalues and eigenvectors of a
+ complex matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AKF (AR, IAR, AI, IAI, N, RR, RI, VR, IVR,
+ 1 VI, IVI, INTGER, IFAIL)
+ INTEGER IAR, IAI, N, IVR, IVI, INTGER(N), IFAIL
+ DOUBLE PRECISION AR(IAR,N), AI(IAI,N), RR(N), RI(N), VR
+ 1 (IVR,N), VI(IVI,N)
+
+ 3. Description
+
+ The complex matrix A is first balanced and then reduced to upper
+ Hessenberg form by stabilised elementary similarity
+ transformations. The eigenvalues and eigenvectors of the
+ Hessenberg matrix are calculated using the LR algorithm. The
+ eigenvectors of the Hessenberg matrix are back-transformed to
+ give the eigenvectors of the original matrix.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: AR(IAR,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the real parts of the elements of the n by n
+ complex matrix A. On exit: the array is overwritten.
+
+ 2: IAR -- INTEGER Input
+ On entry:
+ the first dimension of the array AR as declared in the
+ (sub)program from which F02AKF is called.
+ Constraint: IAR >= N.
+
+ 3: AI(IAI,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the imaginary parts of the elements of the n by n
+ complex matrix A. On exit: the array is overwritten.
+
+ 4: IAI -- INTEGER Input
+ On entry:
+ the first dimension of the array AI as declared in the
+ (sub)program from which F02AKF is called.
+ Constraint: IAI >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 6: RR(N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvalues.
+
+ 7: RI(N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvalues.
+
+ 8: VR(IVR,N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvalue.
+ The eigenvectors are normalised so that the sum of squares
+ of the moduli of the elements is equal to 1 and the element
+ of largest modulus is real.
+
+ 9: IVR -- INTEGER Input
+ On entry:
+ the first dimension of the array VR as declared in the
+ (sub)program from which F02AKF is called.
+ Constraint: IVR >= N.
+
+ 10: VI(IVI,N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvalue.
+
+ 11: IVI -- INTEGER Input
+ On entry:
+ the first dimension of the array VI as declared in the
+ (sub)program from which F02AKF is called.
+ Constraint: IVI >= N.
+
+ 12: INTGER(N) -- INTEGER array Workspace
+
+ 13: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ 7. Accuracy
+
+ The accuracy of the results depends on the conditioning of the
+ original matrix and the multiplicity of the roots. For a detailed
+ error analysis see Wilkinson and Reinsch [1] pp 352 and 390.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues and eigenvectors of the complex
+ matrix:
+
+ (-21.0-5.0i 24.60i 13.6+10.2i 4.0i)
+ ( 22.5i 26.00-5.00i 7.5-10.0i 2.5 )
+ ( -2.0+1.5i 1.68+2.24i 4.5-5.0i 1.5+2.0i).
+ ( -2.5i -2.60 -2.7+3.6i 2.5-5.0i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02awf}{NAG On-line Documentation: f02awf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AWF(3NAG) Foundation Library (12/10/92) F02AWF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AWF
+ F02AWF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AWF calculates all the eigenvalues of a complex Hermitian
+ matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AWF (AR, IAR, AI, IAI, N, R, WK1, WK2, WK3,
+ 1 IFAIL)
+ INTEGER IAR, IAI, N, IFAIL
+ DOUBLE PRECISION AR(IAR,N), AI(IAI,N), R(N), WK1(N),
+ 1 WK2(N), WK3(N)
+
+ 3. Description
+
+ The complex Hermitian matrix A is first reduced to a real
+ tridiagonal matrix by n-2 unitary transformations, and a
+ subsequent diagonal transformation. The eigenvalues are then
+ derived using the QL algorithm, an adaptation of the QR
+ algorithm.
+
+ 4. References
+
+ [1] Peters G (1967) NPL Algorithms Library. Document No.
+ F1/04/A.
+
+ [2] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: AR(IAR,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the real parts of the elements of the lower
+ triangle of the n by n complex Hermitian matrix A. Elements
+ of the array above the diagonal need not be set. On exit:
+ the array is overwritten.
+
+ 2: IAR -- INTEGER Input
+ On entry:
+ the first dimension of the array AR as declared in the
+ (sub)program from which F02AWF is called.
+ Constraint: IAR >= N.
+
+ 3: AI(IAI,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the imaginary parts of the elements of the lower
+ triangle of the n by n complex Hermitian matrix A. Elements
+ of the array above the diagonal need not be set. On exit:
+ the array is overwritten.
+
+ 4: IAI -- INTEGER Input
+ On entry:
+ the first dimension of the array AI as declared in the
+ (sub)program from which F02AWF is called.
+ Constraint: IAI >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the complex Hermitian matrix, A.
+
+ 6: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 7: WK1(N) -- DOUBLE PRECISION array Workspace
+
+ 8: WK2(N) -- DOUBLE PRECISION array Workspace
+
+ 9: WK3(N) -- DOUBLE PRECISION array Workspace
+
+ 10: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ 7. Accuracy
+
+ For a detailed error analysis see Peters [1] page 3 and Wilkinson
+ and Reinsch [2] page 235.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ 9. Example
+
+ To calculate all the eigenvalues of the complex Hermitian matrix:
+
+ (0.50 0.00 1.84+1.38i 2.08-1.56i)
+ (0.00 0.50 1.12+0.84i -0.56+0.42i)
+ (1.84-1.38i 1.12-0.84i 0.50 0.00 ).
+ (2.08+1.56i -0.56-0.42i 0.00 0.50 )
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02axf}{NAG On-line Documentation: f02axf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02AXF(3NAG) Foundation Library (12/10/92) F02AXF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02AXF
+ F02AXF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02AXF calculates all the eigenvalues and eigenvectors of a
+ complex Hermitian matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02AXF (AR, IAR, AI, IAI, N, R, VR, IVR, VI,
+ 1 IVI, WK1, WK2, WK3, IFAIL)
+ INTEGER IAR, IAI, N, IVR, IVI, IFAIL
+ DOUBLE PRECISION AR(IAR,N), AI(IAI,N), R(N), VR(IVR,N), VI
+ 1 (IVI,N), WK1(N), WK2(N), WK3(N)
+
+ 3. Description
+
+ The complex Hermitian matrix is first reduced to a real
+ tridiagonal matrix by n-2 unitary transformations and a
+ subsequent diagonal transformation. The eigenvalues and
+ eigenvectors are then derived using the QL algorithm, an
+ adaptation of the QR algorithm.
+
+ 4. References
+
+ [1] Peters G (1967) NPL Algorithms Library. Document No.
+ F2/03/A.
+
+ [2] Peters G (1967) NPL Algorithms Library. Document No.
+ F1/04/A.
+
+ 5. Parameters
+
+ 1: AR(IAR,N) -- DOUBLE PRECISION array Input
+ On entry: the real parts of the elements of the lower
+ triangle of the n by n complex Hermitian matrix A. Elements
+ of the array above the diagonal need not be set. See also
+ Section 8.
+
+ 2: IAR -- INTEGER Input
+ On entry:
+ the first dimension of the array AR as declared in the
+ (sub)program from which F02AXF is called.
+ Constraint: IAR >= N.
+
+ 3: AI(IAI,N) -- DOUBLE PRECISION array Input
+ On entry: the imaginary parts of the elements of the lower
+ triangle of the n by n complex Hermitian matrix A. Elements
+ of the array above the diagonal need not be set. See also
+ Section 8.
+
+ 4: IAI -- INTEGER Input
+ On entry:
+ the first dimension of the array AI as declared in the
+ (sub)program from which F02AXF is called.
+ Constraint: IAI >= N.
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrix, A.
+
+ 6: R(N) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues in ascending order.
+
+ 7: VR(IVR,N) -- DOUBLE PRECISION array Output
+ On exit: the real parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvector.
+ The eigenvectors are normalised so that the sum of the
+ squares of the moduli of the elements is equal to 1 and the
+ element of largest modulus is real. See also Section 8.
+
+ 8: IVR -- INTEGER Input
+ On entry:
+ the first dimension of the array VR as declared in the
+ (sub)program from which F02AXF is called.
+ Constraint: IVR >= N.
+
+ 9: VI(IVI,N) -- DOUBLE PRECISION array Output
+ On exit: the imaginary parts of the eigenvectors, stored by
+ columns. The ith column corresponds to the ith eigenvector.
+ See also Section 8.
+
+ 10: IVI -- INTEGER Input
+ On entry:
+ the first dimension of the array VI as declared in the
+ (sub)program from which F02AXF is called.
+ Constraint: IVI >= N.
+
+ 11: WK1(N) -- DOUBLE PRECISION array Workspace
+
+ 12: WK2(N) -- DOUBLE PRECISION array Workspace
+
+ 13: WK3(N) -- DOUBLE PRECISION array Workspace
+
+ 14: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ More than 30*N iterations are required to isolate all the
+ eigenvalues.
+
+ IFAIL= 2
+ The diagonal elements of AI are not all zero, i.e., the
+ complex matrix is not Hermitian.
+
+ 7. Accuracy
+
+ The eigenvectors are always accurately orthogonal but the
+ accuracy of the individual eigenvalues and eigenvectors is
+ dependent on their inherent sensitivity to small changes in the
+ original matrix. For a detailed error analysis see Peters [1]
+ page 3 and [2] page 3.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ Unless otherwise stated in the implementation document, the
+ routine may be called with the same actual array supplied for
+ parameters AR and VR, and for AI and VI, in which case the
+ eigenvectors will overwrite the original matrix A. However this
+ is not standard Fortran 77, and may not work on all systems.
+
+ 9. Example
+
+ To calculate the eigenvalues and eigenvectors of the complex
+ Hermitian matrix:
+
+ (0.50 0.00 1.84+1.38i 2.08-1.56i)
+ (0.00 0.50 1.12+0.84i -0.56+0.42i)
+ (1.84-1.38i 1.12-0.84i 0.50 0.00 ).
+ (2.08+1.56i -0.56-0.42i 0.00 0.50 )
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02bbf}{NAG On-line Documentation: f02bbf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02BBF(3NAG) Foundation Library (12/10/92) F02BBF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02BBF
+ F02BBF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02BBF calculates selected eigenvalues and eigenvectors of a real
+ symmetric matrix by reduction to tridiagonal form, bisection and
+ inverse iteration, where the selected eigenvalues lie within a
+ given interval.
+
+ 2. Specification
+
+ SUBROUTINE F02BBF (A, IA, N, ALB, UB, M, MM, R, V, IV, D,
+ 1 E, E2, X, G, C, ICOUNT, IFAIL)
+ INTEGER IA, N, M, MM, IV, ICOUNT(M), IFAIL
+ DOUBLE PRECISION A(IA,N), ALB, UB, R(M), V(IV,M), D(N), E
+ 1 (N), E2(N), X(N,7), G(N)
+ LOGICAL C(N)
+
+ 3. Description
+
+ The real symmetric matrix A is reduced to a symmetric tridiagonal
+ matrix T by Householder's method. The eigenvalues which lie
+ within a given interval [l,u], are calculated by the method of
+ bisection. The corresponding eigenvectors of T are calculated by
+ inverse iteration. A back-transformation is then performed to
+ obtain the eigenvectors of the original matrix A.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the lower triangle of the n by n symmetric matrix
+ A. The elements of the array above the diagonal need not be
+ set. On exit: the elements of A below the diagonal are
+ overwritten, and the rest of the array is unchanged.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02BBF is called.
+ Constraint: IA >= N.
+
+ 3: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 4: ALB -- DOUBLE PRECISION Input
+
+ 5: UB -- DOUBLE PRECISION Input
+ On entry: l and u, the lower and upper end-points of the
+ interval within which eigenvalues are to be calculated.
+
+ 6: M -- INTEGER Input
+ On entry: an upper bound for the number of eigenvalues
+ within the interval.
+
+ 7: MM -- INTEGER Output
+ On exit: the actual number of eigenvalues within the
+ interval.
+
+ 8: R(M) -- DOUBLE PRECISION array Output
+ On exit: the eigenvalues, not necessarily in ascending
+ order.
+
+ 9: V(IV,M) -- DOUBLE PRECISION array Output
+ On exit: the eigenvectors, stored by columns. The ith
+ column corresponds to the ith eigenvalue. The eigenvectors
+ are normalised so that the sum of the squares of the
+ elements are equal to 1.
+
+ 10: IV -- INTEGER Input
+ On entry:
+ the first dimension of the array V as declared in the
+ (sub)program from which F02BBF is called.
+ Constraint: IV >= N.
+
+ 11: D(N) -- DOUBLE PRECISION array Workspace
+
+ 12: E(N) -- DOUBLE PRECISION array Workspace
+
+ 13: E2(N) -- DOUBLE PRECISION array Workspace
+
+ 14: X(N,7) -- DOUBLE PRECISION array Workspace
+
+ 15: G(N) -- DOUBLE PRECISION array Workspace
+
+ 16: C(N) -- LOGICAL array Workspace
+
+ 17: ICOUNT(M) -- INTEGER array Output
+ On exit: ICOUNT(i) contains the number of iterations for
+ the ith eigenvalue.
+
+ 18: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ M is less than the number of eigenvalues in the given
+ interval. On exit MM contains the number of eigenvalues in
+ the interval. Rerun with this value for M.
+
+ IFAIL= 2
+ More than 5 iterations are required to determine any one
+ eigenvector.
+
+ 7. Accuracy
+
+ There is no guarantee of the accuracy of the eigenvectors as the
+ results depend on the original matrix and the multiplicity of the
+ roots. For a detailed error analysis see Wilkinson and Reinsch
+ [1] pp 222 and 436.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ This subroutine should only be used when less than 25% of the
+ eigenvalues and the corresponding eigenvectors are required. Also
+ this subroutine is less efficient with matrices which have
+ multiple eigenvalues.
+
+ 9. Example
+
+ To calculate the eigenvalues lying between -2.0 and 3.0, and the
+ corresponding eigenvectors of the real symmetric matrix:
+
+ ( 0.5 0.0 2.3 -2.6)
+ ( 0.0 0.5 -1.4 -0.7)
+ ( 2.3 -1.4 0.5 0.0).
+ (-2.6 -0.7 0.0 0.5)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02bjf}{NAG On-line Documentation: f02bjf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02BJF(3NAG) Foundation Library (12/10/92) F02BJF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02BJF
+ F02BJF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02BJF calculates all the eigenvalues and, if required, all the
+ eigenvectors of the generalized eigenproblem Ax=(lambda)Bx
+ where A and B are real, square matrices, using the QZ algorithm.
+
+ 2. Specification
+
+ SUBROUTINE F02BJF (N, A, IA, B, IB, EPS1, ALFR, ALFI,
+ 1 BETA, MATV, V, IV, ITER, IFAIL)
+ INTEGER N, IA, IB, IV, ITER(N), IFAIL
+ DOUBLE PRECISION A(IA,N), B(IB,N), EPS1, ALFR(N), ALFI(N),
+ 1 BETA(N), V(IV,N)
+ LOGICAL MATV
+
+ 3. Description
+
+ All the eigenvalues and, if required, all the eigenvectors of the
+ generalized eigenproblem Ax=(lambda)Bx where A and B are real,
+ square matrices, are determined using the QZ algorithm. The QZ
+ algorithm consists of 4 stages:
+
+ (a) A is reduced to upper Hessenberg form and at the same time
+ B is reduced to upper triangular form.
+
+ (b) A is further reduced to quasi-triangular form while the
+ triangular form of B is maintained.
+
+ (c) The quasi-triangular form of A is reduced to triangular
+ form and the eigenvalues extracted. This routine does not
+ actually produce the eigenvalues (lambda) , but instead
+ j
+ returns (alpha) and (beta) such that
+
+ j j
+ (lambda) =(alpha) /(beta) , j=1,2,...,.n
+ j j j
+ The division by (beta) becomes the responsibility of the
+ j
+ user's program, since (beta) may be zero indicating an
+ j
+ infinite eigenvalue. Pairs of complex eigenvalues occur
+ with (alpha) /(beta) and (alpha) /(beta) complex
+ j j j+1 j+1
+
+ conjugates, even though (alpha) and (alpha) are not
+ j j+1
+ conjugate.
+
+ (d) If the eigenvectors are required (MATV = .TRUE.), they are
+ obtained from the triangular matrices and then transformed
+ back into the original co-ordinate system.
+
+ 4. References
+
+ [1] Moler C B and Stewart G W (1973) An Algorithm for
+ Generalized Matrix Eigenproblems. SIAM J. Numer. Anal. 10
+ 241--256.
+
+ [2] Ward R C (1975) The Combination Shift QZ Algorithm. SIAM J.
+ Numer. Anal. 12 835--853.
+
+ [3] Wilkinson J H (1979) Kronecker's Canonical Form and the QZ
+ Algorithm. Linear Algebra and Appl. 28 285--303.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrices A and B.
+
+ 2: A(IA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the n by n matrix A. On exit: the array is
+ overwritten.
+
+ 3: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02BJF is called.
+ Constraint: IA >= N.
+
+ 4: B(IB,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the n by n matrix B. On exit: the array is
+ overwritten.
+
+ 5: IB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F02BJF is called.
+ Constraint: IB >= N.
+
+ 6: EPS1 -- DOUBLE PRECISION Input
+ On entry: the tolerance used to determine negligible
+ elements. If EPS1 > 0.0, an element will be considered
+ negligible if it is less than EPS1 times the norm of its
+ matrix. If EPS1 <= 0.0, machine precision is used in place
+ of EPS1. A positive value of EPS1 may result in faster
+ execution but less accurate results.
+
+ 7: ALFR(N) -- DOUBLE PRECISION array Output
+
+ 8: ALFI(N) -- DOUBLE PRECISION array Output
+ On exit: the real and imaginary parts of (alpha) , for
+ j
+ j=1,2,...,n.
+
+ 9: BETA(N) -- DOUBLE PRECISION array Output
+ On exit: (beta) , for j=1,2,...,n.
+ j
+
+ 10: MATV -- LOGICAL Input
+ On entry: MATV must be set .TRUE. if the eigenvectors are
+ required, otherwise .FALSE..
+
+ 11: V(IV,N) -- DOUBLE PRECISION array Output
+ On exit: if MATV = .TRUE., then
+ (i)if the jth eigenvalue is real, the jth column of V
+ contains its eigenvector;
+
+ (ii) if the jth and (j+1)th eigenvalues form a complex
+ pair, the jth and (j+1)th columns of V contain the
+ real and imaginary parts of the eigenvector associated
+ with the first eigenvalue of the pair. The conjugate
+ of this vector is the eigenvector for the conjugate
+ eigenvalue.
+ Each eigenvector is normalised so that the component of
+ largest modulus is real and the sum of squares of the moduli
+ equal one.
+
+ If MATV = .FALSE., V is not used.
+
+ 12: IV -- INTEGER Input
+ On entry:
+ the first dimension of the array V as declared in the
+ (sub)program from which F02BJF is called.
+ Constraint: IV >= N.
+
+ 13: ITER(N) -- INTEGER array Output
+ On exit: ITER(j) contains the number of iterations needed
+ to obtain the jth eigenvalue. Note that the eigenvalues are
+ obtained in reverse order, starting with the nth.
+
+ 14: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= i
+ More than 30*N iterations are required to determine all the
+ diagonal 1 by 1 or 2 by 2 blocks of the quasi-triangular
+ form in the second step of the QZ algorithm. IFAIL is set to
+ the index i of the eigenvalue at which this failure occurs.
+ If the soft failure option is used, (alpha) and (beta) are
+ j j
+ correct for j=i+1,i+2,...,n, but V does not contain any
+ correct eigenvectors.
+
+ 7. Accuracy
+
+ The computed eigenvalues are always exact for a problem
+ (A+E)x=(lambda)(B+F)x where ||E||/||A|| and ||F||/||B||
+ are both of the order of max(EPS1,(epsilon)), EPS1 being defined
+ as in Section 5 and (epsilon) being the machine precision.
+
+ Note: interpretation of results obtained with the QZ algorithm
+ often requires a clear understanding of the effects of small
+ changes in the original data. These effects are reviewed in
+ Wilkinson [3], in relation to the significance of small values of
+ (alpha) and (beta) . It should be noted that if (alpha) and
+ j j j
+ (beta) are both small for any j, it may be that no reliance can
+ j
+ be placed on any of the computed eigenvalues
+ (lambda) =(alpha) /(beta) . The user is recommended to study [3]
+ i i i
+ and, if in difficulty, to seek expert advice on determining the
+ sensitivity of the eigenvalues to perturbations in the data.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+ and also depends on the value chosen for parameter EPS1.
+
+ 9. Example
+
+ To find all the eigenvalues and eigenvectors of Ax=(lambda) Bx
+ where
+
+ (3.9 12.5 -34.5 -0.5)
+ (4.3 21.5 -47.5 7.5)
+ A=(4.3 21.5 -43.5 3.5)
+ (4.4 26.0 -46.0 6.0)
+
+ and
+
+ (1 2 -3 1)
+ (1 3 -5 4)
+ B=(1 3 -4 3).
+ (1 3 -4 4)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02fjf}{NAG On-line Documentation: f02fjf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02FJF(3NAG) Foundation Library (12/10/92) F02FJF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02FJF
+ F02FJF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ To find eigenvalues and eigenvectors of a real sparse symmetric
+ or generalized symmetric eigenvalue problem.
+
+ 2. Specification
+
+ SUBROUTINE F02FJF (N, M, K, NOITS, TOL, DOT, IMAGE, MONIT,
+ 1 NOVECS, X, NRX, D, WORK, LWORK, RWORK,
+ 2 LRWORK, IWORK, LIWORK, IFAIL)
+ INTEGER N, M, K, NOITS, NOVECS, NRX, LWORK,
+ 1 LRWORK, IWORK(LIWORK), LIWORK, IFAIL
+ DOUBLE PRECISION TOL, DOT, X(NRX,K), D(K), WORK(LWORK),
+ 1 RWORK(LRWORK)
+ EXTERNAL DOT, IMAGE, MONIT
+
+ 3. Description
+
+ F02FJF finds the m eigenvalues of largest absolute value and the
+ corresponding eigenvectors for the real eigenvalue problem
+
+ Cx=(lambda)x (1)
+
+ where C is an n by n matrix such that
+
+ T
+ BC=C B (2)
+
+ for a given positive-definite matrix B. C is said to be B-
+ symmetric. Different specifications of C allow for the solution
+ of a variety of eigenvalue problems. For example, when
+
+ T
+ C=A and B=I where A=A
+
+ the routine finds the m eigenvalues of largest absolute magnitude
+ for the standard symmetric eigenvalue problem
+
+ Ax=(lambda)x. (3)
+
+ The routine is intended for the case where A is sparse.
+
+ As a second example, when
+
+ -1
+ C=B A
+
+ where
+
+ T
+ A=A
+
+ the routine finds the m eigenvalues of largest absolute magnitude
+ for the generalized symmetric eigenvalue problem
+
+ Ax=(lambda)Bx. (4)
+
+ The routine is intended for the case where A and B are sparse.
+
+ The routine does not require C explicitly, but C is specified via
+ a user-supplied routine IMAGE which, given an n element vector z,
+ computes the image w given by
+
+ w=Cz.
+
+ -1
+ For instance, in the above example, where C=B A, routine IMAGE
+ will need to solve the positive-definite system of equations
+ Bw=Az for w.
+
+ To find the m eigenvalues of smallest absolute magnitude of (3)
+ -1
+ we can choose C=A and hence find the reciprocals of the
+ required eigenvalues, so that IMAGE will need to solve Aw=z for
+ -1
+ w, and correspondingly for (4) we can choose C=A B and solve
+ Aw=Bz for w.
+
+ A table of examples of choice of IMAGE is given in Table 3.1. It
+ should be remembered that the routine also returns the
+ corresponding eigenvectors and that B is positive-definite.
+ Throughout A is assumed to be symmetric and, where necessary,
+ non-singularity is also assumed.
+
+ Eigenvalues Problem
+ Required
+
+ Ax=(lambda)x (B=I)Ax=(lambda)Bx ABx=(lambda)x
+
+ Largest Compute Solve Compute
+ w=Az Bw=Az w=ABz
+
+ Smallest Solve Solve Solve
+ (Find Aw=z Aw=Bz Av=z, Bw=(nu)
+ 1/(lambda))
+
+ Furthest Compute Solve Compute
+ from w=(A-(sigma)I)z Bw=(A-(sigma)B)z w=(AB-(sigma)I)z
+ (sigma)
+ (Find
+ (lambda)-
+ (sigma))
+
+ Closest to Solve Solve Solve
+ (sigma) (A-(sigma)I)w=z (A-(sigma)B)w=Bz (AB-(sigma)I)w=z
+ (Find 1/((
+ lambda)-
+ (sigma)))
+
+
+ Table 3.1
+ The Requirement of IMAGE for Various Problems
+
+ The matrix B also need not be supplied explicitly, but is
+ specified via a user-supplied routine DOT which, given n element
+ T
+ vectors z and w, computes the generalized dot product w Bz.
+
+ F02FJF is based upon routine SIMITZ (see Nikolai [1]), which is
+ itself a derivative of the Algol procedure ritzit (see
+ Rutishauser [4]), and uses the method of simultaneous (subspace)
+ iteration. (See Parlett [2] for description, analysis and advice
+ on the use of the method.)
+
+ The routine performs simultaneous iteration on k>m vectors.
+ Initial estimates to p<=k eigenvectors, corresponding to the p
+ eigenvalues of C of largest absolute value, may be supplied by
+ the user to F02FJF. When possible k should be chosen so that the
+ kth eigenvalue is not too close to the m required eigenvalues,
+ but if k is initially chosen too small then F02FJF may be re-
+ entered, supplying approximations to the k eigenvectors found so
+ far and with k then increased.
+
+ At each major iteration F02FJF solves an r by r (r<=k) eigenvalue
+ sub-problem in order to obtain an approximation to the
+ eigenvalues for which convergence has not yet occurred. This
+ approximation is refined by Chebyshev acceleration.
+
+ 4. References
+
+ [1] Nikolai P J (1979) Algorithm 538: Eigenvectors and
+ eigenvalues of real generalized symmetric matrices by
+ simultaneous iteration. ACM Trans. Math. Softw. 5 118--125.
+
+ [2] Parlett B N (1980) The Symmetric Eigenvalue Problem.
+ Prentice-Hall.
+
+ [3] Rutishauser H (1969) Computational aspects of F L Bauer's
+ simultaneous iteration method. Num. Math. 13 4--13.
+
+ [4] Rutishauser H (1970) Simultaneous iteration method for
+ symmetric matrices. Num. Math. 16 205--223.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix C. Constraint: N >= 1.
+
+ 2: M -- INTEGER Input/Output
+ On entry: m, the number of eigenvalues required.
+ '
+ Constraint: M >= 1. On exit: m, the number of eigenvalues
+ actually found. It is equal to m if IFAIL = 0 on exit, and
+ is less than m if IFAIL = 2, 3 or 4. See Section 6 and
+ Section 8 for further information.
+
+ 3: K -- INTEGER Input
+ On entry: the number of simultaneous iteration vectors to be
+ used. Too small a value of K may inhibit convergence, while
+ a larger value of K incurs additional storage and additional
+ work per iteration. Suggested value: K = M + 4 will often be
+ a reasonable choice in the absence of better information.
+ Constraint: M < K <= N.
+
+ 4: NOITS -- INTEGER Input/Output
+ On entry: the maximum number of major iterations (eigenvalue
+ sub-problems) to be performed. If NOITS <= 0, then the value
+ 100 is used in place of NOITS. On exit: the number of
+ iterations actually performed.
+
+ 5: TOL -- DOUBLE PRECISION Input
+ On entry: a relative tolerance to be used in accepting
+ eigenvalues and eigenvectors. If the eigenvalues are
+ required to about t significant figures, then TOL should be
+ -t
+ set to about 10 . d is accepted as an eigenvalue as soon
+ i
+ as two successive approximations to d differ by less than
+ i
+ ~ ~
+ (|d |*TOL)/10, where d is the latest aproximation to d .
+ i i i
+ Once an eigenvalue has been accepted, then an eigenvector is
+ accepted as soon as (d f )/(d -d )<TOL, where f is the
+ i i i k i
+ normalised residual of the current approximation to the
+ eigenvector (see Section 8 for further information). The
+ values of the f and d can be printed from routine MONIT.
+ i i
+ If TOL is supplied outside the range ((epsilon), 1.0), where
+ (epsilon) is the machine precision, then the value (epsilon)
+ is used in place of TOL.
+
+ 6: DOT -- DOUBLE PRECISION FUNCTION, supplied by the user.
+ External Procedure
+ T
+ DOT must return the value w Bz for given vectors w and z.
+ For the standard eigenvalue problem, where B=I, DOT must
+ T
+ return the dot product w z.
+
+ Its specification is:
+
+ DOUBLE PRECISION FUNCTION DOT (IFLAG, N, Z, W,
+ 1 RWORK, LRWORK,
+ 2 IWORK, LIWORK)
+ INTEGER IFLAG, N, LRWORK, IWORK(LIWORK),
+ 1 LIWORK
+ DOUBLE PRECISION Z(N), W(N), RWORK(LRWORK)
+
+ 1: IFLAG -- INTEGER Input/Output
+ On entry: IFLAG is always non-negative. On exit: IFLAG
+ may be used as a flag to indicate a failure in the
+ T
+ computation of w Bz. If IFLAG is negative on exit from
+ DOT, then F02FJF will exit immediately with IFAIL set
+ to IFLAG. Note that in this case DOT must still be
+ assigned a value.
+
+ 2: N -- INTEGER Input
+ On entry: the number of elements in the vectors z and w
+ and the order of the matrix B.
+
+ 3: Z(N) -- DOUBLE PRECISION array Input
+ T
+ On entry: the vector z for which w Bz is required.
+
+ 4: W(N) -- DOUBLE PRECISION array Input
+ T
+ On entry: the vector w for which w Bz is required.
+
+ 5: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+
+
+ 6: LRWORK -- INTEGER Input
+
+
+ 7: IWORK(LIWORK) -- INTEGER array User Workspace
+
+
+ 8: LIWORK -- INTEGER Input
+ DOT is called from F02FJF with the parameters RWORK,
+ LRWORK, IWORK and LIWORK as supplied to F02FJF. The
+ user is free to use the arrays RWORK and IWORK to
+ supply information to DOT and to IMAGE as an
+ alternative to using COMMON.
+ DOT must be declared as EXTERNAL in the (sub)program
+ from which F02FJF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 7: IMAGE -- SUBROUTINE, supplied by the user.
+ External Procedure
+ IMAGE must return the vector w=Cz for a given vector z.
+
+ Its specification is:
+
+ SUBROUTINE IMAGE (IFLAG, N, Z, W, RWORK, LRWORK,
+ 1 IWORK, LIWORK)
+ INTEGER IFLAG, N, LRWORK, IWORK(LIWORK),
+ 1 LIWORK
+ DOUBLE PRECISION Z(N), W(N), RWORK(LRWORK)
+
+ 1: IFLAG -- INTEGER Input/Output
+ On entry: IFLAG is always non-negative. On exit: IFLAG
+ may be used as a flag to indicate a failure in the
+ computation of w. If IFLAG is negative on exit from
+ IMAGE, then F02FJF will exit immediately with IFAIL set
+ to IFLAG.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of elements in the vectors w
+ and z, and the order of the matrix C.
+
+ 3: Z(N) -- DOUBLE PRECISION array Input
+ On entry: the vector z for which Cz is required.
+
+ 4: W(N) -- DOUBLE PRECISION array Output
+ On exit: the vector w=Cz.
+
+ 5: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+
+ 6: LRWORK -- INTEGER Input
+
+ 7: IWORK(LIWORK) -- INTEGER array User Workspace
+
+ 8: LIWORK -- INTEGER Input
+ IMAGE is called from F02FJF with the parameters RWORK,
+ LRWORK, IWORK and LIWORK as supplied to F02FJF. The
+ user is free to use the arrays RWORK and IWORK to
+ supply information to IMAGE and DOT as an alternative
+ to using COMMON.
+ IMAGE must be declared as EXTERNAL in the (sub)program
+ from which F02FJF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 8: MONIT -- SUBROUTINE, supplied by the user.
+ External Procedure
+ MONIT is used to monitor the progress of F02FJF. MONIT may
+ be the dummy subroutine F02FJZ if no monitoring is actually
+ required. (F02FJZ is included in the NAG Foundation Library
+ and so need not be supplied by the user. The routine name
+ F02FJZ may be implementation dependent: see the Users' Note
+ for your implementation for details.) MONIT is called after
+ the solution of each eigenvalue sub-problem and also just
+ prior to return from F02FJF. The parameters ISTATE and
+ NEXTIT allow selective printing by MONIT.
+
+ Its specification is:
+
+ SUBROUTINE MONIT (ISTATE, NEXTIT, NEVALS,
+ 1 NEVECS, K, F, D)
+ INTEGER ISTATE, NEXTIT, NEVALS, NEVECS,
+ 1 K
+ DOUBLE PRECISION F(K), D(K)
+
+ 1: ISTATE -- INTEGER Input
+ On entry: ISTATE specifies the state of F02FJF and will
+ have values as follows:
+ ISTATE = 0
+ No eigenvalue or eigenvector has just been
+ accepted.
+
+ ISTATE = 1
+ One or more eigenvalues have been accepted since
+ the last call to MONIT.
+
+ ISTATE = 2
+ One or more eigenvectors have been accepted since
+ the last call to MONIT.
+
+ ISTATE = 3
+ One or more eigenvalues and eigenvectors have
+ been accepted since the last call to MONIT.
+
+ ISTATE = 4
+ Return from F02FJF is about to occur.
+
+ 2: NEXTIT -- INTEGER Input
+ On entry: the number of the next iteration.
+
+ 3: NEVALS -- INTEGER Input
+ On entry: the number of eigenvalues accepted so far.
+
+ 4: NEVECS -- INTEGER Input
+ On entry: the number of eigenvectors accepted so far.
+
+ 5: K -- INTEGER Input
+ On entry: k, the number of simultaneous iteration
+ vectors.
+
+ 6: F(K) -- DOUBLE PRECISION array Input
+ On entry: a vector of error quantities measuring the
+ state of convergence of the simultaneous iteration
+ vectors. See the parameter TOL of F02FJF above and
+ Section 8 for further details. Each element of F is
+ initially set to the value 4.0 and an element remains
+ at 4.0 until the corresponding vector is tested.
+
+ 7: D(K) -- DOUBLE PRECISION array Input
+ On entry: D(i) contains the latest approximation to the
+ absolute value of the ith eigenvalue of C.
+ MONIT must be declared as EXTERNAL in the (sub)program
+ from which F02FJF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 9: NOVECS -- INTEGER Input
+ On entry: the number of approximate vectors that are being
+ supplied in X. If NOVECS is outside the range (0,K), then
+ the value 0 is used in place of NOVECS.
+
+ 10: X(NRX,K) -- DOUBLE PRECISION array Input/Output
+ On entry: if 0 < NOVECS <= K, the first NOVECS columns of X
+ must contain approximations to the eigenvectors
+ corresponding to the NOVECS eigenvalues of largest absolute
+ value of C. Supplying approximate eigenvectors can be useful
+ when reasonable approximations are known, or when the
+ routine is being restarted with a larger value of K.
+ Otherwise it is not necessary to supply approximate vectors,
+ as simultaneous iteration vectors will be generated randomly
+ by the routine. On exit: if IFAIL = 0, 2, 3 or 4, the first
+ m' columns contain the eigenvectors corresponding to the
+ eigenvalues returned in the first m' elements of D (see
+ below); and the next k-m'-1 columns contain approximations
+ to the eigenvectors corresponding to the approximate
+ eigenvalues returned in the next k-m'-1 elements of D. Here
+ m' is the value returned in M (see above), the number of
+ eigenvalues actually found. The kth column is used as
+ workspace.
+
+ 11: NRX -- INTEGER Input
+ On entry:
+ the first dimension of the array X as declared in the
+ (sub)program from which F02FJF is called.
+ Constraint: NRX >= N.
+
+ 12: D(K) -- DOUBLE PRECISION array Output
+ On exit: if IFAIL = 0, 2, 3 or 4, the first m' elements
+ contain the first m' eigenvalues in decreasing order of
+ magnitude; and the next k-m'-1 elements contain
+ approximations to the next k-m'-1 eigenvalues. Here m' is
+ the value returned in M (see above), the number of
+ eigenvalues actually found. D(k) contains the value e where
+ (-e,e) is the latest interval over which Chebyshev
+ acceleration is performed.
+
+ 13: WORK(LWORK) -- DOUBLE PRECISION array Workspace
+
+ 14: LWORK -- INTEGER Input
+ On entry: the length of the array WORK, as declared in the
+ (sub)program from which F02FJF is called. Constraint:
+ LWORK>=3*K+max(K*K,2*N).
+
+ 15: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+ RWORK is not used by F02FJF, but is passed directly to
+ routines DOT and IMAGE and may be used to supply information
+ to these routines.
+
+ 16: LRWORK -- INTEGER Input
+ On entry: the length of the array RWORK, as declared in the
+ (sub)program from which F02FJF is called. Constraint: LRWORK
+ >= 1.
+
+ 17: IWORK(LIWORK) -- INTEGER array User Workspace
+ IWORK is not used by F02FJF, but is passed directly to
+ routines DOT and IMAGE and may be used to supply information
+ to these routines.
+
+ 18: LIWORK -- INTEGER Input
+ On entry: the length of the array IWORK, as declared in the
+ (sub)program from which F02FJF is called. Constraint: LIWORK
+ >= 1.
+
+ 19: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. Users who are
+ unfamiliar with this parameter should refer to the Essential
+ Introduction for details.
+
+ On exit: IFAIL = 0 unless the routine detects an error or
+ gives a warning (see Section 6).
+
+ For this routine, because the values of output parameters
+ may be useful even if IFAIL /=0 on exit, users are
+ recommended to set IFAIL to -1 before entry. It is then
+ essential to test the value of IFAIL on exit. To suppress
+ the output of an error message when soft failure occurs, set
+ IFAIL to 1.
+
+ 6. Error Indicators and Warnings
+
+ Errors or warnings specified by the routine:
+
+
+ IFAIL< 0
+ A negative value of IFAIL indicates an exit from F02FJF
+ because the user has set IFLAG negative in DOT or IMAGE. The
+ value of IFAIL will be the same as the user's setting of
+ IFLAG.
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or M < 1,
+
+ or M >= K,
+
+ or K > N,
+
+ or NRX < N,
+
+ or LWORK <3*K+max(K*K*N),
+
+ or LRWORK < 1,
+
+ or LIWORK < 1.
+
+ IFAIL= 2
+ Not all the requested eigenvalues and vectors have been
+ obtained. Approximations to the rth eigenvalue are
+ oscillating rapidly indicating that severe cancellation is
+ occurring in the rth eigenvector and so M is returned as (r-
+ 1). A restart with a larger value of K may permit
+ convergence.
+
+ IFAIL= 3
+ Not all the requested eigenvalues and vectors have been
+ obtained. The rate of convergence of the remaining
+ eigenvectors suggests that more than NOITS iterations would
+ be required and so the input value of M has been reduced. A
+ restart with a larger value of K may permit convergence.
+
+ IFAIL= 4
+ Not all the requested eigenvalues and vectors have been
+ obtained. NOITS iterations have been performed. A restart,
+ possibly with a larger value of K, may permit convergence.
+
+ IFAIL= 5
+ This error is very unlikely to occur, but indicates that
+ convergence of the eigenvalue sub-problem has not taken
+ place. Restarting with a different set of approximate
+ vectors may allow convergence. If this error occurs the user
+ should check carefully that F02FJF is being called
+ correctly.
+
+ 7. Accuracy
+
+ Eigenvalues and eigenvectors will normally be computed to the
+ accuracy requested by the parameter TOL, but eigenvectors
+ corresponding to small or to close eigenvalues may not always be
+ computed to the accuracy requested by the parameter TOL. Use of
+ the routine MONIT to monitor acceptance of eigenvalues and
+ eigenvectors is recommended.
+
+ 8. Further Comments
+
+ The time taken by the routine will be principally determined by
+ the time taken to solve the eigenvalue sub-problem and the time
+ taken by the routines DOT and IMAGE. The time taken to solve an
+ 2
+ eigenvalue sub-problem is approximately proportional to nk . It
+ is important to be aware that several calls to DOT and IMAGE may
+ occur on each major iteration.
+
+ As can be seen from Table 3.1, many applications of F02FJF will
+ require routine IMAGE to solve a system of linear equations. For
+ example, to find the smallest eigenvalues of Ax=(lambda)Bx, IMAGE
+ needs to solve equations of the form Aw=Bz for w and routines
+ from Chapters F01 and F04 of the NAG Foundation Library will
+ frequently be useful in this context. In particular, if A is a
+ positive-definite variable band matrix, F04MCF may be used after
+ A has been factorized by F01MCF. Thus factorization need be
+ performed only once prior to calling F02FJF. An illustration of
+ this type of use is given in the example program in Section 9.
+
+ ~
+ An approximation d , to the ith eigenvalue, is accepted as soon
+ h
+ ~
+ as d and the previous approximation differ by less than
+ h
+ ~
+ |d |*TOL/10. Eigenvectors are accepted in groups corresponding to
+ h
+ clusters of eigenvalues that are equal, or nearly equal, in
+ absolute value and that have already been accepted. If d is the
+ r
+ last eigenvalue in such a group and we define the residual r as
+ j
+
+ r =Cx -y
+ j j r
+
+ where y is the projection of Cx , with respect to B, onto the
+ r j
+ space spanned by x ,x ,...,x and x is the current approximation
+ 1 2 r j
+ to the jth eigenvector, then the value f returned in MONIT is
+ i
+ given by
+
+ 2 T
+ f =max||r || /||Cx || ||x|| =x Bx
+ i j B j B B
+
+ and each vector in the group is accepted as an eigenvector if
+
+ (|d |f )/(|d |-e)<TOL
+ r r r
+
+ ~
+ where e is the current approximation to |d |. The values of the
+ k
+ f are systematically increased if the convergence criteria
+ i
+ appear to be too strict. See Rutishauser [4] for further details.
+
+ The algorithm implemented by F02FJF differs slightly from SIMITZ
+ (Nikolai [1]) in that the eigenvalue sub-problem is solved using
+ the singular value decomposition of the upper triangular matrix R
+ T
+ of the Gram-Schmidt factorization of Cx , rather than forming R R
+ r
+
+ 9. Example
+
+ To find the four eigenvalues of smallest absolute value and
+ corresponding eigenvectors for the generalized symmetric
+ eigenvalue problem Ax=(lambda)Bx, where A and B are the 16 by 16
+ matrices
+
+ (1 a a )
+ (a 1 a a )
+ ( a 1 a a )
+ ( a 1 a a )
+ (a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a )
+ A=( a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a)
+ ( a a 1 a )
+ ( a a 1 a )
+ ( a a 1 a)
+ ( a a 1)
+
+ 1
+ where a=- -
+ 4
+
+ (1 b )
+ (b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ B=( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b )
+ ( b 1 b)
+
+ 1
+ where b=- -
+ 2
+
+ TOL is taken as 0.0001 and 6 iteration vectors are used. F01MAF
+ is used to factorize the matrix A, prior to calling F02FJF, and
+ F04MAF is used within IMAGE to solve the equations Aw=Bz for w.
+ Details of the factorization of A are passed from F01MAF to
+ F04MAF by means of the COMMON block BLOCK1.
+
+ Output from MONIT occurs each time ISTATE is non-zero. Note that
+ the required eigenvalues are the reciprocals of the eigenvalues
+ returned by F02FJF.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02wef}{NAG On-line Documentation: f02wef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02WEF(3NAG) Foundation Library (12/10/92) F02WEF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02WEF
+ F02WEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02WEF returns all, or part, of the singular value decomposition
+ of a general real matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02WEF (M, N, A, LDA, NCOLB, B, LDB, WANTQ, Q,
+ 1 LDQ, SV, WANTP, PT, LDPT, WORK, IFAIL)
+ INTEGER M, N, LDA, NCOLB, LDB, LDQ, LDPT, IFAIL
+ DOUBLE PRECISION A(LDA,*), B(LDB,*), Q(LDQ,*), SV(*), PT
+ 1 (LDPT,*), WORK(*)
+ LOGICAL WANTQ, WANTP
+
+ 3. Description
+
+ The m by n matrix A is factorized as
+
+ T
+ A=QDP ,
+
+ where
+
+ (S)
+ D=(0), m>n,
+
+ D=S, m=n,
+
+ D=(S 0), m<n,
+
+ Q is an m by m orthogonal matrix, P is an n by n orthogonal
+ matrix and S is a min(m,n) by min(m,n) diagonal matrix with non-
+ negative diagonal elements, sv ,sv ,...,sv , ordered such
+ 1 2 min(m,n)
+ that
+
+ sv >=sv >=...>=sv >=0.
+ 1 2 min(m,n)
+
+ The first min(m,n) columns of Q are the left-hand singular
+ vectors of A, the diagonal elements of S are the singular values
+ of A and the first min(m,n) columns of P are the right-hand
+ singular vectors of A.
+
+ Either or both of the left-hand and right-hand singular vectors
+ of A may be requested and the matrix C given by
+
+ T
+ C=Q B,
+
+ where B is an m by ncolb given matrix, may also be requested.
+
+ The routine obtains the singular value decomposition by first
+ reducing A to upper triangular form by means of Householder
+ transformations, from the left when m>=n and from the right when
+ m<n. The upper triangular form is then reduced to bidiagonal form
+ by Givens plane rotations and finally the QR algorithm is used to
+ obtain the singular value decomposition of the bidiagonal form.
+
+ Good background descriptions to the singular value decomposition
+ are given in Dongarra et al [1], Hammarling [2] and Wilkinson [3]
+ DSVDC.
+
+ Note that if K is any orthogonal diagonal matrix so that
+
+ T
+ KK =I,
+
+ (so that K has elements +1 or -1 on the diagonal)
+
+ then
+
+ T
+ A=(QK)D(PK)
+
+ is also a singular value decomposition of A.
+
+ 4. References
+
+ [1] Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979)
+ LINPACK Users' Guide. SIAM, Philadelphia.
+
+ [2] Hammarling S (1985) The Singular Value Decomposition in
+ Multivariate Statistics. ACM Signum Newsletter. 20, 3 2--25.
+
+ [3] Wilkinson J H (1978) Singular Value Decomposition -- Basic
+ Aspects. Numerical Software -- Needs and Availability. (ed D
+ A H Jacobs) Academic Press.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: the number of rows, m, of the matrix A.
+ Constraint: M >= 0.
+
+ When M = 0 then an immediate return is effected.
+
+ 2: N -- INTEGER Input
+ On entry: the number of columns, n, of the matrix A.
+ Constraint: N >= 0.
+
+ When N = 0 then an immediate return is effected.
+
+ 3: A(LDA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the leading m by n part of the array A must
+ contain the matrix A whose singular value decomposition is
+ required. On exit: if M >= N and WANTQ = .TRUE., then the
+ leading m by n part of A will contain the first n columns of
+ the orthogonal matrix Q.
+
+ If M < N and WANTP = .TRUE., then the leading m by n part of
+ T
+ A will contain the first m rows of the orthogonal matrix P .
+
+ If M >= N and WANTQ = .FALSE. and WANTP = .TRUE., then the
+ leading n by n part of A will contain the first n rows of
+ T
+ the orthogonal matrix P .
+
+ Otherwise the leading m by n part of A is used as internal
+ workspace.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02WEF is called.
+ Constraint: LDA >= max(1,M).
+
+ 5: NCOLB -- INTEGER Input
+ On entry: ncolb, the number of columns of the matrix B.
+ When NCOLB = 0 the array B is not referenced. Constraint:
+ NCOLB >= 0.
+
+ 6: B(LDB,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,ncolb) On entry: if NCOLB > 0, the leading m by ncolb
+ part of the array B must contain the matrix to be
+ transformed. On exit: B is overwritten by the m by ncolb
+ T
+ matrix Q B.
+
+ 7: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F02WEF is called.
+ Constraint: if NCOLB > 0 then LDB >= max(1,M).
+
+ 8: WANTQ -- LOGICAL Input
+ On entry: WANTQ must be .TRUE., if the left-hand singular
+ vectors are required. If WANTQ = .FALSE., then the array Q
+ is not referenced.
+
+ 9: Q(LDQ,*) -- DOUBLE PRECISION array Output
+ Note: the second dimension of the array Q must be at least
+ max(1,M).
+ On exit: if M < N and WANTQ = .TRUE., the leading m by m
+ part of the array Q will contain the orthogonal matrix Q.
+ Otherwise the array Q is not referenced.
+
+ 10: LDQ -- INTEGER Input
+ On entry:
+ the first dimension of the array Q as declared in the
+ (sub)program from which F02WEF is called.
+ Constraint: if M < N and WANTQ = .TRUE., LDQ >= max(1,M).
+
+ 11: SV(*) -- DOUBLE PRECISION array Output
+ Note: the length of SV must be at least min(M,N). On exit:
+ the min(M,N) diagonal elements of the matrix S.
+
+ 12: WANTP -- LOGICAL Input
+ On entry: WANTP must be .TRUE. if the right-hand singular
+ vectors are required. If WANTP = .FALSE., then the array PT
+ is not referenced.
+
+ 13: PT(LDPT,*) -- DOUBLE PRECISION array Output
+ Note: the second dimension of the array PT must be at least
+ max(1,N).
+ On exit: if M >= N and WANTQ and WANTP are .TRUE., the
+ leading n by n part of the array PT will contain the
+ T
+ orthogonal matrix P . Otherwise the array PT is not
+ referenced.
+
+ 14: LDPT -- INTEGER Input
+ On entry:
+ the first dimension of the array PT as declared in the
+ (sub)program from which F02WEF is called.
+ Constraint: if M >= N and WANTQ and WANTP are .TRUE., LDPT
+ >= max(1,N).
+
+ 15: WORK(*) -- DOUBLE PRECISION array Output
+ Note: the length of WORK must be at least max(1,lwork),
+ where lwork must be as given in the following table:
+
+ M >= N
+ WANTQ is .TRUE. and WANTP = .TRUE.
+ 2
+ lwork=max(N +5*(N-1),N+NCOLB,4)
+
+ WANTQ = .TRUE. and WANTP = .FALSE.
+ 2
+ lwork=max(N +4*(N-1),N+NCOLB,4)
+
+ WANTQ = .FALSE. and WANTP = .TRUE.
+ lwork=max(3*(N-1),2) when NCOLB = 0
+
+ lwork=max(5*(N-1),2) when NCOLB > 0
+
+ WANTQ = .FALSE. and WANTP = .FALSE.
+ lwork=max(2*(N-1),2) when NCOLB = 0
+
+ lwork=max(3*(N-1),2) when NCOLB > 0
+
+ M < N
+ WANTQ = .TRUE. and WANTP = .TRUE.
+ 2
+ lwork=max(M +5*(M-1),2)
+
+ WANTQ = .TRUE. and WANTP = .FALSE.
+ lwork=max(3*(M-1),1)
+
+ WANTQ = .FALSE. and WANTP = .TRUE.
+ 2
+ lwork=max(M +3*(M-1),2) when NCOLB = 0
+
+ 2
+ lwork=max(M +5*(M-1),2) when NCOLB > 0
+
+ WANTQ = .FALSE. and WANTP = .FALSE.
+ lwork=max(2*(M-1),1) when NCOLB = 0
+
+ lwork=max(3*(M-1),1) when NCOLB > 0
+ On exit: WORK(min(M,N)) contains the total number of
+ iterations taken by the R algorithm.
+
+ The rest of the array is used as workspace.
+
+ 16: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ One or more of the following conditions holds:
+ M < 0,
+
+ N < 0,
+
+ LDA < M,
+
+ NCOLB < 0,
+
+ LDB < M and NCOLB > 0,
+
+ LDQ < M and M < N and WANTQ = .TRUE.,
+
+ LDPT < N and M >= N and WANTQ = .TRUE., and WANTP = .
+ TRUE..
+
+ IFAIL> 0
+ The QR algorithm has failed to converge in 50*min(m,n)
+ iterations. In this case SV(1), SV(2),..., SV(IFAIL) may not
+ have been found correctly and the remaining singular values
+ may not be the smallest. The matrix A will nevertheless have
+ T
+ been factorized as A=QEP , where the leading min(m,n) by
+ min(m,n) part of E is a bidiagonal matrix with SV(1), SV(2),
+ ..., SV(min(m,n)) as the diagonal elements and WORK(1), WORK
+ (2),..., WORK(min(m,n)-1) as the super-diagonal elements.
+
+ This failure is not likely to occur.
+
+ 7. Accuracy
+
+ The computed factors Q, D and P satisfy the relation
+
+ T
+ QDP =A+E,
+
+ where
+
+ ||E||<=c(epsilon)||A||,
+
+ (epsilon) being the machine precision, c is a modest function of
+ m and n and ||.|| denotes the spectral (two) norm. Note that
+ ||A||=sv .
+ 1
+
+ 8. Further Comments
+
+ Following the use of this routine the rank of A may be estimated
+ by a call to the INTEGER FUNCTION F06KLF(*). The statement:
+
+ IRANK = F06KLF(MIN(M, N), SV, 1, TOL)
+
+ returns the value (k-1) in IRANK, where k is the smallest integer
+ for which SV(k)<tol*SV(1), where tol is the tolerance supplied in
+ TOL, so that IRANK is an estimate of the rank of S and thus also
+ of A. If TOL is supplied as negative then the machine precision
+ is used in place of TOL.
+
+ 9. Example
+
+ 9.1. Example 1
+
+ To find the singular value decomposition of the 5 by 3 matrix
+
+ (2.0 2.5 2.5)
+ (2.0 2.5 2.5)
+ A=(1.6 -0.4 2.8)
+ (2.0 -0.5 0.5)
+ (1.2 -0.3 -2.9)
+
+ T
+ together with the vector Q b for the vector
+
+ ( 1.1)
+ ( 0.9)
+ b=( 0.6)
+ ( 0.0)
+ (-0.8)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+ 9.2. Example 2
+
+ To find the singular value decomposition of the 3 by 5 matrix
+
+ (2.0 2.0 1.6 2.0 1.2)
+ A=(2.5 2.5 -0.4 -0.5 -0.3)
+ (2.5 2.5 2.8 0.5 -2.9)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf02xef}{NAG On-line Documentation: f02xef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F02XEF(3NAG) Foundation Library (12/10/92) F02XEF(3NAG)
+
+
+
+ F02 -- Eigenvalue and Eigenvectors F02XEF
+ F02XEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F02XEF returns all, or part, of the singular value decomposition
+ of a general complex matrix.
+
+ 2. Specification
+
+ SUBROUTINE F02XEF (M, N, A, LDA, NCOLB, B, LDB, WANTQ, Q,
+ 1 LDQ, SV, WANTP, PH, LDPH, RWORK, CWORK,
+ 2 IFAIL)
+ INTEGER M, N, LDA, NCOLB, LDB, LDQ, LDPH,
+ 1 IFAIL
+ DOUBLE PRECISION SV(*), RWORK(*)
+ COMPLEX(KIND=KIND(1.0D0)) A(LDA,*), B(LDB,*), Q(LDQ,*),
+ 1 PH(LDPH,*), CWORK(*)
+ LOGICAL WANTQ, WANTP
+
+ 3. Description
+
+ The m by n matrix A is factorized as
+
+ H
+ A=QDP ,
+
+ where
+
+ (S)
+ D=(0) m>n,
+
+ D=S, m=n,
+
+ D=(S 0), m<n,
+
+ Q is an m by m unitary matrix, P is an n by n unitary matrix and
+ S is a min(m,n) by min(m,n) diagonal matrix with real non-
+ negative diagonal elements, sv ,sv ,...,sv , ordered such
+ 1 2 min(m,n)
+ that
+
+ sv >=sv >=...>=sv >=0.
+ 1 2 min(m,n)
+
+ The first min(m,n) columns of Q are the left-hand singular
+ vectors of A, the diagonal elements of S are the singular values
+ of A and the first min(m,n) columns of P are the right-hand
+ singular vectors of A.
+
+ Either or both of the left-hand and right-hand singular vectors
+ of A may be requested and the matrix C given by
+
+ H
+ C=Q B,
+
+ where B is an m by ncolb given matrix, may also be requested.
+
+ The routine obtains the singular value decomposition by first
+ reducing A to upper triangular form by means of Householder
+ transformations, from the left when m>=n and from the right when
+ m<n. The upper triangular form is then reduced to bidiagonal form
+ by Givens plane rotations and finally the QR algorithm is used to
+ obtain the singular value decomposition of the bidiagonal form.
+
+ Good background descriptions to the singular value decomposition
+ are given in Dongarra et al [1], Hammarling [2] and Wilkinson [3]
+ ZSVDC.
+
+ Note that if K is any unitary diagonal matrix so that
+
+ H
+ KK =I,
+
+ then
+
+ H
+ A=(QK)D(PK)
+
+ is also a singular value decomposition of A.
+
+ 4. References
+
+ [1] Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979)
+ LINPACK Users' Guide. SIAM, Philadelphia.
+
+ [2] Hammarling S (1985) The Singular Value Decomposition in
+ Multivariate Statistics. ACM Signum Newsletter. 20, 3 2--25.
+
+ [3] Wilkinson J H (1978) Singular Value Decomposition -- Basic
+ Aspects. Numerical Software -- Needs and Availability. (ed D
+ A H Jacobs) Academic Press.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: the number of rows, m, of the matrix A.
+ Constraint: M >= 0.
+
+ When M = 0 then an immediate return is effected.
+
+ 2: N -- INTEGER Input
+ On entry: the number of columns, n, of the matrix A.
+ Constraint: N >= 0.
+
+ When N = 0 then an immediate return is effected.
+
+ 3: A(LDA,*) -- COMPLEX(KIND(1.0D)) array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the leading m by n part of the array A must
+ contain the matrix A whose singular value decomposition is
+ required. On exit: if M >= N and WANTQ = .TRUE., then the
+ leading m by n part of A will contain the first n columns of
+ the unitary matrix Q.
+ If M < N and WANTP = .TRUE., then the leading m by n part of
+ H
+ A will contain the first m rows of the unitary matrix P .
+ will contain the first m rows of the unitary matrix P If M
+ >= N and WANTQ = .FALSE. and WANTP = .TRUE., then the
+ leading n by n part of A will contain the first n
+ H
+ rows of the unitary matrix P . Otherwise the leading m by n
+ part of A is used as internal workspace.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F02XEF is called.
+ Constraint: LDA >= max(1,M).
+
+ 5: NCOLB -- INTEGER Input
+ On entry: ncolb, the number of columns of the matrix B.
+ When NCOLB = 0 the array B is not referenced. Constraint:
+ NCOLB >= 0.
+
+ 6: B(LDB,*) -- COMPLEX(KIND(1.0D)) array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,NCOLB).
+ On entry: if NCOLB > 0, the leading m by ncolb part of the
+ array B must contain the matrix to be transformed. On exit:
+ H
+ B is overwritten by the m by ncolb matrix Q B.
+
+ 7: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F02XEF is called.
+ Constraint: if NCOLB > 0, then LDB >= max(1,M).
+
+ 8: WANTQ -- LOGICAL Input
+ On entry: WANTQ must be .TRUE. if the left-hand singular
+ vectors are required. If WANTQ = .FALSE. then the array Q is
+ not referenced.
+
+ 9: Q(LDQ,*) -- COMPLEX(KIND(1.0D)) array Output
+ Note: the second dimension of the array Q must be at least
+ max(1,M).
+ On exit: if M < N and WANTQ = .TRUE., the leading m by m
+ part of the array Q will contain the unitary matrix Q.
+ Otherwise the array Q is not referenced.
+
+ 10: LDQ -- INTEGER Input
+ On entry:
+ the first dimension of the array Q as declared in the
+ (sub)program from which F02XEF is called.
+ Constraint: if M < N and WANTQ = .TRUE., LDQ >= max(1,M).
+
+ 11: SV(*) -- DOUBLE PRECISION array Output
+ Note: the length of SV must be at least min(M,N). On exit:
+ the min(m,n) diagonal elements of the matrix S.
+
+ 12: WANTP -- LOGICAL Input
+ On entry: WANTP must be .TRUE. if the right-hand singular
+ vectors are required. If WANTP = .FALSE. then the array PH
+ is not referenced.
+
+ 13: PH(LDPH,*) -- DOUBLE PRECISION array Output
+ Note: the second dimension of the array PH must be at least
+ max(1,N).
+ On exit: if M >= N and WANTQ and WANTP are .TRUE., the
+ leading n by n part of the array PH will contain the unitary
+ H
+ matrix P . Otherwise the array PH is not referenced.
+
+ 14: LDPH -- INTEGER Input
+ On entry:
+ the first dimension of the array PH as declared in the
+ (sub)program from which F02XEF is called.
+ Constraint: if M >= N and WANTQ and WANTP are .TRUE., LDPH
+ >= max(1,N).
+
+ 15: RWORK(*) -- DOUBLE PRECISION array Output
+ Note: the length of RWORK must be at least max(1,lrwork),
+ where lrwork must satisfy:
+ lrwork=2*(min(M,N)-1) when
+ NCOLB = 0 and WANTQ and WANTP are .FALSE.,
+
+ lrwork=3*(min(M,N)-1) when
+ either NCOLB = 0 and WANTQ = .FALSE. and WANTP = .
+ TRUE., or WANTP = .FALSE. and one or both of NCOLB > 0
+ and WANTQ = .TRUE.
+
+ lrwork=5*(min(M,N)-1)
+ otherwise.
+ On exit: RWORK(min(M,N)) contains the total number of
+ iterations taken by the QR algorithm.
+
+ The rest of the array is used as workspace.
+
+ 16: CWORK(*) -- COMPLEX(KIND(1.0D)) array Workspace
+ Note: the length of CWORK must be at least max(1,lcwork),
+ where lcwork must satisfy:
+ 2
+ lcwork=N+max(N ,NCOLB) when
+ M >= N and WANTQ and WANTP are both .TRUE.
+
+ 2
+ lcwork=N+max(N +N,NCOLB) when
+ M >= N and WANTQ = .TRUE., but WANTP = .FALSE.
+
+ lcwork=N+max(N,NCOLB) when
+ M >= N and WANTQ = .FALSE.
+
+ 2
+ lcwork=M +M when
+ M < N and WANTP = .TRUE.
+
+ lcwork = M when
+ M < N and WANTP = .FALSE.
+
+ 17: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL=-1
+ One or more of the following conditions holds:
+ M < 0,
+
+ N < 0,
+
+ LDA < M,
+
+ NCOLB < 0,
+
+ LDB < M and NCOLB > 0,
+
+ LDQ < M and M < N and WANTQ = .TRUE.,
+
+ LDPH < N and M >= N and WANTQ = .TRUE. and WANTP = .
+ TRUE..
+
+ IFAIL> 0
+ The QR algorithm has failed to converge in 50*min(m,n)
+ iterations. In this case SV(1), SV(2),..., SV(IFAIL) may not
+ have been found correctly and the remaining singular values
+ may not be the smallest. The matrix A will nevertheless have
+ H
+ been factorized as A=QEP where the leading min(m,n) by
+ min(m,n) part of E is a bidiagonal matrix with SV(1), SV(2),
+ ..., SV(min(m,n)) as the diagonal elements and RWORK(1),
+ RWORK(2),..., RWORK(min(m,n)-1) as the super-diagonal
+ elements.
+
+ This failure is not likely to occur.
+
+ 7. Accuracy
+
+ The computed factors Q, D and P satisfy the relation
+
+ H
+ QDP =A+E,
+
+ where
+
+ ||E||<=c(epsilon)||A||,
+
+ (epsilon) being the machine precision, c is a modest function of
+ m and n and ||.|| denotes the spectral (two) norm. Note that
+ ||A||=sv .
+ 1
+
+ 8. Further Comments
+
+ Following the use of this routine the rank of A may be estimated
+ by a call to the INTEGER FUNCTION F06KLF(*). The statement:
+
+
+ IRANK = F06KLF(MIN(M, N), SV, 1, TOL)
+
+ returns the value (k-1) in IRANK, where k is the smallest integer
+ for which SV(k)<tol*SV(1), where tol is the tolerance supplied in
+ TOL, so that IRANK is an estimate of the rank of S and thus also
+ of A. If TOL is supplied as negative then the machine precision
+ is used in place of TOL.
+
+ 9. Example
+
+ 9.1. Example 1
+
+ To find the singular value decomposition of the 5 by 3 matrix
+
+ ( 0.5i -0.5+1.5i -1.0+1.0i)
+ (0.4+0.3i 0.9+1.3i 0.2+1.4i)
+ A=(0.4 -0.4+0.4i 1.8 )
+ (0.3-0.4i 0.1+0.7i 0.0 )
+ ( -0.3i 0.3+0.3i 2.4i)
+
+ H
+ together with the vector Q b for the vector
+
+ (-0.55+1.05i)
+ ( 0.49+0.93i)
+ b=( 0.56-0.16i)
+ ( 0.39+0.23i)
+ ( 1.13+0.83i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+ 9.2. Example 2
+
+ To find the singular value decompostition of the 3 by 5 matrix
+
+ ( 0.5i 0.4-0.3i 0.4 0.3+0.4i 0.3i)
+ A=(-0.5-1.5i 0.9-1.3i -0.4-0.4i 0.1-0.7i 0.3-0.3i)
+ (-1.0-1.0i 0.2-1.4i 1.8 0.0 -2.4i)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04}{NAG On-line Documentation: f04}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04(3NAG) Foundation Library (12/10/92) F04(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations Introduction -- F04
+ Chapter F04
+ Simultaneous Linear Equations
+
+ 1. Scope of the Chapter
+
+ This chapter, together with two routines in Chapter F07, is
+ concerned with the solution of the matrix equation AX=B, where B
+ may be a single vector or a matrix of multiple right-hand sides.
+ The matrix A may be real, complex, symmetric, Hermitian positive-
+ definite, or sparse. It may also be rectangular, in which case a
+ least-squares solution is obtained.
+
+ 2. Background to the Problems
+
+ A set of linear equations may be written in the form
+
+ Ax=b
+
+ where the known matrix A, with real or complex coefficients, is
+ of size m by n, (m rows and n columns), the known right-hand
+ vector b has m components (m rows and one column), and the
+ required solution vector x has n components (n rows and one
+ column). There may sometimes be p vectors b , i=1,2,...,p on the
+ i
+ right-hand side and the equations may then be written as
+
+ AX=B
+
+ the required matrix X having as its p columns the solutions of
+ Ax =b , i=1,2,...,p. Some routines deal with the latter case, but
+ i i
+ for clarity only the case p=1 is discussed here.
+
+ The most common problem, the determination of the unique solution
+ of Ax=b, occurs when m=n and A is non-singular, that is rank(A)=n
+ problem, discussed in Section 2.2 below, is the determination of
+ the least-squares solution of Ax~=b, i.e., the determination of a
+ vector x which minimizes the Euclidean length (two norm) of the
+ residual vector r=b-Ax. The usual case has m>n and rank(A)=n, in
+ which case x is unique.
+
+ 2.1. Unique Solution of Ax=b
+
+ Most of the routines in this chapter, as well as two routines in
+ Chapter F07, solve this particular problem. The solution is
+ obtained by performing either an LU factorization, or a Cholesky
+ factorization, as discussed in Section 2 of the F01 Chapter
+ Introduction.
+
+ Two of the routines in this chapter use a process called
+ iterative refinement to improve the initial solution in order to
+ obtain a solution that is correct to working accuracy. It should
+ be emphasised that if A and b are not known exactly then not all
+ the figures in this solution may be meaningful. To be more
+ precise, if x is the exact solution of the equations
+
+
+ Ax=b
+
+
+
+ and x is the solution of the perturbed equations
+
+
+
+ (A+E)x=b+e,
+
+ ||E||
+ then, provided that (kappa)(A) -------<=1,
+ ||A||
+
+
+
+ ||x-x|| (kappa)(A) ( ||E|| ||e|| )
+ ------- <= --------------------( ----- + ----- ),
+ ||x|| ||E|| ( ||A|| ||b|| )
+ 1-(kappa)(A) -----
+ ||A||
+
+ -1
+ where (kappa)(A)=||A||||A || is the condition number of A
+ with respect to inversion. Thus, if A is ill-conditioned (
+
+
+ (kappa)(A) is large), x may differ significantly from x. Often
+ ||E||
+ (kappa)(A) -----<<1 in which case the above bound effectively
+ ||A||
+ reduces to
+
+
+
+
+ ||x-x|| ( ||E|| ||e|| )
+ ------- <= (kappa)(A)( ----- + ----- ).
+ ||x|| ( ||A|| ||b|| )
+
+ 2.2. The Least-squares Solution of Ax~=b
+
+ The least-squares problem is to find a vector x to minimize
+
+
+ T
+ r r, where r=b-Ax.
+
+ When m>=n and rank(A)=n then the solution vector x is unique. For
+ the cases where x is not unique the routines in this chapter
+ obtain the minimal length solution, that is the vector x for
+ T
+ which x x is a minimum.
+
+ 2.3. Calculating the Inverse of a Matrix
+
+ The routines in this chapter can also be used to calculate the
+ inverse of a square matrix A by solving the equation
+
+ AX=I,
+
+ where I is the identity matrix.
+
+ 3. Recommendations on Choice and Use of Routines
+
+ 3.1. General Purpose Routines
+
+ Many of the routines in this chapter perform the complete
+ solution of the required equations, but some of the routines, as
+ well as the routines in Chapter F07, assume that a prior
+ factorization has been performed, using the appropriate
+ factorization routine from Chapter F01 or Chapter F07. These, so-
+ called, general purpose routines can be useful when explicit
+ information on the factorization is required, as well as the
+ solution of the equations, or when the solution is required for
+ multiple right-hand sides, or for a sequence of right-hand sides.
+
+ Note that some of the routines that perform a complete solution
+ also allow multiple right-hand sides.
+
+ 3.2. Iterative Refinement
+
+ The routines that perform iterative refinement are more costly
+ than those that do not perform iterative refinement, both in
+ terms of time and storage, and should only be used if the problem
+ really warrants the additional accuracy provided by these
+ routines. The storage requirements are approximately doubled,
+ while the additional time is not usually prohibitive since the
+ initial factorization is used at each iteration.
+
+ 3.3. Sparse Matrix Routines
+
+ The routines for sparse matrices should usually be used only when
+ the number of non-zero elements is very small, less than 10% of
+ the total number of elements of A. Additionally, when the matrix
+ is symmetric positive-definite the sparse routines should
+ generally be used only when A does not have a (variable) band
+ structure.
+
+ There are four routines for solving sparse linear equations, two
+ for solving general real systems (F04AXF and F04QAF), one for
+ solving symmetric positive-definite systems (F04MAF) and one for
+ solving symmetric systems that may, or may not, be positive-
+ definite (F04MBF). F04AXF and F04MAF utilise factorizations of
+ the matrix A obtained by routines in Chapter F01, while the other
+ two routines use iterative techniques and require a user-supplied
+ T
+ function to compute matrix-vector products Ac and A c for any
+ given vector c. The routines requiring factorizations will
+ usually be faster and the factorization can be utilised to solve
+ for several right-hand sides, but the original matrix has to be
+ explicitly supplied and is overwritten by the factorization, and
+ the storage requirements will usually be substantially more than
+ those of the iterative routines.
+
+ Routines F04MBF and F04QAF both allow the user to supply a pre-
+ conditioner.
+
+ F04MBF can be used to solve systems of the form (A-(lambda)I)x=b,
+ which can be useful in applications such as Rayleigh quotient
+ iteration.
+
+ F04QAF also solves sparse least-squares problems and allows the
+ solution of damped (regularized) least-squares problems.
+
+ 3.4. Decision Trees
+
+ If at any stage the answer to a question is 'Don't know' this
+ should be read as 'No'.
+
+ For those routines that need to be preceded by a factorization
+ routine, the appropriate routine name is given in brackets after
+ the name of the routine for solving the equations. Note also that
+ you may be directed to a routine in Chapter F07.
+
+
+ 3.4.1. Routines for unique solution of Ax=b
+
+
+ Please see figure in printed Reference Manual
+
+
+
+ 3.4.2. Routines for Least-squares problems
+
+
+ Please see figure in printed Reference Manual
+
+
+
+
+ F04 -- Simultaneous Linear Equations Contents -- F04
+ Chapter F04
+
+ Eigenvalues and Eigenvectors
+
+ F04ADF Approximate solution of complex simultaneous linear
+ equations with multiple right-hand sides
+
+ F04ARF Approximate solution of real simultaneous linear
+ equations, one right-hand side
+
+ F04ASF Accurate solution of real symmetric positive-definite
+ simultaneous linear equations, one right-hand side
+
+ F04ATF Accurate solution of real simultaneous linear equations,
+ one right-hand side
+
+ F04AXF Approximate solution of real sparse simultaneous linear
+ equations (coefficient matrix already factorized by
+ F01BRF or F01BSF)
+
+ F04FAF Approximate solution of real symmetric positive-definite
+ tridiagonal simultaneous linear equations, one right-hand
+ side
+
+ F04JGF Least-squares (if rank = n) or minimal least-squares (if
+ rank <n) solution of m real equations in n unknowns, rank
+ <=n, m>=n
+
+ F04MAF Real sparse symmetric positive-definite simultaneous
+ linear equations (coefficient matrix already factorized)
+
+ F04MBF Real sparse symmetric simultaneous linear equations
+
+ F04MCF Approximate solution of real symmetric positive-definite
+ variable-bandwidth simultaneous linear equations
+ (coefficient matrix already factorized)
+
+ F04QAF Sparse linear least-squares problem, m real equations in
+ n unknowns
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04adf}{NAG On-line Documentation: f04adf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04ADF(3NAG) Foundation Library (12/10/92) F04ADF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04ADF
+ F04ADF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04ADF calculates the approximate solution of a set of complex
+ linear equations with multiple right-hand sides, using an LU
+ factorization with partial pivoting.
+
+ 2. Specification
+
+ SUBROUTINE F04ADF (A, IA, B, IB, N, M, C, IC, WKSPCE,
+ 1 IFAIL)
+ INTEGER IA, IB, N, M, IC, IFAIL
+ DOUBLE PRECISION WKSPCE(*)
+ COMPLEX(KIND(1.0D0)) A(IA,*), B(IB,*), C(IC,*)
+
+ 3. Description
+
+ Given a set of complex linear equations AX=B, the routine first
+ computes an LU factorization of A with partial pivoting, PA=LU,
+ where P is a permutation matrix, L is lower triangular and U is
+ unit upper triangular. The columns x of the solution X are found
+ by forward and backward substitution in Ly=Pb and Ux=y, where b
+ is a column of the right-hand side matrix B.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,*) -- COMPLEX(KIND(1.0D)) array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the n by n matrix A. On exit: A is overwritten by
+ the lower triangular matrix L and the off-diagonal elements
+ of the upper triangular matrix U. The unit diagonal elements
+ of U are not stored.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F04ADF is called.
+ Constraint: IA >= max(1,N).
+
+ 3: B(IB,*) -- COMPLEX(KIND(1.0D)) array Input
+ Note: the second dimension of the array B must be at least
+ max(1,M).
+ On entry: the n by m right-hand side matrix B. See also
+ Section 8.
+
+ 4: IB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F04ADF is called.
+ Constraint: IB >= max(1,N).
+
+ 5: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 6: M -- INTEGER Input
+ On entry: m, the number of right-hand sides. Constraint: M
+ >= 0.
+
+ 7: C(IC,*) -- COMPLEX(KIND(1.0D)) array Output
+ Note: the second dimension of the array C must be at least
+ max(1,M).
+ On exit: the n by m solution matrix X. See also Section 8.
+
+ 8: IC -- INTEGER Input
+ On entry:
+ the first dimension of the array C as declared in the
+ (sub)program from which F04ADF is called.
+ Constraint: IC >= max(1,N).
+
+ 9: WKSPCE(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WKSPCE must be at least
+ max(1,N).
+
+ 10: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL= 1
+ The matrix A is singular, possibly due to rounding errors.
+
+ IFAIL= 2
+ On entry N < 0,
+
+ or M < 0,
+
+ or IA < max(1,N),
+
+ or IB < max(1,N),
+
+ or IC < max(1,N).
+
+ 7. Accuracy
+
+ The accuracy of the computed solution depends on the conditioning
+ of the original matrix. For a detailed error analysis see
+ Wilkinson and Reinsch [1] page 106.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for parameters B and C, in which case the solution
+ vectors will overwrite the right-hand sides. However this is not
+ standard Fortran 77, and may not work on all systems.
+
+ 9. Example
+
+ To solve the set of linear equations AX=B where
+
+ (1 1+2i 2+10i)
+ A=(1+i 3i -5+14i)
+ (1+i 5i -8+20i)
+
+ and
+
+
+ (1)
+ B=(0).
+ (0)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04arf}{NAG On-line Documentation: f04arf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04ARF(3NAG) Foundation Library (12/10/92) F04ARF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04ARF
+ F04ARF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04ARF calculates the approximate solution of a set of real
+ linear equations with a single right-hand side, using an LU
+ factorization with partial pivoting.
+
+ 2. Specification
+
+ SUBROUTINE F04ARF (A, IA, B, N, C, WKSPCE, IFAIL)
+ INTEGER IA, N, IFAIL
+ DOUBLE PRECISION A(IA,*), B(*), C(*), WKSPCE(*)
+
+ 3. Description
+
+ Given a set of linear equations, Ax=b, the routine first computes
+ an LU factorization of A with partial pivoting, PA=LU, where P is
+ a permutation matrix, L is lower triangular and U is unit upper
+ triangular. The approximate solution x is found by forward and
+ backward substitution in Ly=Pb and Ux=y, where b is the right-
+ hand side.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the n by n matrix A. On exit: A is overwritten by
+ the lower triangular matrix L and the off-diagonal elements
+ of the upper triangular matrix U. The unit diagonal elements
+ of U are not stored.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F04ARF is called.
+ Constraint: IA >= max(1,N).
+
+ 3: B(*) -- DOUBLE PRECISION array Input
+ Note: the dimension of the array B must be at least
+ max(1,N).
+ On entry: the right-hand side vector b.
+
+ 4: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 5: C(*) -- DOUBLE PRECISION array Output
+ Note: the dimension of the array C must be at least
+ max(1,N).
+ On exit: the solution vector x.
+
+ 6: WKSPCE(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WKSPCE must be at least
+ max(1,N).
+
+ 7: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL= 1
+ The matrix A is singular, possibly due to rounding errors.
+
+ IFAIL= 2
+ On entry N < 0,
+
+ or IA < max(1,N).
+
+ 7. Accuracy
+
+ The accuracy of the computed solution depends on the conditioning
+ of the original matrix. For a detailed error analysis see
+ Wilkinson and Reinsch [1] page 107.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for parameters B and C, in which case the solution
+ vector will overwrite the right-hand side. However this is not
+ standard Fortran 77, and may not work on all systems.
+
+ 9. Example
+
+ To solve the set of linear equations Ax=b where
+
+ ( 33 16 72)
+ A=(-24 -10 -57)
+ ( -8 -4 -17)
+
+ and
+
+
+ (-359)
+ b=( 281).
+ ( 85)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04asf}{NAG On-line Documentation: f04asf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04ASF(3NAG) Foundation Library (12/10/92) F04ASF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04ASF
+ F04ASF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04ASF calculates the accurate solution of a set of real
+ symmetric positive-definite linear equations with a single right-
+ hand side, Ax=b, using a Cholesky factorization and iterative
+ refinement.
+
+ 2. Specification
+
+ SUBROUTINE F04ASF (A, IA, B, N, C, WK1, WK2, IFAIL)
+ INTEGER IA, N, IFAIL
+ DOUBLE PRECISION A(IA,*), B(*), C(*), WK1(*), WK2(*)
+
+ 3. Description
+
+ Given a set of real linear equations Ax=b, where A is a symmetric
+ positive-definite matrix, the routine first computes a Cholesky
+ T
+ factorization of A as A=LL where L is lower triangular. An
+ approximation to x is found by forward and backward substitution.
+ The residual vector r=b-Ax is then calculated using additional
+ T
+ precision and a correction d to x is found by solving LL d=r. x
+ is then replaced by x+d, and this iterative refinement of the
+ solution is repeated until machine accuracy is obtained.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the upper triangle of the n by n positive-definite
+ symmetric matrix A. The elements of the array below the
+ diagonal need not be set. On exit: the elements of the array
+ below the diagonal are overwritten; the upper triangle of A
+ is unchanged.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F04ASF is called.
+ Constraint: IA >= max(1,N).
+
+ 3: B(*) -- DOUBLE PRECISION array Input
+ Note: the dimension of the array B must be at least
+ max(1,N).
+ On entry: the right-hand side vector b.
+
+ 4: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 5: C(*) -- DOUBLE PRECISION array Output
+ Note: the dimension of the array C must be at least
+ max(1,N).
+ On exit: the solution vector x.
+
+ 6: WK1(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WK1 must be at least
+ max(1,N).
+
+ 7: WK2(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WK2 must be at least
+ max(1,N).
+
+ 8: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL= 1
+ The matrix A is not positive-definite, possibly due to
+ rounding errors.
+
+ IFAIL= 2
+ Iterative refinement fails to improve the solution, i.e.,
+ the matrix A is too ill-conditioned.
+
+ IFAIL= 3
+ On entry N < 0,
+
+ or IA < max(1,N).
+
+ 7. Accuracy
+
+ The computed solutions should be correct to full machine
+ accuracy. For a detailed error analysis see Wilkinson and Reinsch
+ [1] page 39.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ The routine must not be called with the same name for parameters
+ B and C.
+
+ 9. Example
+
+ To solve the set of linear equations Ax=b where
+
+ (5 7 6 5)
+ (7 10 8 7)
+ A=(6 8 10 9)
+ (5 7 9 10)
+
+ and
+
+
+ (23)
+ (32)
+ b=(33).
+ (31)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04atf}{NAG On-line Documentation: f04atf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04ATF(3NAG) Foundation Library (12/10/92) F04ATF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04ATF
+ F04ATF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04ATF calculates the accurate solution of a set of real linear
+ equations with a single right-hand side, using an LU
+ factorization with partial pivoting, and iterative refinement.
+
+ 2. Specification
+
+ SUBROUTINE F04ATF (A, IA, B, N, C, AA, IAA, WKS1, WKS2,
+ 1 IFAIL)
+ INTEGER IA, N, IAA, IFAIL
+ DOUBLE PRECISION A(IA,*), B(*), C(*), AA(IAA,*), WKS1(*),
+ 1 WKS2(*)
+
+ 3. Description
+
+ Given a set of real linear equations, Ax=b, the routine first
+ computes an LU factorization of A with partial pivoting, PA=LU,
+ where P is a permutation matrix, L is lower triangular and U is
+ unit upper triangular. An approximation to x is found by forward
+ and backward substitution in Ly=Pb and Ux=y. The residual vector
+ r=b-Ax is then calculated using additional precision, and a
+ correction d to x is found by solving LUd=r. x is replaced by x+d
+ , and this iterative refinement of the solution is repeated until
+ full machine accuracy is obtained.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: A(IA,*) -- DOUBLE PRECISION array Input
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the n by n matrix A.
+
+ 2: IA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F04ATF is called.
+ Constraint: IA >= max(1,N).
+
+ 3: B(*) -- DOUBLE PRECISION array Input
+ Note: the dimension of the array B must be at least
+ max(1,N).
+ On entry: the right-hand side vector b.
+
+ 4: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 5: C(*) -- DOUBLE PRECISION array Output
+ Note: the dimension of the array C must be at least
+ max(1,N).
+ On exit: the solution vector x.
+
+ 6: AA(IAA,*) -- DOUBLE PRECISION array Output
+ Note: the second dimension of the array AA must be at least
+ max(1,N).
+ On exit: the triangular factors L and U, except that the
+ unit diagonal elements of U are not stored.
+
+ 7: IAA -- INTEGER Input
+ On entry:
+ the first dimension of the array AA as declared in the
+ (sub)program from which F04ATF is called.
+ Constraint: IAA >= max(1,N).
+
+ 8: WKS1(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WKS1 must be at least
+ max(1,N).
+
+ 9: WKS2(*) -- DOUBLE PRECISION array Workspace
+ Note: the dimension of the array WKS2 must be at least
+ max(1,N).
+
+ 10: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ If on entry IFAIL = 0 or -1, explanatory error messages are
+ output on the current error message unit (as defined by X04AAF).
+
+ IFAIL= 1
+ The matrix A is singular, possibly due to rounding errors.
+
+ IFAIL= 2
+
+ Iterative refinement fails to improve the solution, i.e.,
+ the matrix A is too ill-conditioned.
+
+ IFAIL= 3
+ On entry N < 0,
+
+ or IA < max(1,N),
+
+ or IAA < max(1,N).
+
+ 7. Accuracy
+
+ The computed solutions should be correct to full machine
+ accuracy. For a detailed error analysis see Wilkinson and Reinsch
+ [1] page 107.
+
+ 8. Further Comments
+
+ 3
+ The time taken by the routine is approximately proportional to n
+
+ The routine must not be called with the same name for parameters
+ B and C.
+
+ 9. Example
+
+ To solve the set of linear equations Ax=b where
+
+ ( 33 16 72)
+ A=(-24 -10 -57)
+ ( -8 -4 -17)
+
+ and
+
+
+ (-359)
+ b=( 281).
+ ( 85)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04axf}{NAG On-line Documentation: f04axf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04AXF(3NAG) Foundation Library (12/10/92) F04AXF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04AXF
+ F04AXF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04AXF calculates the approximate solution of a set of real
+ sparse linear equations with a single right-hand side, Ax=b or
+ T
+ A x=b, where A has been factorized by F01BRF or F01BSF.
+
+ 2. Specification
+
+ SUBROUTINE F04AXF (N, A, LICN, ICN, IKEEP, RHS, W, MTYPE,
+ 1 IDISP, RESID)
+ INTEGER N, LICN, ICN(LICN), IKEEP(5*N), MTYPE,
+ 1 IDISP(2)
+ DOUBLE PRECISION A(LICN), RHS(N), W(N), RESID
+
+ 3. Description
+
+ T
+ To solve a system of real linear equations Ax=b or A x=b, where A
+ is a general sparse matrix, A must first be factorized by F01BRF
+ or F01BSF. F04AXF then computes x by block forward or backward
+ substitution using simple forward and backward substitution
+ within each diagonal block.
+
+ The method is fully described in Duff [1].
+
+ 4. References
+
+ [1] Duff I S (1977) MA28 -- a set of Fortran subroutines for
+ sparse unsymmetric linear equations. A.E.R.E. Report R.8730.
+ HMSO.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 2: A(LICN) -- DOUBLE PRECISION array Input
+ On entry: the non-zero elements in the factorization of the
+ matrix A, as returned by F01BRF or F01BSF.
+
+ 3: LICN -- INTEGER Input
+ On entry:
+ the dimension of the arrays A and ICN as declared in the
+ (sub)program from which F04AXF is called.
+
+ 4: ICN(LICN) -- INTEGER array Input
+ On entry: the column indices of the non-zero elements of
+ the factorization, as returned by F01BRF or F01BSF.
+
+ 5: IKEEP(5*N) -- INTEGER array Input
+ On entry: the indexing information about the factorization,
+ as returned by F01BRF or F01BSF.
+
+ 6: RHS(N) -- DOUBLE PRECISION array Input/Output
+ On entry: the right-hand side vector b. On exit: RHS is
+ overwritten by the solution vector x.
+
+ 7: W(N) -- DOUBLE PRECISION array Workspace
+
+ 8: MTYPE -- INTEGER Input
+ On entry: MTYPE specifies the task to be performed:
+ if MTYPE = 1, solve Ax=b,
+
+ T
+ if MTYPE /= 1, solve A x=b.
+
+ 9: IDISP(2) -- INTEGER array Input
+ On entry: the values returned in IDISP by F01BRF.
+
+ 10: RESID -- DOUBLE PRECISION Output
+ On exit: the value of the maximum residual,
+ --
+ max(|b - > a x |), over all the unsatisfied equations, in
+ i -- ij j
+ j
+ case F01BRF or F01BSF has been used to factorize a singular
+ or rectangular matrix.
+
+ 6. Error Indicators and Warnings
+
+ None.
+
+ 7. Accuracy
+
+ The accuracy of the computed solution depends on the conditioning
+ of the original matrix. Since F04AXF is always used with either
+ F01BRF or F01BSF, the user is recommended to set GROW = .TRUE. on
+ entry to these routines and to examine the value of W(1) on exit
+ (see the routine documents for F01BRF and F01BSF). For a detailed
+ error analysis see Duff [1] page 17.
+
+ If storage for the original matrix is available then the error
+ can be estimated by calculating the residual
+
+ T
+ r=b-Ax (or b-A x)
+
+ and calling F04AXF again to find a correction (delta) for x by
+ solving
+
+ T
+ A(delta)=r (or A (delta)=r).
+
+ 8. Further Comments
+
+ If the factorized form contains (tau) non-zeros (IDISP(2) = (tau)
+ ) then the time taken is very approximately 2(tau) times longer
+ than the inner loop of full matrix code. Some advantage is taken
+ T
+ of zeros in the right-hand side when solving A x=b (MTYPE /= 1).
+
+ 9. Example
+
+ To solve the set of linear equations Ax=b where
+
+ ( 5 0 0 0 0 0)
+ ( 0 2 -1 2 0 0)
+ ( 0 0 3 0 0 0)
+ A=(-2 0 0 1 1 0)
+ (-1 0 0 -1 2 -3)
+ (-1 -1 0 0 0 6)
+
+ and
+
+
+ (15)
+ (12)
+ (18)
+ b=( 3).
+ (-6)
+ ( 0)
+
+ The non-zero elements of A and indexing information are read in
+ by the program, as described in the document for F01BRF.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04faf}{NAG On-line Documentation: f04faf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04FAF(3NAG) Foundation Library (12/10/92) F04FAF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04FAF
+ F04FAF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04FAF calculates the approximate solution of a set of real
+ symmetric positive-definite tridiagonal linear equations.
+
+ 2. Specification
+
+ SUBROUTINE F04FAF (JOB, N, D, E, B, IFAIL)
+ INTEGER JOB, N, IFAIL
+ DOUBLE PRECISION D(N), E(N), B(N)
+
+ 3. Description
+
+ F04FAF is based upon the Linpack routine DPTSL (see Dongarra et
+ al [1]) and solves the equations
+
+ Tx=b,
+
+ where T is a real n by n symmetric positive-definite tridiagonal
+ matrix, using a modified symmetric Gaussian elimination algorithm
+ T
+ to factorize T as T=MKM , where K is diagonal and M is a matrix
+ of multipliers as described in Section 8.
+
+ When the input parameter JOB is supplied as 1, then the routine
+ assumes that a previous call to F04FAF has already factorized T;
+ otherwise JOB must be supplied as 0.
+
+ 4. References
+
+ [1] Dongarra J J, Moler C B, Bunch J R and Stewart G W (1979)
+ LINPACK Users' Guide. SIAM, Philadelphia.
+
+ 5. Parameters
+
+ 1: JOB -- INTEGER Input
+ On entry: specifies the job to be performed by F04FAF as
+ follows:
+ JOB = 0
+ The matrix T is factorized and the equations Tx=b are
+ solved for x.
+
+ JOB = 1
+ The matrix T is assumed to have already been
+ factorized by a previous call to F04FAF with JOB = 0;
+ the equations Tx=b are solved for x.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix T. Constraint: N >= 1.
+
+ 3: D(N) -- DOUBLE PRECISION array Input/Output
+ On entry: if JOB = 0, D must contain the diagonal elements
+ of T. If JOB = 1, D must contain the diagonal matrix K, as
+ returned by a previous call of F04FAF with JOB = 0. On
+ exit: if JOB = 0, D is overwritten by the diagonal matrix K
+ of the factorization. If JOB = 1, D is unchanged.
+
+ 4: E(N) -- DOUBLE PRECISION array Input/Output
+ On entry: if JOB = 0, E must contain the super-diagonal
+ elements of T, stored in E(2) to E(n). If JOB = 1, E must
+ contain the off-diagonal elements of the matrix M, as
+ returned by a previous call of F04FAF with JOB = 0. E(1) is
+ not used. On exit: if JOB = 0, E(2) to E(n) are overwritten
+ by the off-diagonal elements of the matrix M of the
+ factorization. If JOB = 1, E is unchanged.
+
+ 5: B(N) -- DOUBLE PRECISION array Input/Output
+ On entry: the right-hand side vector b. On exit: B is
+ overwritten by the solution vector x.
+
+ 6: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or JOB /= 0 or 1.
+
+ IFAIL= 2
+ The matrix T is either not positive-definite or is nearly
+ singular. This failure can only occur when JOB = 0 and
+ inspection of the elements of D will give an indication of
+ why failure has occurred. If an element of D is close to
+ zero, then T is probably nearly singular; if an element of D
+ is negative but not close to zero, then T is not positive-
+ definite.
+
+ IFAILOverflow
+ If overflow occurs during the execution of this routine,
+ then either T is very nearly singular or an element of the
+ right-hand side vector b is very large. In this latter case
+ the equations should be scaled so that no element of b is
+ very large. Note that to preserve symmetry it is necessary
+ T
+ to scale by a transformation of the form (PTP )b=Px, where P
+ is a diagonal matrix.
+
+ IFAILUnderflow
+ Any underflows that occur during the execution of this
+ routine are harmless.
+
+ 7. Accuracy
+
+ The computed factorization (see Section 8) will satisfy the
+ equation
+
+ T
+ MKM =T+E
+
+ where ||E|| <=2(epsilon)||T|| , p=1,F,infty,
+ p p
+
+ (epsilon) being the machine precision. The computed solution of
+
+
+ the equations Tx=b, say x, will satisfy an equation of the form
+
+
+
+ (T+F)x=b,
+
+ where F can be expected to satisfy a bound of the form
+
+ ||F||<=(alpha)(epsilon)||T||,
+
+ (alpha) being a modest constant. This implies that the relative
+
+
+ error in x satisfies
+
+
+
+ ||x-x||
+ -------<=c(T)(alpha)(epsilon),
+ ||x||
+
+ where c(T) is the condition number of T with respect to
+
+
+ inversion. Thus if T is nearly singular, x can be expected to
+ have a large relative error.
+
+ 8. Further Comments
+
+ The time taken by the routine is approximately proportional to n.
+
+ The routine eliminates the off-diagonal elements of T by
+ simultaneously performing symmetric Gaussian elimination from the
+ top and the bottom of T. The result is that T is factorized as
+
+ T
+ T=MKM ,
+
+ where K is a diagonal matrix and M is a matrix of the form
+
+ (1 0 0 .. 0 0 0 .. 0 0 0 )
+ (m 1 0 .. 0 0 0 .. 0 0 0 )
+ ( 2 )
+ (0 m 1 .. 0 0 0 .. 0 0 0 )
+ ( 3 )
+ (. . . .. . . . .. . . . )
+ (. . . .. . . . .. . . . )
+ (0 0 0 .. 1 0 0 .. 0 0 0 )
+ M=(0 0 0 .. m 1 m .. 0 0 0 )
+ ( j+1 j+2 )
+ (0 0 0 .. 0 0 .. 1 0 0 0 )
+ (. . . .. . . . .. . . . )
+ (. . . .. . . . .. . . . )
+ (0 0 0 .. 0 0 0 .. 1 m 0 )
+ ( n-1 )
+ (0 0 0 .. 0 0 0 .. 0 1 m )
+ ( n)
+ (0 0 0 .. 0 0 0 . . 0 0 1 )
+
+ j being the integer part of n/2. (For example when n=5,j=2.) The
+ diagonal elements of K are returned in D with k in the ith
+ i
+ element of D and m is returned in the ith element of E.
+ i
+
+ The routine fails with IFAIL = 2 if any diagonal element of K is
+ non-positive. It should be noted that T may be nearly singular
+ even if all the diagonal elements of K are positive, but in this
+ case at least one element of K is almost certain to be small
+ relative to |||T|||. If there is any doubt as to whether or not T
+ is nearly singular, then the user should consider examining the
+ diagonal elements of K.
+
+ 9. Example
+
+ To solve the symmetric positive-definite equations
+
+ Tx =b
+ 1 1
+
+ and
+
+ Tx =b
+ 2 2
+
+ where
+
+ ( 4 -2 0 0 0) ( 6) (10)
+ (-2 10 -6 0 0) ( 9) ( 4)
+ T=( 0 -6 29 15 0), b =( 2), b =( 9).
+ ( 0 0 15 25 8) 1 (14) 2 (65)
+ ( 0 0 0 8 5) ( 7) (23)
+
+ The equations are solved by two calls to F04FAF, the first with
+ JOB = 0 and the second, using the factorization from the first
+ call, with JOB = 1.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04jgf}{NAG On-line Documentation: f04jgf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04JGF(3NAG) Foundation Library (12/10/92) F04JGF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04JGF
+ F04JGF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04JGF finds the solution of a linear least-squares problem, Ax=b
+ , where A is a real m by n (m>=n) matrix and b is an m element
+ vector. If the matrix of observations is not of full rank, then
+ the minimal least-squares solution is returned.
+
+ 2. Specification
+
+ SUBROUTINE F04JGF (M, N, A, NRA, B, TOL, SVD, SIGMA,
+ 1 IRANK, WORK, LWORK, IFAIL)
+ INTEGER M, N, NRA, IRANK, LWORK, IFAIL
+ DOUBLE PRECISION A(NRA,N), B(M), TOL, SIGMA, WORK(LWORK)
+ LOGICAL SVD
+
+ 3. Description
+
+ The minimal least-squares solution of the problem Ax=b is the
+ vector x of minimum (Euclidean) length which minimizes the length
+ of the residual vector r=b-Ax.
+
+ The real m by n (m>=n) matrix A is factorized as
+
+ (U)
+ A=Q(0)
+
+ where Q is an m by m orthogonal matrix and U is an n by n upper
+ triangular matrix. If U is of full rank, then the least-squares
+ solution is given by
+
+ -1 T
+ x=(U 0)Q b.
+
+ If U is not of full rank, then the singular value decomposition
+ of U is obtained so that U is factorized as
+
+ T
+ U=RDP ,
+
+ where R and P are n by n orthogonal matrices and D is the n by n
+ diagonal matrix
+
+ D=diag((sigma) ,(sigma) ,...,(sigma) ),
+ 1 2 n
+
+ with (sigma) >=(sigma) >=...(sigma) >=0, these being the singular
+ 1 2 n
+ values of A. If the singular values (sigma) ,...,(sigma) are
+ k+1 n
+ negligible, but (sigma) is not negligible, relative to the data
+ k
+ errors in A, then the rank of A is taken to be k and the minimal
+ least-squares solution is given by
+
+ ( -1 )( T )
+ (S 0)(R 0) T
+ x=P(0 0 )(0 I )Q b,
+
+ where S=diag((sigma) ,(sigma) ,...,(sigma) ).
+ 1 2 k
+
+ This routine obtains the factorizations by a call to F02WDF(*).
+
+ The routine also returns the value of the standard error
+
+
+ / T
+ / r r
+ (sigma)= / --- , if m>k,
+ \/ m-k
+
+ T
+ = 0, if m=k, r r being the residual sum of
+ squares and k the rank of A.
+
+ 4. References
+
+ [1] Lawson C L and Hanson R J (1974) Solving Least-squares
+ Problems. Prentice-Hall.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: m, the number of rows of A. Constraint: M >= N.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of columns of A. Constraint: 1 <= N
+ <= M.
+
+ 3: A(NRA,N) -- DOUBLE PRECISION array Input/Output
+ On entry: the m by n matrix A. On exit: if SVD is returned
+ as .FALSE., A} is overwritten by details of the QU
+ factorization of A (see F02WDF(*) for further details). If
+ SVD is returned as .TRUE., the first n rows of A are
+ overwritten by the right-hand singular vectors, stored by
+ rows; and the remaining rows of the array are used as
+ workspace.
+
+ 4: NRA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F04JGF is called.
+ Constraint: NRA >= M.
+
+ 5: B(M) -- DOUBLE PRECISION array Input/Output
+ On entry: the right-hand side vector b. On exit: the first
+ n elements of B contain the minimal least-squares solution
+ vector x. The remaining m-n elements are used for workspace.
+
+ 6: TOL -- DOUBLE PRECISION Input
+ On entry: a relative tolerance to be used to determine the
+ rank of A. TOL should be chosen as approximately the largest
+ relative error in the elements of A. For example, if the
+ elements of A are correct to about 4 significant figures
+ -4
+ then TOL should be set to about 5*10 . See Section 8 for a
+ description of how TOL is used to determine rank. If TOL is
+ outside the range ((epsilon),1.0), where (epsilon) is the
+ machine precision, then the value (epsilon) is used in place
+ of TOL. For most problems this is unreasonably small.
+
+ 7: SVD -- LOGICAL Output
+ On exit: SVD is returned as .FALSE. if the least-squares
+ solution has been obtained from the QU factorization of A.
+ In this case A is of full rank. SVD is returned as .TRUE. if
+ the least-squares solution has been obtained from the
+ singular value decomposition of A.
+
+ 8: SIGMA -- DOUBLE PRECISION Output
+
+
+ / T
+ On exit: the standard error, i.e., the value \/ r r/(m-k)
+ when m>k, and the value zero when m=k. Here r is the
+ residual vector b-Ax and k is the rank of A.
+
+ 9: IRANK -- INTEGER Output
+ On exit: k, the rank of the matrix A. It should be noted
+ that it is possible for IRANK to be returned as n and SVD to
+ be returned as .TRUE.. This means that the matrix U only
+ just failed the test for non-singularity.
+
+ 10: WORK(LWORK) -- DOUBLE PRECISION array Output
+ On exit: if SVD is returned as .FALSE., then the first n
+ elements of WORK contain information on the QU factorization
+ of A (see parameter A above and F02WDF(*)), and WORK(n+1)
+ -1
+ contains the condition number ||U|| ||U || of the
+ E E
+ upper triangular matrix U.
+
+ If SVD is returned as .TRUE., then the first n elements of
+ WORK contain the singular values of A arranged in descending
+ order and WORK(n+1) contains the total number of iterations
+ taken by the QR algorithm. The rest of WORK is used as
+ workspace.
+
+ 11: LWORK -- INTEGER Input
+ On entry:
+ the dimension of the array WORK as declared in the
+ (sub)program from which F04JGF is called.
+ Constraint: LWORK >= 4*N.
+
+ 12: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or M < N,
+
+ or NRA < M,
+
+ or LWORK < 4*N.
+
+ IFAIL= 2
+ The QR algorithm has failed to converge to the singular
+ values in 50*N iterations. This failure can only happen when
+ the singular value decomposition is employed, but even then
+ it is not likely to occur.
+
+ 7. Accuracy
+
+ T
+ The computed factors Q, U, R, D and P satisfy the relations
+
+ (U) (R 0)(D) T
+ Q(0)=A+E , Q(0 I)(0)P =A+F,
+
+ where
+
+ ||E|| <=c (epsilon)||A|| ,
+ 2 1 2
+
+
+ ||F|| <=c (epsilon)||A|| ,
+ 2 2 2
+
+ (epsilon) being the machine precision, and c and c being modest
+ 1 2
+ functions of m and n. Note that ||A|| =(sigma) .
+ 2 1
+
+ For a fuller discussion, covering the accuracy of the solution x
+ see Lawson and Hanson [1], especially pp 50 and 95.
+
+ 8. Further Comments
+
+ If the least-squares solution is obtained from the QU
+ factorization then the time taken by the routine is approximately
+ 2
+ proportional to n (3m-n). If the least-squares solution is
+ obtained from the singular value decomposition then the time
+ 2
+ taken is approximately proportional to n (3m+19n). The
+ approximate proportionality factor is the same in each case.
+
+ This routine is column biased and so is suitable for use in paged
+ environments.
+
+ Following the QU factorization of A the condition number
+
+ -1
+ c(U)=||U|| ||U ||
+ E E
+
+ is determined and if c(U) is such that
+
+ c(U)*TOL>1.0
+
+ then U is regarded as singular and the singular values of A are
+ computed. If this test is not satisfied, U is regarded as non-
+ singular and the rank of A is set to n. When the singular values
+ are computed the rank of A, say k, is returned as the largest
+ integer such that
+
+ (sigma) >TOL*(sigma) ,
+ k 1
+
+ unless (sigma) =0 in which case k is returned as zero. That is,
+ 1
+ singular values which satisfy (sigma) <=TOL*(sigma) are regarded
+ i 1
+ as negligible because relative perturbations of order TOL can
+ make such singular values zero.
+
+ 9. Example
+
+ To obtain a least-squares solution for r=b-Ax, where
+
+ (0.05 0.05 0.25 -0.25) (1)
+ (0.25 0.25 0.05 -0.05) (2)
+ (0.35 0.35 1.75 -1.75) (3)
+ A=(1.75 1.75 0.35 -0.35), B=(4)
+ (0.30 -0.30 0.30 0.30) (5)
+ (0.40 -0.40 0.40 0.40) (6)
+
+ -4
+ and the value TOL is to be taken as 5*10 .
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04maf}{NAG On-line Documentation: f04maf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04MAF(3NAG) Foundation Library (12/10/92) F04MAF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04MAF
+ F04MAF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ To solve a sparse symmetric positive-definite system of linear
+ equations, Ax=b, using a pre-conditioned conjugate gradient
+ method, where A has been factorized by F01MAF.
+
+ 2. Specification
+
+ SUBROUTINE F04MAF (N, NZ, A, LICN, IRN, LIRN, ICN, B, ACC,
+ 1 NOITS, WKEEP, WORK, IKEEP, INFORM,
+ 2 IFAIL)
+ INTEGER N, NZ, LICN, IRN(LIRN), LIRN, ICN(LICN),
+ 1 NOITS(2), IKEEP(2*N), INFORM(4), IFAIL
+ DOUBLE PRECISION A(LICN), B(N), ACC(2), WKEEP(3*N), WORK
+ 1 (3*N)
+
+ 3. Description
+
+ F04MAF solves the n linear equations
+
+ Ax=b, (1)
+
+ where A is a sparse symmetric positive-definite matrix, following
+ the incomplete Cholesky factorization by F01MAF, given by
+
+ T T
+ C=PLDL P , WAW=C+E,
+
+ where P is a permutation matrix, L is a unit lower triangular
+ matrix, D is a diagonal matrix with positive diagonal elements, E
+ is an error matrix representing elements dropped during the
+ factorization and diagonal elements that have been modified to
+ ensure that C is positive-definite, and W is a diagonal matrix,
+ chosen to make the diagonal elements of WAW unity.
+
+ Equation (1) is solved by applying a pre-conditioned conjugate
+ gradient method to the equations
+
+ -1
+ (WAW)(W x)=Wb, (2)
+
+ using C as the pre-conditioning matrix. Details of the conjugate
+ gradient method are given in Munksgaard [1].
+
+ The iterative procedure is terminated if
+
+ ||Wr|| <=(eta), (3)
+ 2
+
+ where r is the residual vector r=b-Ax, ||r|| denotes the
+ 2
+ Euclidean length of r, (eta) is a user-supplied tolerance and x
+ is the current approximation to the solution. Notice that
+
+ -1
+ Wr=Wb-(WAW)(W x)
+
+ so that Wr is the residual of the normalised equations (2).
+
+ F04MAF is based on the Harwell Library routine MA31B.
+
+ 4. References
+
+ [1] Munksgaard N (1980) Solving Sparse Symmetric Sets of Linear
+ Equations by Pre-conditioned Conjugate Gradients. ACM Trans.
+ Math. Softw. 6 206--219.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 1.
+
+ 2: NZ -- INTEGER Input
+ On entry: the number of non-zero elements in the upper
+ triangular part of the matrix A, including the number of
+ elements on the leading diagonal. Constraint: NZ >= N.
+
+ 3: A(LICN) -- DOUBLE PRECISION array Input
+ On entry: the first LROW elements, where LROW is the value
+ supplied in INFORM(1), must contain details of the
+ factorization, as returned by F01MAF.
+
+ 4: LICN -- INTEGER Input
+ On entry: the length of the array A, as declared in the
+ (sub)program from which F04MAF is called. It need never be
+ larger than the value of LICN supplied to F01MAF.
+ Constraint: LICN >= INFORM(1).
+
+ 5: IRN(LIRN) -- INTEGER array Input
+ On entry: the first LCOL elements, where LCOL is the value
+ supplied in INFORM(2), must contain details of the
+ factorization, as returned by F01MAF.
+
+ 6: LIRN -- INTEGER Input
+ On entry: the length of the array IRN, as declared in the
+ (sub)program from which F04MAF is called. It need never be
+ larger than the value of LIRN supplied to F01MAF.
+ Constraint: LIRN >= INFORM(2).
+
+ 7: ICN(LICN) -- INTEGER array Input
+ On entry: the first LROW elements, where LROW is the value
+ supplied in INFORM(1), must contain details of the
+ factorization, as returned by F01MAF.
+
+ 8: B(N) -- DOUBLE PRECISION array Input/Output
+ On entry: the right-hand side vector b. On exit: B is
+ overwritten by the solution vector x.
+
+ 9: ACC(2) -- DOUBLE PRECISION array Input/Output
+ On entry: ACC(1) specifies the tolerance for convergence,
+ (eta), in equation (3) of Section 3. If ACC(1) is outside
+ the range [(epsilon),1], where (epsilon) is the machine
+ precision, then the value (epsilon) is used in place of ACC
+ (1). ACC(2) need not be set. On exit: ACC(2) contains the
+ actual value of ||Wr|| at the final point. ACC(1) is
+ 2
+ unchanged.
+
+ 10: NOITS(2) -- INTEGER array Input/Output
+ On entry: NOITS(1) specifies the maximum permitted number of
+ iterations. If NOITS(1) < 1, then the value 100 is used in
+ its place. NOITS(2) need not be set. On exit: NOITS(2)
+ contains the number of iterations taken to converge. NOITS
+ (1) is unchanged.
+
+ 11: WKEEP(3*N) -- DOUBLE PRECISION array Input
+ On entry: WKEEP must be unchanged from the previous call of
+ F01MAF.
+
+ 12: WORK(3*N) -- DOUBLE PRECISION array Output
+ On exit: WORK(1) contains a lower bound for the condition
+ number of A. The rest of the array is used for workspace.
+
+ 13: IKEEP(2*N) -- INTEGER array Input
+ On entry: IKEEP must be unchanged from the previous call of
+ F01MAF.
+
+ 14: INFORM(4) -- INTEGER array Input
+ On entry: INFORM must be unchanged from the previous call of
+ F01MAF.
+
+ 15: IFAIL -- INTEGER Input/Output
+ For this routine, the normal use of IFAIL is extended to
+ control the printing of error and warning messages as well
+ as specifying hard or soft failure (see the Essential
+ Introduction).
+
+ Before entry, IFAIL must be set to a value with the decimal
+ expansion cba, where each of the decimal digits c, b and a
+ must have a value of 0 or 1.
+ a=0 specifies hard failure, otherwise soft failure;
+
+ b=0 suppresses error messages, otherwise error messages
+ will be printed (see Section 6);
+
+ c=0 suppresses warning messages, otherwise warning
+ messages will be printed (see Section 6).
+ The recommended value for inexperienced users is 110 (i.e.,
+ hard failure with all messages printed).
+
+ Unless the routine detects an error (see Section 6), IFAIL
+ contains 0 on exit.
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ For each error, an explanatory error message is output on the
+ current error message unit (as defined by X04AAF), unless
+ suppressed by the value of IFAIL on entry.
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or NZ < N,
+
+ or LICN < INFORM(1),
+
+ or LIRN < INFORM(2).
+
+ IFAIL= 2
+ Convergence has not taken place within the requested NOITS
+ (1) number of iterations. ACC(2) gives the value ||Wr|| ,
+ 2
+ for the final point. Either too few iterations have been
+ allowed, or the requested convergence criterion cannot be
+ met.
+
+ IFAIL= 3
+ The matrix A is singular, or nearly singular. Singularity
+ has been detected during the conjugate gradient iterations,
+ so that the computations are not complete.
+
+ IFAIL= 4
+ The matrix A is singular, or nearly singular. The message
+ output on the current error message channel will include an
+ estimate of the condition number of A. In the case of soft
+ failure an approximate solution is returned such that the
+ value ||Wr|| is given by ACC(2) and the estimate (a lower
+ 2
+ bound) of the condition number is returned in WORK(1).
+
+ 7. Accuracy
+
+ On successful return, or on return with IFAIL = 2 or IFAIL = 4
+ the computed solution will satisfy equation (3) of Section 3,
+ with (eta) = ACC(2).
+
+ 8. Further Comments
+
+ The time taken by the routine will depend upon the sparsity of
+ the factorization and the number of iterations required. The
+ number of iterations will be affected by the nature of the
+ factorization supplied by F01MAF. The more incomplete the
+ factorization, the higher the number of iterations required by
+ F04MAF.
+
+ When the solution of several systems of equations, all with the
+ same matrix of coefficients, A, is required, then F01MAF need be
+ called only once to factorize A. This is illustrated in the
+ context of an eigenvalue problem in the example program for
+ F02FJF.
+
+ 9. Example
+
+ The example program illustrates the use of F01MAF in conjunction
+ with F04MAF to solve the 16 linear equations Ax=b, where
+
+ (1 a a )
+ (a 1 a a )
+ ( a 1 a a )
+ ( a 1 0 a )
+ (a 0 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 0 a )
+ A=( a 0 1 a a )
+ ( a a 1 a a )
+ ( a a 1 a a )
+ ( a a 1 0 a)
+ ( a 0 1 a )
+ ( a a 1 a )
+ ( a a 1 a)
+ ( a a 1)
+
+ 1
+ where a=- -.
+ 4
+
+ T ( 1 1 1 1 1 1 1 1 1 1 1 1)
+ b =( - - - - - 0 0 - - 0 0 - - - - -)
+ ( 2 4 4 2 4 4 4 4 2 4 4 2)
+
+ The n by n matrix A arises in the solution of Laplace's equation
+ in a unit-square, using a five-point formula with a 6 by 6
+ discretisation, with unity on the boundaries.
+
+ The drop tolerance, DROPTL, is taken as 0.1 and the density
+ factor, DENSW, is taken as 0.8. The value IFAIL = 111 is used so
+ that advisory and error messages will be printed, but soft
+ failure would occur if IFAIL were returned as non-zero.
+
+ A relative accuracy of about 0.0001 is requested in the solution
+ from F04MAF, with a maximum of 50 iterations.
+
+ The example program for F02FJF illustrates the use of routines
+ F01MAF and F04MAF in solving an eigenvalue problem.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04mbf}{NAG On-line Documentation: f04mbf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04MBF(3NAG) Foundation Library (12/10/92) F04MBF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04MBF
+ F04MBF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04MBF solves a system of real sparse symmetric linear equations
+ using a Lanczos algorithm.
+
+ 2. Specification
+
+ SUBROUTINE F04MBF (N, B, X, APROD, MSOLVE, PRECON, SHIFT,
+ 1 RTOL, ITNLIM, MSGLVL, ITN, ANORM,
+ 2 ACOND, RNORM, XNORM, WORK, RWORK,
+ 3 LRWORK, IWORK, LIWORK, INFORM, IFAIL)
+ INTEGER N, ITNLIM, MSGLVL, ITN, LRWORK, IWORK
+ 1 (LIWORK), LIWORK, INFORM, IFAIL
+ DOUBLE PRECISION B(N), X(N), SHIFT, RTOL, ANORM, ACOND,
+ 1 RNORM, XNORM, WORK(N,5), RWORK(LRWORK)
+ LOGICAL PRECON
+ EXTERNAL APROD, MSOLVE
+
+ 3. Description
+
+ F04MBF solves the system of linear equations
+
+ (A-(lambda)I)x=b (3.1)
+
+ where A is an n by n sparse symmetric matrix and (lambda) is a
+ scalar, which is of course zero if the solution of the equations
+
+ Ax=b
+
+ is required. It should be noted that neither A nor (A-(lambda)I)
+ need be positive-definite.
+
+ (lambda) is supplied as the parameter SHIFT, and allows F04MBF to
+ be used for finding eigenvectors of A in methods such as Rayleigh
+ quotient iteration (see for example Lewis [1]), in which case
+ (lambda) will be an approximation to an eigenvalue of A and b an
+ approximation to an eigenvector of A.
+
+ The routine also provides an option to allow pre-conditioning and
+ this will often reduce the number of iterations required by
+ F04MBF.
+
+ F04MBF is based upon algorithm SYMMLQ (see Paige and Saunders
+ [2]) and solves the equations by an algorithm based upon the
+
+ Lanczos process. Details of the method are given in Paige and
+ Saunders [2]. The routine does not require A explicitly, but A is
+ specified via a user-supplied routine APROD which, given an n
+ element vector c, must return the vector z given by
+
+ z=Ac.
+
+ The pre-conditioning option is based on the following reasoning.
+ If A can be expressed in the form
+
+ A=I+B
+
+ where B is of rank (rho), then the Lanczos process converges (in
+ exact arithmetic) in at most (rho) iterations. If more generally
+ A can be expressed in the form
+
+ A=M+C
+
+ where M is symmetric positive-definite and C has rank (rho), then
+
+ -(1/2) -(1/2) -(1/2) -(1/2)
+ M AM =I+M CM
+
+ -(1/2) -(1/2)
+ and M AM also has rank (rho), and the Lanczos process
+ -(1/2) -(1/2)
+ applied to M AM would again converge in at most (rho)
+ iterations. On a computer, the number of iterations may be
+ greater than (rho), but the Lanczos process may still be expected
+ -(1/2) -(1/2)
+ to converge rapidly. F04MBF does not require M AM to
+ be formed explicitly, but implicitly solves the equations
+
+ -(1/2) -(1/2) -(1/2) 1/2
+ M (A-(lambda)I)M y=M b , y=M x (3.2)
+
+ with the user being required to supply a routine MSOLVE to solve
+ the equations
+
+ Mz=c. (3.3)
+
+ For the pre-conditioning option to be effective, it is desirable
+ that equations (3.3) can be solved efficiently. The example
+ program in Section 9 illustrates the use of this option.
+
+ If we let r denote the residual vector
+
+ r=b-(A-(lambda)I)x
+
+ corresponding to an iterate x, then, when pre-conditioning has
+ not been requested, the iterative procedure is terminated if it
+ is estimated that
+
+ ||r||<=tol.||A-(lambda)I||.||x||, (3.4)
+
+ where tol is a user-supplied tolerance, ||r|| denotes the
+ Euclidean length of the vector r and ||A|| denotes the Frobenius
+ (Euclidean) norm of the matrix A. When pre-conditioning has been
+ requested, the iterative procedure is terminated if it is
+ estimated that
+
+ -(1/2) -(1/2) -(1/2) 1/2
+ ||M r||<=tol.||M (A-(lambda)I)M ||.||M x||. (3.5)
+
+ Note that
+
+ -(1/2) -(1/2) -(1/2) -(1/2) 1/2
+ M r=(M b)-M (A-(lambda)I)M (M x)
+
+ -(1/2)
+ so that M r is the residual vector corresponding to equation
+ (3.2). The routine will also terminate if it is estimated that
+
+ ||A-(lambda)I||.||x||>=||b||/(epsilon), (3.6)
+
+ where (epsilon) is the machine precision, when pre-conditioning
+ has not been requested; or if it is estimated that
+
+
+ -(1/2) -(1/2) 1/2 -(1/2)
+ ||M (A-(lambda)I)M ||.||M x||>=||M b||/(epsilon)
+
+ (3.7)
+
+ when pre-conditioning has been requested. If (3.6) is satisfied
+ then x is almost certainly an eigenvector of A corresponding to
+ the eigenvalue (lambda). If (lambda) was set to 0 (for the
+ solution of Ax=b), then this condition simply means that A is
+ effectively singular.
+
+ 4. References
+
+ [1] Lewis J G (1977) Algorithms for sparse matrix eigenvalue
+ problems. Technical Report STAN-CS-77-595. Computer Science
+ Department, Stanford University.
+
+ [2] Paige C C and Saunders M A (1975) Solution of Sparse
+ Indefinite Systems of Linear Equations. SIAM J. Numer. Anal.
+ 12 617--629.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 1.
+
+ 2: B(N) -- DOUBLE PRECISION array Input
+ On entry: the right-hand side vector b.
+
+ 3: X(N) -- DOUBLE PRECISION array Output
+ On exit: the solution vector x.
+
+ 4: APROD -- SUBROUTINE, supplied by the user.
+ External Procedure
+ APROD must return the vector y=Ax for a given vector x.
+
+ Its specification is:
+
+ SUBROUTINE APROD (IFLAG, N, X, Y, RWORK, LRWORK,
+ 1 IWORK,LIWORK)
+ INTEGER IFLAG, N, LRWORK, LIWORK, IWORK
+ 1 (LIWORK)
+ DOUBLE PRECISION X(N), Y(N), RWORK(LRWORK)
+
+ 1: IFLAG -- INTEGER Input/Output
+ On entry: IFLAG is always non-negative. On exit: IFLAG
+ may be used as a flag to indicate a failure in the
+ computation of Ax. If IFLAG is negative on exit from
+ APROD, F04MBF will exit immediately with IFAIL set to
+ IFLAG.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix A.
+
+ 3: X(N) -- DOUBLE PRECISION array Input
+ On entry: the vector x for which Ax is required.
+
+ 4: Y(N) -- DOUBLE PRECISION array Output
+ On exit: the vector y=Ax.
+
+ 5: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+
+ 6: LRWORK -- INTEGER Input
+
+ 7: IWORK(LIWORK) -- INTEGER array User Workspace
+
+ 8: LIWORK -- INTEGER Input
+ APROD is called from F04MBF with the parameters RWORK,
+ LRWORK, IWORK and LIWORK as supplied to F04MBF. The
+ user is free to use the arrays RWORK and IWORK to
+ supply information to APROD and MSOLVE as an
+ alternative to using COMMON.
+ APROD must be declared as EXTERNAL in the (sub)program
+ from which F04MBF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 5: MSOLVE -- SUBROUTINE, supplied by the user.
+ External Procedure
+ MSOLVE is only referenced when PRECON is supplied as .TRUE..
+ When PRECON is supplied as .FALSE., then F04MBF may be
+ called with APROD as the actual argument for MSOLVE. When
+ PRECON is supplied as .TRUE., then MSOLVE must return the
+ solution y of the equations My=x for a given vector x, where
+ M must be symmetric positive-definite.
+
+ Its specification is:
+
+ SUBROUTINE MSOLVE (IFLAG, N, X, Y, RWORK,
+ 1 LRWORK, IWORK,LIWORK)
+ INTEGER IFLAG, N, LRWORK, LIWORK, IWORK
+ 1 (LIWORK)
+ DOUBLE PRECISION X(N), Y(N), RWORK(LRWORK)
+
+ 1: IFLAG -- INTEGER Input/Output
+ On entry: IFLAG is always non-negative. On exit: IFLAG
+ may be used as a flag to indicate a failure in the
+ solution of My=x.
+
+ If IFLAG is negative on exit from MSOLVE, F04MBF will
+ exit immediately with IFAIL set to IFLAG.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix M.
+
+ 3: X(N) -- DOUBLE PRECISION array Input
+ On entry: the vector x for which the equations My=x are
+ to be solved.
+
+ 4: Y(N) -- DOUBLE PRECISION array Output
+ On exit: the solution to the equations My=x.
+
+ 5: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+
+ 6: LRWORK -- INTEGER Input
+
+ 7: IWORK(LIWORK) -- INTEGER array User Workspace
+
+ 8: LIWORK -- INTEGER Input
+ MSOLVE is called from F04MBF with the parameters RWORK,
+ LRWORK, IWORK and LIWORK as supplied to F04MBF. The
+ user is free to use the arrays RWORK and IWORK to
+ supply information to APROD and MSOLVE as an
+ alternative to using COMMON.
+ MSOLVE must be declared as EXTERNAL in the (sub)program
+ from which F04MBF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 6: PRECON -- LOGICAL Input
+ On entry: PRECON specifies whether or not pre-conditioning
+ is required. If PRECON = .TRUE., then pre-conditioning will
+ be invoked and MSOLVE will be referenced by F04MBF; if
+ PRECON = .FALSE., then MSOLVE is not referenced.
+
+ 7: SHIFT -- DOUBLE PRECISION Input
+ On entry: the value of (lambda). If the equations Ax=b are
+ to be solved, then SHIFT must be supplied as zero.
+
+ 8: RTOL -- DOUBLE PRECISION Input
+ On entry: the tolerance for convergence, tol, of equation
+ (3.4). RTOL should not normally be less than (epsilon),
+ where (epsilon) is the machine precision.
+
+ 9: ITNLIM -- INTEGER Input
+ On entry: an upper limit on the number of iterations. If
+ ITNLIM <= 0, then the value N is used in place of ITNLIM.
+
+ 10: MSGLVL -- INTEGER Input
+ On entry: the level of printing from F04MBF. If MSGLVL <= 0,
+ then no printing occurs, but otherwise messages will be
+ output on the advisory message channel (see X04ABF). A
+ description of the printed output is given in Section 5.1
+ below. The level of printing is determined as follows:
+ MSGLVL <= 0
+ No printing.
+
+ MSGLVL = 1
+ A brief summary is printed just prior to return from
+ F04MBF.
+
+ MSGLVL >= 2
+ A summary line is printed periodically to monitor the
+ progress of F04MBF, together with a brief summary just
+ prior to return from F04MBF.
+
+ 11: ITN -- INTEGER Output
+ On exit: the number of iterations performed.
+
+ 12: ANORM -- DOUBLE PRECISION Output
+ On exit: an estimate of ||A-(lambda)I|| when PRECON =
+ -(1/2) -(1/2)
+ .FALSE., and ||M (A-(lambda)I)M || when PRECON =
+ .TRUE..
+
+ 13: ACOND -- DOUBLE PRECISION Output
+ On exit: an estimate of the condition number of (A-
+ (lambda)I) when PRECON = .FALSE., and of
+ -(1/2) -(1/2)
+ M (A-(lambda)I)M when PRECON = .TRUE.. This will
+ usually be a substantial under-estimate.
+
+ 14: RNORM -- DOUBLE PRECISION Output
+ On exit: ||r||, where r=b-(A-(lambda)I)x and x is the
+ solution returned in X.
+
+ 15: XNORM -- DOUBLE PRECISION Output
+ On exit: ||x||, where x is the solution returned in X.
+
+ 16: WORK(5*N) -- DOUBLE PRECISION array Workspace
+
+ 17: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+ RWORK is not used by F04MBF, but is passed directly to
+ routines APROD and MSOLVE and may be used to pass
+ information to these routines.
+
+ 18: LRWORK -- INTEGER Input
+ On entry: the length of the array RWORK as declared in the
+ (sub)program from which F04MBF is called. Constraint: LRWORK
+ >= 1.
+
+ 19: IWORK(LIWORK) -- INTEGER array User Workspace
+ IWORK is not used by F04MBF, but is passed directly to
+ routines APROD and MSOLVE and may be used to pass
+ information to these routines.
+
+ 20: LIWORK -- INTEGER Input
+ On entry: the length of the array IWORK as declared in the
+ (sub)program from which F04MBF is called. Constraint: LIWORK
+ >= 1.
+
+ 21: INFORM -- INTEGER Output
+ On exit: the reason for termination of F04MBF as follows:
+ INFORM = 0
+ The right-hand side vector b=0 so that the exact
+ solution is x=0. No iterations are performed in this
+ case.
+
+ INFORM = 1
+ The termination criterion of equation (3.4) has been
+ satisfied with tol as the value supplied in RTOL.
+
+ INFORM = 2
+ The termination criterion of equation (3.4) has been
+ satisfied with tol equal to (epsilon), where (epsilon)
+ is the machine precision. The value supplied in RTOL
+ must have been less than (epsilon) and was too small
+ for the machine.
+
+ INFORM = 3
+ The termination criterion of equation (3.5) has been
+ satisfied so that X is almost certainly an eigenvector
+ of A corresponding to the eigenvalue SHIFT.
+ The values INFORM = 4 and INFORM = 5 correspond to failure
+ with IFAIL = 3 or IFAIL = 2 respectively (see Section 6) and
+ when IFAIL is negative, INFORM will be set to the same
+ negative value.
+
+ 22: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 5.1. Description of the Printed Output
+
+ When MSGLVL > 0, then F04MBF will produce output (except in the
+ case where the routine fails with IFAIL = 1) on the advisory
+ message channel (see X04ABF ).
+
+ The following notation is used in the output.
+
+ Output Meaning
+
+ -(1/2)
+ RBAR M (b-(A-(lambda)I)x)=r
+
+ -(1/2) -(1/2)
+ ABAR M (A-(lambda)I)M =A
+
+ 1/2
+ Y M x
+
+ R b-(A-(lambda)I)x
+
+ NORM(A) ||A||
+
+ Of course, when pre-conditioning has not been requested then the
+ first three reduce to (b-(A-(lambda)I)x), (A-(lambda)I) and x
+ respectively. When MSGLVL >= 2 then some initial information is
+ printed and the following notation is used.
+
+ Output Meaning
+
+ T -1 1/2
+ BETA1 (b M b) ==(beta)
+ 1
+
+ 2 -(1/2) T -(1/2) -(1/2) -(1/2)
+ ALFA1 (1/(beta) ) (M b) (M AM )(M b)
+ 1
+ ==(alpha)
+ 1
+ and a summary line is printed periodically giving the following
+ information:
+
+ Output Meaning
+
+ ITN Iteration number, k.
+
+ L L
+ X1(LQ) The first element of the vector x , where x is the
+ k k
+ current iterate. See Paige and Saunders [2] for
+ details.
+
+ C C
+ X1(CG) The first element of the vector x , where x is the
+ k k
+ vector that would be obtained by conjugate
+ gradients. See Paige and Saunders [2] for details.
+
+
+
+ NORM(RBAR) ||r||, where r is as defined above and x is either
+ L C
+ x or x depending upon which is the best current
+ k k
+ approximation to the solution. (See LQ/CG below).
+
+ NORM(T) The value ||T ||, where T is the tridiagonal
+ k k
+ matrix of the Lanczos process. This increases
+
+
+ monotonically and is a lower bound on ||A||.
+
+ COND(L) A monotonically increasing lower bound on the
+ -1
+ condition number of A, ||A||||(A) ||.
+
+ L
+ LQ/CG L is printed if x is the best current
+ k
+ approximation to the solution and C is printed
+ otherwise.
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL< 0
+ A negative value of IFAIL indicates an exit from F04MBF
+ because the user has set IFLAG negative in APROD or MSOLVE.
+ The value of IFAIL will be the same as the user's setting of
+ IFLAG.
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or LRWORK < 1,
+
+ or LIWORK < 1.
+
+ IFAIL= 2
+ The pre-conditioning matrix M does not appear to be
+ positive-definite. The user should check that MSOLVE is
+ working correctly.
+
+ IFAIL= 3
+ The limit on the number of iterations has been reached. If
+ IFAIL = 1 on entry then the latest approximation to the
+ solution is returned in X and the values ANORM, ACOND, RNORM
+ and XNORM are also returned.
+
+ The value of INFORM contains additional information about the
+ termination of the routine and users must examine INFORM to judge
+ whether the routine has performed successfully for the problem in
+ hand. In particular INFORM = 3 denotes that the matrix A-
+ (lambda)I is effectively singular: if the purpose of calling
+ F04MBF is to solve a system of equations Ax=b, then this
+ condition must be regarded as a failure, but if the purpose is to
+ compute an eigenvector, this result would be very satisfactory.
+
+ 7. Accuracy
+
+ The computed solution x will satisfy the equation
+
+ r=b-(A-(lambda)I)x
+
+ where the value ||r|| is as returned in the parameter RNORM.
+
+ 8. Further Comments
+
+ The time taken by the routine is likely to be principally
+ determined by the time taken in APROD and, when pre-conditioning
+ has been requested, in MSOLVE. Each of these routines is called
+ once every iteration.
+
+ The time taken by the remaining operations in F04MBF is
+ approximately proportional to n.
+
+ 9. Example
+
+ To solve the 10 equations Ax=b given by
+
+ (2 1 0 0 0 0 0 0 0 3) (6)
+ (1 2 1 0 0 0 0 0 0 0) (4)
+ (0 1 2 1 0 0 0 0 0 0) (4)
+ (0 0 1 2 1 0 0 0 0 0) (4)
+ (0 0 0 1 2 1 0 0 0 0) (4)
+ A=(0 0 0 0 1 2 1 0 0 0), b=(4).
+ (0 0 0 0 0 1 2 1 0 0) (4)
+ (0 0 0 0 0 0 1 2 1 0) (4)
+ (0 0 0 0 0 0 0 1 2 1) (4)
+ (3 0 0 0 0 0 0 0 1 2) (6)
+
+ The tridiagonal part of A is positive-definite and such
+ tridiagonal equations can be solved efficiently by F04FAF. The
+ form of A suggests that this tridiagonal part is a good candidate
+ for the pre-conditioning matrix M and so we illustrate the use of
+ F04MBF by pre-conditioning with the 10 by 10 matrix
+
+ (2 1 0 ... 0)
+ (1 2 1 ... 0)
+ (0 1 2 ... 0)
+ M=(. . . . ).
+ (. . . . )
+ (. . . . )
+ (0 0 0 ... 2)
+
+ Since A-M has only 2 non-zero elements and is obviously of rank
+ 2, we can expect F04MBF to converge very quickly in this example.
+ Of course, in practical problems we shall not usually be able to
+ make such a good choice of M.
+
+ -5
+ The example sets the tolerance RTOL = 10 .
+
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04mcf}{NAG On-line Documentation: f04mcf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04MCF(3NAG) Foundation Library (12/10/92) F04MCF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04MCF
+ F04MCF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04MCF computes the approximate solution of a system of real
+ linear equations with multiple right-hand sides, AX=B, where A
+ is a symmetric positive-definite variable-bandwidth matrix, which
+ has previously been factorized by F01MCF. Related systems may
+ also be solved.
+
+ 2. Specification
+
+ SUBROUTINE F04MCF (N, AL, LAL, D, NROW, IR, B, NRB,
+ 1 ISELCT, X, NRX, IFAIL)
+ INTEGER N, LAL, NROW(N), IR, NRB, ISELCT, NRX,
+ 1 IFAIL
+ DOUBLE PRECISION AL(LAL), D(N), B(NRB,IR), X(NRX,IR)
+
+ 3. Description
+
+ The normal use of this routine is the solution of the systems
+ AX=B, following a call of F01MCF to determine the Cholesky
+ T
+ factorization A=LDL of the symmetric positive-definite variable-
+ bandwidth matrix A.
+
+ However, the routine may be used to solve any one of the
+ following systems of linear algebraic equations:
+
+ T
+ (1) LDL X = B (usual system),
+
+ (2) LDX = B (lower triangular system),
+
+ T
+ (3) DL X = B (upper triangular system),
+
+ T
+ (4) LL X = B
+
+ (5) LX = B (unit lower triangular system),
+
+ T
+ (6) L X = B (unit upper triangular system).
+
+ L denotes a unit lower triangular variable-bandwidth matrix of
+ order n, D a diagonal matrix of order n, and B a set of right-
+ hand sides.
+
+ The matrix L is represented by the elements lying within its
+ envelope i.e., between the first non-zero of each row and the
+ diagonal (see Section 9 for an example). The width NROW(i) of the
+ ith row is the number of elements between the first non-zero
+ element and the element on the diagonal inclusive.
+
+ 4. References
+
+ [1] Wilkinson J H and Reinsch C (1971) Handbook for Automatic
+ Computation II, Linear Algebra. Springer-Verlag.
+
+ 5. Parameters
+
+ 1: N -- INTEGER Input
+ On entry: n, the order of the matrix L. Constraint: N >= 1.
+
+ 2: AL(LAL) -- DOUBLE PRECISION array Input
+ On entry: the elements within the envelope of the lower
+ triangular matrix L, taken in row by row order, as returned
+ by F01MCF. The unit diagonal elements of L must be stored
+ explicitly.
+
+ 3: LAL -- INTEGER Input
+ On entry:
+ the dimension of the array AL as declared in the
+ (sub)program from which F04MCF is called.
+ Constraint: LAL >= NROW(1) + NROW(2) +... + NROW(n).
+
+ 4: D(N) -- DOUBLE PRECISION array Input
+ On entry: the diagonal elements of the diagonal matrix D. D
+ is not referenced if ISELCT >= 4.
+
+ 5: NROW(N) -- INTEGER array Input
+ On entry: NROW(i) must contain the width of row i of L,
+ i.e.,the number of elements between the first (leftmost)
+ non-zero element and the element on the diagonal, inclusive.
+ Constraint: 1 <= NROW(i)<=i.
+
+ 6: IR -- INTEGER Input
+ On entry: r, the number of right-hand sides. Constraint: IR
+ >= 1.
+
+ 7: B(NRB,IR) -- DOUBLE PRECISION array Input
+ On entry: the n by r right-hand side matrix B. See also
+ Section 8.
+
+ 8: NRB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F04MCF is called.
+ Constraint: NRB >= N.
+
+ 9: ISELCT -- INTEGER Input
+ On entry: ISELCT must specify the type of system to be
+ solved, as follows:
+
+ T
+ ISELCT = 1: solve LDL X = B,
+
+ ISELCT = 2: solve LDX = B,
+
+ T
+ ISELCT = 3: solve DL X = B,
+
+ T
+ ISELCT = 4: solve LL X = B,
+
+ ISELCT = 5: solve LX = B,
+
+ T
+ ISELCT = 6: solve L X = B.
+
+ 10: X(NRX,IR) -- DOUBLE PRECISION array Output
+ On exit: the n by r solution matrix X. See also Section 8.
+
+ 11: NRX -- INTEGER Input
+ On entry:
+ the first dimension of the array X as declared in the
+ (sub)program from which F04MCF is called.
+ Constraint: NRX >= N.
+
+ 12: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL= 1
+ On entry N < 1,
+
+ or for some i, NROW(i)<1 or NROW(i) > i,
+
+ or LAL < NROW(1) + NROW(2) +... + NROW(N).
+
+ IFAIL= 2
+
+ On entry IR < 1,
+
+ or NRB < N,
+
+ or NRX < N.
+
+ IFAIL= 3
+ On entry ISELCT < 1,
+
+ or ISELCT > 6.
+
+ IFAIL= 4
+ The diagonal matrix D is singular, i.e., at least one of the
+ elements of D is zero. This can only occur if ISELCT <= 3.
+
+ IFAIL= 5
+ At least one of the diagonal elements of L is not equal to
+ unity.
+
+ 7. Accuracy
+
+ The usual backward error analysis of the solution of triangular
+ system applies: each computed solution vector is exact for
+ slightly perturbed matrices L and D, as appropriate (cf.
+ Wilkinson and Reinsch [1] pp 25--27, 54--55).
+
+ 8. Further Comments
+
+ The time taken by the routine is approximately proportional to
+ pr, where
+
+ p=NROW(1)+NROW(2)+...+NROW(n).
+
+ Unless otherwise stated in the Users' Note for your
+ implementation, the routine may be called with the same actual
+ array supplied for the parameters B and X, in which case the
+ solution matrix will overwrite the right-hand side matrix.
+ However this is not standard Fortran 77 and may not work in all
+ implementations.
+
+ 9. Example
+
+ To solve the system of equations AX=B, where
+
+ (1 2 0 0 5 0)
+ (2 5 3 0 14 0)
+ (0 3 13 0 18 0)
+ A=(0 0 0 16 8 24)
+ (5 14 18 8 55 17)
+ (0 0 0 24 17 77)
+
+ and
+
+ ( 6 -10)
+ (15 -21)
+ (11 -3)
+ B=( 0 24)
+ (51 -39)
+ (46 67)
+
+ Here A is symmetric and positive-definite and must first be
+ factorized by F01MCF.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf04qaf}{NAG On-line Documentation: f04qaf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F04QAF(3NAG) Foundation Library (12/10/92) F04QAF(3NAG)
+
+
+
+ F04 -- Simultaneous Linear Equations F04QAF
+ F04QAF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F04QAF solves sparse unsymmetric equations, sparse linear least-
+ squares problems and sparse damped linear least-squares problems,
+ using a Lanczos algorithm.
+
+ 2. Specification
+
+ SUBROUTINE F04QAF (M, N, B, X, SE, APROD, DAMP, ATOL,
+ 1 BTOL, CONLIM, ITNLIM, MSGLVL, ITN,
+ 2 ANORM, ACOND, RNORM, ARNORM, XNORM,
+ 3 WORK, RWORK, LRWORK, IWORK, LIWORK,
+ 4 INFORM, IFAIL)
+ INTEGER M, N, ITNLIM, MSGLVL, ITN, LRWORK, IWORK
+ 1 (LIWORK), LIWORK, INFORM, IFAIL
+ DOUBLE PRECISION B(M), X(N), SE(N), DAMP, ATOL, BTOL,
+ 1 CONLIM, ANORM, ACOND, RNORM, ARNORM,
+ 2 XNORM, WORK(N,2), RWORK(LRWORK)
+ EXTERNAL APROD
+
+ 3. Description
+
+ F04QAF can be used to solve a system of linear equations
+
+ Ax=b (3.1)
+
+ where A is an n by n sparse unsymmetric matrix, or can be used to
+ solve linear least-squares problems, so that F04QAF minimizes the
+ value (rho) given by
+
+ (rho)=||r||, r=b-Ax (3.2)
+
+ where A is an m by n sparse matrix and ||r|| denotes the
+ 2 T
+ Euclidean length of r so that ||r|| =r r. A damping parameter,
+ (lambda), may be included in the least-squares problem in which
+ case F04QAF minimizes the value (rho) given by
+
+ 2 2 2 2
+ (rho) =||r|| +(lambda) ||x|| (3.3)
+
+ (lambda) is supplied as the parameter DAMP and should of course
+ be zero if the solution to problems (3.1) or (3.2) is required.
+ Minimizing (rho) in (3.3) is often called ridge regression.
+
+ F04QAF is based upon algorithm LSQR (see Paige and Saunders [1]
+ and [2]) and solves the problems by an algorithm based upon the
+ Lanczos process. Details of the method are given in [1]. The
+ routine does not require A explicitly, but A is specified via a
+ user-supplied routine APROD which must perform the operations (
+ T
+ y+Ax) and (x+A y) for a given n element vector x and m element
+ vector y. A parameter to APROD specifies which of the two
+ operations is required on a given entry.
+
+ The routine also returns estimates of the standard errors of the
+ sample regression coefficients (x , for i=1,2,...,n) given by the
+ i
+ diagonal elements of the estimated variance-covariance matrix V.
+ When problem (3.2) is being solved and A is of full rank, then V
+ is given by
+
+ 2 T -1 2 2
+ V=s (A A) , s =(rho) /(m-n), m>n
+
+ and when problem (3.3) is being solved then V is given by
+
+ 2 T 2 -1 2 2
+ V=s (A A+(lambda) I) , s =(rho) /m, (lambda)/=0.
+
+
+
+ Let A denote the matrix
+
+ (A )
+ A=A, (lambda)=0 ; A=((lambda)I), (lambda)/=0, (3.4)
+
+
+
+ let r denote the residual vector
+
+ (b)
+ r=r, (lambda)=0 ; r=(0)-Ax, (lambda)/=0 (3.5)
+
+
+
+ corresponding to an iterate x, so that (rho)=||r|| is the
+ function being minimized, and let ||A|| denote the Frobenius
+ (Euclidean) norm of A. Then the routine accepts x as a solution
+ if it is estimated that one of the following two conditions is
+ satisfied:
+
+
+
+ (rho)<=tol ||A||.||x||+tol ||b|| (3.6)
+ 1 2
+
+ T
+ ||A r||<=tol ||A||(rho) (3.7)
+ 1
+
+ where tol and tol are user-supplied tolerances which estimate
+ 1 2
+ the relative errors in A and b respectively. Condition (3.6) is
+ appropriate for compatible problems where, in theory, we expect
+ the residual to be zero and will be satisfied by an acceptable
+ solution x to a compatible problem. Condition (3.7) is
+ appropriate for incompatible systems where we do not expect the
+ residual to be zero and is based upon the observation that, in
+ theory,
+
+ T
+ A r=0
+
+ when x is a solution to the least-squares problem, and so (3.7)
+ will be satisfied by an acceptable solution x to a linear least-
+ squares problem.
+
+ The routine also includes a test to prevent convergence to
+ solutions, x, with unacceptably large elements. This can happen
+ if A is nearly singular or is nearly rank deficient. If we let
+
+
+ the singular values of A be
+
+ (sigma) >=(sigma) >=...>=(sigma) >=0
+ 1 2 n
+
+
+
+ then the condition number of A is defined as
+
+
+
+ cond(A)=(sigma) /(sigma)
+ 1 k
+
+
+
+ where (sigma) is the smallest non-zero singular value of A and
+ k
+
+
+ hence k is the rank of A. When k<n, then A is rank deficient, the
+ least-squares solution is not unique and F04QAF will normally
+
+
+ converge to the minimal length solution. In practice A will not
+ have exactly zero singular values, but may instead have small
+ singular values that we wish to regard as zero.
+
+ The routine provides for this possibility by terminating if
+
+
+
+ cond(A)>=c (3.8)
+ lim
+
+
+
+ where c is a user-supplied limit on the condition number of A.
+ lim
+ For problem (3.1) termination with this condition indicates that
+ A is nearly singular and for problem (3.2) indicates that A is
+ nearly rank deficient and so has near linear dependencies in its
+ T
+ columns. In this case inspection of ||r||, ||A r|| and ||x||,
+ which are all returned by the routine, will indicate whether or
+ not an acceptable solution has been found. Condition (3.8),
+ perhaps in conjunction with (lambda)/=0, can be used to try and '
+ regularise' least-squares solutions. A full discussion of the
+ stopping criteria is given in Section 6 of reference Paige and
+ Saunders [1].
+
+ Introduction of a non-zero damping parameter (lambda) tends to
+ reduce the size of the computed solution and to make its
+ components less sensitive to changes in the data, and F04QAF is
+ applicable when a value of (lambda) is known a priori. To have an
+
+
+ effect, (lambda) should normally be at least \/(epsilon)||A||
+ where (epsilon) is the machine precision. For further discussion
+ see Paige and Saunders [2] and the references given there.
+
+ Whenever possible the matrix A should be scaled so that the
+ relative errors in the elements of A are all of comparable size.
+ Such a scaling helps to prevent the least-squares problem from
+ being unnecessarily sensitive to data errors and will normally
+ reduce the number of iterations required. At the very least, in
+ the absence of better information, the columns of A should be
+ scaled to have roughly equal column length.
+
+ 4. References
+
+ [1] Paige C C and Saunders M A (1982) LSQR: An Algorithm for
+ Sparse Linear Equations and Sparse Least-squares. ACM Trans.
+ Math. Softw. 8 43--71.
+
+ [2] Paige C C and Saunders M A (1982) ALGORITHM 583 LSQR: Sparse
+ Linear Equations and Least-squares Problems. ACM Trans.
+ Math. Softw. 8 195--209.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: m, the number of rows of the matrix A.
+ Constraint: M >= 1.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of columns of the matrix A.
+ Constraint: N >= 1.
+
+ 3: B(M) -- DOUBLE PRECISION array Input/Output
+ On entry: the right-hand side vector b. On exit: the array
+ is overwritten.
+
+ 4: X(N) -- DOUBLE PRECISION array Output
+ On exit: the solution vector x.
+
+ 5: SE(N) -- DOUBLE PRECISION array Output
+ On exit: the estimates of the standard errors of the
+ components of x. Thus SE(i) contains an estimate of the
+ element v of the estimated variance-covariance matrix V.
+ ii
+ The estimates returned in SE will be the lower bounds on the
+ actual estimated standard errors, but will usually have at
+ least one correct figure.
+
+ 6: APROD -- SUBROUTINE, supplied by the user.
+ External Procedure
+ T
+ APROD must perform the operations y:=y+Ax and x:=x+A y for
+ given vectors x and y.
+
+ Its specification is:
+
+ SUBROUTINE APROD (MODE, M, N, X, Y, RWORK,
+ 1 LRWORK, IWORK, LIWORK)
+ INTEGER MODE, M, N, LRWORK, LIWORK,
+ 1 IWORK(LIWORK)
+ DOUBLE PRECISION X(N), Y(M), RWORK(LRWORK)
+
+ 1: MODE -- INTEGER Input/Output
+ On entry: MODE specifies which operation is to be
+ performed:
+ If MODE = 1, then APROD must compute y+Ax.
+
+ T
+ If MODE = 2, then APROD must compute x+A y.
+ On exit: MODE may be used as a flag to indicate a
+ T
+ failure in the computation of y+Ax or x+A y. If MODE is
+ negative on exit from APROD, F04QAF will exit
+ immediately with IFAIL set to MODE.
+
+ 2: M -- INTEGER Input
+ On entry: m, the number of rows of A.
+
+ 3: N -- INTEGER Input
+ On entry: n, the number of columns of A.
+
+ 4: X(N) -- DOUBLE PRECISION array Input/Output
+ On entry: the vector x. On exit: if MODE = 1, X must be
+ unchanged;
+
+ T
+ If MODE = 2, X must contain x+A y.
+
+ 5: Y(M) -- DOUBLE PRECISION array Input/Output
+ On entry: the vector y. On exit: if MODE = 1, Y must
+ contain y+Ax;
+
+ If MODE = 2, Y must be unchanged.
+
+ 6: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+
+ 7: LRWORK -- INTEGER Input
+
+ 8: IWORK(LIWORK) -- INTEGER array User Workspace
+
+ 9: LIWORK -- INTEGER Input
+ APROD is called from F04QAF with the parameters RWORK,
+ LRWORK, IWORK and LIWORK as supplied to F04QAF. The
+ user is free to use the arrays RWORK and IWORK to
+ supply information to APROD as an alternative to using
+ COMMON.
+ APROD must be declared as EXTERNAL in the (sub)program
+ from which F04QAF is called. Parameters denoted as
+ Input must not be changed by this procedure.
+
+ 7: DAMP -- DOUBLE PRECISION Input
+ On entry: the value (lambda). If either problem (3.1) or
+ problem (3.2) is to be solved, then DAMP must be supplied as
+ zero.
+
+ 8: ATOL -- DOUBLE PRECISION Input
+ On entry: the tolerance, tol , of the convergence criteria
+ 1
+ (3.6) and (3.7); it should be an estimate of the largest
+ relative error in the elements of A. For example, if the
+ elements of A are correct to about 4 significant figures,
+ -4
+ then ATOL should be set to about 5*10 . If ATOL is supplied
+ as less than (epsilon), where (epsilon) is the machine
+ precision, then the value (epsilon) is used in place of
+ ATOL.
+
+ 9: BTOL -- DOUBLE PRECISION Input
+ On entry: the tolerance, tol , of the convergence criterion
+ 2
+ (3.6); it should be an estimate of the largest relative
+ error in the elements of B. For example, if the elements of
+ B are correct to about 4 significant figures, then BTOL
+ -4
+ should be set to about 5*10 . If BTOL is supplied as less
+ than (epsilon), where (epsilon) is the machine precision,
+ then the value (epsilon) is used in place of BTOL.
+
+ 10: CONLIM -- DOUBLE PRECISION Input
+ On entry: the value c of equation (3.8); it should be an
+ lim
+
+
+ upper limit on the condition number of A. CONLIM should not
+ normally be chosen much larger than 1.0/ATOL. If CONLIM is
+ supplied as zero then the value 1.0/(epsilon), where
+ (epsilon) is the machine precision, is used in place of
+ CONLIM.
+
+ 11: ITNLIM -- INTEGER Input
+ On entry: an upper limit on the number of iterations. If
+ ITNLIM <= 0, then the value N is used in place of ITNLIM,
+ but for ill-conditioned problems a higher value of ITNLIM is
+ likely to be necessary.
+
+ 12: MSGLVL -- INTEGER Input
+ On entry: the level of printing from F04QAF. If MSGLVL <= 0,
+ then no printing occurs, but otherwise messages will be
+ output on the advisory message channel (see X04ABF). A
+ description of the printed output is given in Section 5.2
+ below. The level of printing is determined as follows:
+ MSGLVL <= 0
+ No printing.
+
+ MSGLVL = 1
+ A brief summary is printed just prior to return from
+ F04QAF.
+
+ MSGLVL >= 2
+ A summary line is printed periodically to monitor the
+ progress of F04QAF, together with a brief summary just
+ prior to return from F04QAF.
+
+ 13: ITN -- INTEGER Output
+ On exit: the number of iterations performed.
+
+ 14: ANORM -- DOUBLE PRECISION Output
+
+
+ On exit: an estimate of ||A|| for the matrix A of equation
+ (3.4).
+
+ 15: ACOND -- DOUBLE PRECISION Output
+
+
+ On exit: an estimate of cond(A) which is a lower bound.
+
+ 16: RNORM -- DOUBLE PRECISION Output
+
+
+ On exit: an estimate of ||r|| for the residual, r, of
+ equation (3.5) corresponding to the solution x returned in
+
+
+ X. Note that ||r|| is the function being minimized.
+
+ 17: ARNORM -- DOUBLE PRECISION Output
+ T
+ On exit: an estimate of the ||A r|| corresponding to the
+ solution x returned in X.
+
+ 18: XNORM -- DOUBLE PRECISION Output
+ On exit: an estimate of ||x|| for the solution x returned in
+ X.
+
+ 19: WORK(2*N) -- DOUBLE PRECISION array Workspace
+
+ 20: RWORK(LRWORK) -- DOUBLE PRECISION array User Workspace
+ RWORK is not used by F04QAF, but is passed directly to
+ routine APROD and may be used to pass information to that
+ routine.
+
+ 21: LRWORK -- INTEGER Input
+ On entry: the length of the array RWORK as declared in the
+ (sub)program from which F04QAF is called. Constraint: LRWORK
+ >= 1.
+
+ 22: IWORK(LIWORK) -- INTEGER array User Workspace
+ IWORK is not used by F04QAF, but is passed directly to
+ routine APROD and may be used to pass information to that
+ routine.
+
+ 23: LIWORK -- INTEGER Input
+ On entry: the length of the array IWORK as declared in the
+ (sub)program from which F04QAF is called. Constraint: LIWORK
+ >= 1.
+
+ 24: INFORM -- INTEGER Output
+ On exit: the reason for termination of F04QAF as follows:
+ INFORM = 0
+ The exact solution is x=0. No iterations are performed
+ in this case.
+
+ INFORM = 1
+ The termination criterion of equation (3.6) has been
+ satisfied with tol and tol as the values supplied in
+ 1 2
+ ATOL and BTOL respectively.
+
+ INFORM = 2
+ The termination criterion of equation (3.7) has been
+ satisfied with tol as the value supplied in ATOL.
+ 1
+
+ INFORM = 3
+ The termination criterion of equation (3.6) has been
+ satisfied with tol and/or tol as the value (epsilon)
+ 1 2
+ , where (epsilon) is the machine precision. One or
+ both of the values supplied in ATOL and BTOL must have
+ been less than (epsilon) and was too small for this
+ machine.
+
+ INFORM = 4
+ The termination criterion of equation (3.7) has been
+ satisfied with tol as the value (epsilon), where
+ 1
+ (epsilon) is the machine precision. The value supplied
+ in ATOL must have been less than (epsilon) and was too
+ small for this machine.
+ The values INFORM = 5, INFORM = 6 and INFORM = 7 correspond
+ to failure with IFAIL = 2, IFAIL = 3 and IFAIL = 4
+ respectively (see Section 6) and when IFAIL is negative
+ INFORM will be set to the same negative value.
+
+ 25: IFAIL -- INTEGER Input/Output
+ On entry: IFAIL must be set to 0, -1 or 1. For users not
+ familiar with this parameter (described in the Essential
+ Introduction) the recommended value is 0.
+
+ On exit: IFAIL = 0 unless the routine detects an error (see
+ Section 6).
+
+ 5.1. Description of the printed output
+
+ When MSGLVL > 0, then F04QAF will produce output (except in the
+ case where the routine fails with IFAIL = 1) on the advisory
+ message channel (see X04ABF ).
+
+ When MSGLVL >= 2 then a summary line is printed periodically
+ giving the following information:
+
+ Output Meaning
+
+ ITN Iteration number, k.
+
+ X(1) The first element of the current iterate x .
+ k
+
+ FUNCTION The current value of the function, (rho), being
+ minimized.
+
+
+
+ COMPAT An estimate of ||r ||/||b||, where r is the
+ k k
+ residual corresponding to x . This value should
+ k
+ converge to zero (in theory) if and only if the
+ problem is compatible. COMPAT decreases
+ monotonically.
+
+ T
+ INCOMPAT An estimate of ||A r ||/(||A||||r ||) which
+ k k
+ should converge to zero if and only if at the
+ solution (rho) is non-zero. INCOMPAT is not
+ usually monotonic.
+
+
+
+ NRM(ABAR) A monotonically increasing estimate of ||A||.
+
+ COND(ABAR) A monotonically increasing estimate of the
+
+
+ condition number cond(A).
+
+ 6. Error Indicators and Warnings
+
+ Errors detected by the routine:
+
+ IFAIL< 0
+ A negative value of IFAIL indicates an exit from F04QAF
+ because the user has set MODE negative in APROD. The value
+ of IFAIL will be the same as the user's setting of MODE.
+
+ IFAIL= 1
+ On entry M < 1,
+
+ or N < 1,
+
+ or LRWORK < 1,
+
+ or LIWORK < 1.
+
+ IFAIL= 2
+ The condition of equation (3.8) has been satisfied for the
+ value of c supplied in CONLIM. If this failure is
+ lim
+ unexpected the user should check that APROD is working
+ correctly. Although conditions (3.6) or (3.7) have not been
+ satisfied, the values returned in RNORM, ARNORM and XNORM
+ may nevertheless indicate that an acceptable solution has
+ been reached.
+
+ IFAIL= 3
+ The conditions of equation (3.8) has been satisified for the
+ value c =1.0/(epsilon), where (epsilon) is the machine
+ lim
+
+
+ precision. The matrix A is nearly singular or rank deficient
+ and the problem is too ill-conditioned for this machine. If
+ this failure is unexpected, the user should check that APROD
+ is working correctly.
+
+ IFAIL= 4
+ The limit on the number of iterations has been reached. The
+ number of iterations required by F04QAF and the condition of
+
+
+ the matrix A can depend strongly on the scaling of the
+ problem. Poor scaling of the rows and columns of A should be
+ avoided whenever possible.
+
+ 7. Accuracy
+
+ When the problem is compatible, the computed solution x will
+ satisfy the equation
+
+ r=b-Ax,
+
+ where an estimate of ||r|| is returned in the parameter RNORM.
+ When the problem is incompatible, the computed solution x will
+ satisfy the equation
+
+ T
+ A r=e,
+
+ where an estimate of ||e|| is returned in the parameter ARNORM.
+ See also Section 6.2 of Paige and Saunders [1].
+
+ 8. Further Comments
+
+ The time taken by the routine is likely to be principally
+ determined by the time taken in APROD, which is called twice on
+ each iteration, once with MODE = 1 and once with MODE = 2. The
+ time taken per iteration by the remaining operations in F04QAF is
+ approximately proportional to max(m,n).
+
+ The Lanczos process will usually converge more quickly if A is
+ pre-conditioned by a non-singular matrix M that approximates A in
+ some sense and is also chosen so that equations of the form My=c
+ can efficiently be solved for y. Some discussion of pre-
+ conditioning in the context of symmetric matrices is given in
+ Section 3 of the document for F04MBF. In the context of F04QAF,
+ problem (3.1) is equivalent to
+
+ -1
+ (AM )y=b, Mx=y
+
+ and problem (3.2) is equivalent to minimizing
+
+ -1
+ (rho)=||r||, r=b-(AM )y, Mx=y.
+
+ -1 T -1 -T T -1
+ Note that the normal matrix (AM ) (AM )=M (A A)M so that the
+ -1
+ pre-conditioning AM is equivalent to the pre-conditioning
+ -T T -1 T
+ M (A A)M of the normal matrix A A.
+
+ Pre-conditioning can be incorporated into F04QAF simply by coding
+ -1 -T T
+ the routine APROD to compute y+AM x and x+M A y in place of
+ T
+ y+Ax and x+A y respectively, and then solving the equations Mx=y
+ -1
+ for x on return from F04QAF. y+AM x should be computed by
+ -T T
+ solving Mz=x for z and then computing y+Az, and x+M A y should
+ T T
+ be computed by solving M z=A y for z and then forming x+z.
+
+ 9. Example
+
+ To solve the linear least-squares problem
+
+ minimize (rho)=||r||, r=b-Ax
+
+ where A is the 13 by 12 matrix and b is the 13 element vector
+ given by
+
+ ( 1 0 0 -1 0 0 0 0 0 0 0 0)
+ ( 0 1 0 0 -1 0 0 0 0 0 0 0)
+ ( 0 0 1 -1 0 0 0 0 0 0 0 0)
+ (-1 0 -1 4 -1 0 0 -1 0 0 0 0)
+ ( 0 -1 0 -1 4 -1 0 0 -1 0 0 0)
+ ( 0 0 0 0 -1 1 0 0 0 0 0 0)
+ A=( 0 0 0 0 0 0 1 -1 0 0 0 0),
+ ( 0 0 0 -1 0 0 -1 4 -1 0 -1 0)
+ ( 0 0 0 0 -1 0 0 -1 4 -1 0 -1)
+ ( 0 0 0 0 0 0 0 0 -1 1 0 0)
+ ( 0 0 0 0 0 0 0 -1 0 0 1 0)
+ ( 0 0 0 0 0 0 0 0 -1 0 0 1)
+ ( 1 1 1 0 0 1 1 0 0 1 1 1)
+
+ ( 0 )
+ ( 0 )
+ ( 0 )
+ ( 1 )
+ ( 1 )
+ 2( 0 )
+ b=-h ( 0 )
+ ( 1 )
+ ( 1 )
+ ( 0 )
+ ( 0 )
+ ( 0 )
+ ( -3)
+ (-h )
+
+ with h=0.1.
+
+ Such a problem can arise by considering the Neumann problem on a
+ rectangle
+
+ (delta)u
+ --------=0
+ (delta)n
+
+ (delta)u 2 (delta)u /
+ --------=0 (nabla) u=g(x,y) --------=0 |u=1
+ (delta)n (delta)n /
+ c
+
+ (delta)u
+ --------=0
+ (delta)n
+
+ where C is the boundary of the rectangle, and discretising as
+ illustrated below with the square mesh
+
+
+
+ Please see figure in printed Reference Manual
+
+ The 12 by 12 symmetric part of A represents the difference
+ equations and the final row comes from the normalising condition.
+ The example program has g(x,y)=1 at all the internal mesh points,
+ but apart from this is written in a general manner so that the
+ number of rows (NROWS) and columns (NCOLS) in the grid can
+ readily be altered.
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf06}{NAG On-line Documentation: f06}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F06(3NAG) Foundation Library (12/10/92) F06(3NAG)
+
+
+
+ F06 -- Linear Algebra Support Routines Introduction -- F06
+ Chapter F06
+ Linear Algebra Support Routines
+
+ Contents of this Introduction:
+
+ 1. Scope of the Chapter
+
+ 2. Background to the Problems
+
+ 2.1. The Use of BLAS Names
+
+ 2.2. Background Information
+
+ 2.2.1. Real plane rotations
+
+ 2.3. References
+
+ 3. Recommendations on Choice and Use of Routines
+
+ 3.1. The Level-0 Scalar Routines
+
+ 3.2. The Level-1 Vector Routines
+
+ 3.3. The Level-2 Matrix-vector Routines
+
+ 3.4. The Level-3 Matrix-matrix Routines
+
+ 4. Description of the F06 Routines
+
+ 4.1. The Level-0 Scalar Routines
+
+ 4.2. The Level-1 Vector Routines
+
+ 4.3. The Level-2 Matrix-vector Routines
+
+ 4.4. The Level-3 Matrix-matrix Routines
+
+
+
+ 1. Scope of the Chapter
+
+ This Chapter is concerned with basic linear algebra routines
+ which perform elementary algebraic operations involving scalars,
+ vectors and matrices.
+
+ 2. Background to the Problems
+
+ All the routines in this Chapter meet the specification of the
+ Basic Linear Algebra Subprograms (BLAS) as described in Lawson
+ et al [6], Dongarra et al [3] and [4]. The first reference
+ describes a set of routines concerned with operations on scalars
+ and vectors: these will be referred to here as the Level-0 and
+ the Level-1 BLAS; the second reference describes a set of
+ routines concerned with matrix-vector operations: these will be
+ referred to here as the Level-2 BLAS; and the third reference
+ describes a set of routines concerned with matrix-matrix
+ operations: these will be referred to here as the Level-3 BLAS.
+ The terminology reflects the number of operations involved. For
+ 2
+ example, a Level-2 routine involves 0(n ) operations for an n by
+ n matrix.
+
+ Table 1.1 indicates the naming scheme for the routines in this
+ Chapter. The heading 'mixed type' is for routines where a mixture
+ of data types is involved, such as a routine that returns the
+ real Euclidean length of a complex vector.
+
+
+ Level-0 Level-1 Level-2 Level-3
+ 'real' BLAS routine F06A F F06E F F06P F F06Y F
+ 'complex' BLAS routine - F06G F F06S F F06Z F
+
+ Table 1.1
+
+
+
+ The routines in this chapter do not have full routine documents,
+ but instead are covered by some relevant background material, in
+ Section 2.2, together with general descriptions, in Section 4,
+ sufficient to enable their use. As this chapter is concerned only
+ with basic linear algebra operations, the routines will not
+ normally be required by the general user. The functionality of
+ each routine is indicated in Section 3 so that those users
+ requiring these routines to build specialist linear algebra
+ modules can determine which routines are of interest.
+
+ 2.1. The Use of BLAS Names
+
+ Many of the routines in other chapters of the Library call the
+ BLAS in this chapter. These routines are usually called by the
+ BLAS name and so, for correct operation of the Library, it is
+ essential that users do not attempt to link their own versions of
+ these routines. If users are in any doubt about how to avoid
+ this, please consult your local support staff or the NAG Response
+ Centre.
+
+ The BLAS names are used in order to make use of efficient
+ implementations of the routines when these exist. Such
+ implementations are stringently tested before being used, to
+ ensure that they correctly meet the specification of the BLAS,
+ and that they return the desired accuracy (see, for example,
+ Dongarra et al. [3] and [4]).
+
+ 2.2. Background Information
+
+ Most of the routines in this chapter implement straightforward
+ scalar, vector and matrix operations that need no further
+ explanation beyond a statement of the purpose of the routine. In
+ this section we give some additional background information for
+ those few cases where additional explanation may be necessary.
+
+ 2.2.1. Real plane rotations
+
+ Two routines in the chapter are concerned with setting up and
+ applying plane rotations. For further background information see
+ Golub and Van Loan [5].
+
+ A plane rotation matrix for the (i,j) plane, R , is an
+ ij
+ orthogonal matrix that is different from the unit matrix only in
+ the elements r , r , r and r . If we put
+ ii jj ij ji
+
+
+ (r r )
+ ( ii ij)
+ R=(r r ),
+ ( ji jj)
+
+ then, in the real case, it is usual to choose R so that
+ ij
+
+ ( c s)
+ R=(-s c), c=cos(theta), s=sin(theta). (2.1)
+
+ The application of plane rotations is straightforward and needs
+ no further elaboration, so further comment is made only on the
+ construction of plane rotations.
+
+ The most common use of plane rotations is to choose c and s so
+ that for given a and b,
+
+
+ ( c s)(a) (d)
+ (-s c)(b)=(0) (2.2)
+
+ In such an application the matrix R is often termed a Givens
+ rotation matrix.
+
+ The BLAS routine F06AAF(*) (DROTG), see Lawson et al [6] and
+ Dodson and Grimes [1, 2], computes c, s and d as
+
+
+ 2 2 1/2
+ d=(sigma)(a +b ) ,
+ {a/d, d/=0 {b/d, d/=0
+ c={1, d=0 , s={0, d=0 (2.3)
+
+ {sign a,|a|>|b|
+ where (sigma)={sign b,|a|<=|b|.
+
+ The value z defined as
+
+ {s, |s|<c or c=0
+ z={1/c, 0<|c|<=s (2.4)
+
+ is also computed and this enables c and s to be reconstructed
+ from the single value z as
+
+
+ {0, z=1
+ { 2 1/2 {1, z=1
+ c={(1-z ) , |z|<1 s={z, |z|<1
+ {1/z, |z|>1, { 2
+ {(1-c ), |z|>1.
+
+ 2.3. References
+
+ [1] Dodson D S and Grimes R G (1982) Remark on Algorithm 539.
+ ACM Trans Math Softw. 8 403--404.
+
+ [2] Dodson D S and Grimes R G (1982) Remark on Algorithm 539.
+ ACM Trans. Math. Softw. 9 140.
+
+ [3] Dongarra J J, Du Croz J J, Hammarling S and Hanson R J
+ (1988) An Extended Set of FORTRAN Basic Linear Algebra
+ Subprograms. ACM Trans. Math. Softw. 14 1--32.
+
+ [4] Dongarra J J, Du Croz J J, Duff I S and Hammarling S (1990)
+ A Set of Level 3 Basic Linear Algebra Subprograms. ACM
+ Trans. Math. Softw. 16 1--28.
+
+ [5] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ [6] Lawson C L, Hanson R J, Kincaid D R and Krogh F T (1979)
+ Basic Linear Algebra Subprograms for Fortran Usage. ACM
+ Trans. Math. Softw. 5 308--325.
+
+ 3. Recommendations on Choice and Use of Routines
+
+ This section lists the routines in each of the categories Level-0
+ (scalar), Level-1 (vector), Level-2 (matrix-vector and matrix)
+ and Level-3 (matrix-matrix). The corresponding double precision
+ BLAS name is indicated in brackets.
+
+ Within each section routines are listed in alphabetic order of
+ the fifth character in the routine name, so that corresponding
+ real and complex routines may have adjacent entries.
+
+ 3.1. The Level-0 Scalar Routine
+
+ The Level-0 routine performs the scalar operation of generating a
+ plane rotation.
+
+ F06AAF (DROTG) generates a real plane rotation.
+
+ 3.2. The Level-1 Vector Routines
+
+ The Level-1 routines perform operations on or between vectors,
+ such as computing dot products and Euclidean lengths.
+
+ F06EAF (DDOT) computes the dot product of two real vectors
+
+ F06GAF (ZDOTU) computes the dot product of two complex vectors
+ (unconjugated)
+
+ F06GBF (ZDOTC) computes the dot product of two complex vectors
+ (conjugated)
+
+ F06ECF (DAXPY) adds a scalar times a vector to another real
+ vector
+
+ F06GCF (ZAXPY) adds a scalar times a vector to another complex
+ vector
+
+ F06EDF (DSCAL) multiplies a real vector by a scalar
+
+ F06GDF (ZSCAL) multiplies a complex vector by a scalar
+
+ F06JDF (ZDSCAL) multiplies a complex vector by a real scalar
+
+ F06EFF (DCOPY) copies a real vector
+
+ F06GFF (ZCOPY) copies a complex vector
+
+ F06EGF (DSWAP) swaps two real vectors
+
+ F06GGF (ZSWAP) swaps two complex vectors
+
+ F06EJF (DNRM2) computes the Euclidean length of a real vector
+
+ F06JJF (DZNRM2) computes the Euclidean length of a complex vector
+
+ F06EKF (DASUM) sums the absolute values of the elements of a
+ real vector
+
+ F06JKF (DZASUM) sums the absolute values of the elements of a
+ complex vector
+
+ F06JLF (IDAMAX) finds the index of the element of largest
+ absolute value of a real vector
+
+ F06JMF (IZAMAX) finds the index of the element of largest
+ absolute value of a complex vector
+
+ F06EPF (DROT) applies a real plane rotation
+
+ 3.3. The Level-2 Matrix-vector Routines
+
+ The Level-2 routines perform matrix-vector operations, such as
+ forming the product between a matrix and a vector.
+
+ F06PAF (DGEMV) computes a matrix-vector product;
+ real general matrix
+
+ F06SAF (ZGEMV) computes a matrix-vector product;
+ complex general matrix
+
+ F06PBF (DGBMV) computes a matrix-vector product;
+ real general band matrix
+
+ F06SBF (ZGBMV) computes a matrix-vector product;
+ complex general band matrix
+
+ F06PCF (DSYMV) computes a matrix-vector product;
+ real symmetric matrix
+
+ F06SCF (ZHEMV) computes a matrix-vector product;
+ complex Hermitian matrix
+
+ F06PDF (DSBMV) computes a matrix-vector product;
+ real symmetric band matrix
+
+ F06SDF (ZHBMV) computes a matrix-vector product;
+ complex Hermitian band matrix
+
+ F06PEF (DSPMV) computes a matrix-vector product;
+ real symmetric packed matrix
+
+ F06SEF (ZHPMV) computes a matrix-vector product;
+ complex Hermitian packed matrix
+
+ F06PFF (DTRMV) computes a matrix-vector product;
+ real triangular matrix
+
+ F06SFF (ZTRMV) computes a matrix-vector product;
+ complex triangular matrix
+
+ F06PGF (DTBMV) computes a matrix-vector product;
+ real triangular band matrix
+
+ F06SGF (ZTBMV) computes a matrix-vector product;
+ complex triangular band matrix
+
+ F06PHF (DTPMV) computes a matrix-vector product;
+ real triangular packed matrix
+
+ F06SHF (ZTPMV) computes a matrix-vector product;
+ complex triangular packed matrix
+
+ F06PJF (DTRSV) solves a system of equations;
+ real triangular coefficient matrix
+
+ F06SJF (ZTRSV) solves a system of equations;
+ complex triangular coefficient matrix
+
+ F06PKF (DTBSV) solves a system of equations;
+ real triangular band coefficient matrix
+
+ F06SKF (ZTBSV) solves a system of equations;
+ complex triangular band coefficient matrix
+
+ F06PLF (DTPSV) solves a system of equations;
+ real triangular packed coefficient matrix
+
+ F06SLF (ZTPSV) solves a system of equations;
+ complex triangular packed coefficient matrix
+
+ F06PMF (DGER) performs a rank-one update;
+ real general matrix
+
+ F06SMF (ZGERU) performs a rank-one update;
+ complex general matrix (unconjugated vector)
+
+ F06SNF (ZGERC) performs a rank-one update;
+ complex general matrix (conjugated vector)
+
+ F06PPF (DSYR) performs a rank-one update;
+ real symmetric matrix
+
+ F06SPF (ZHER) performs a rank-one update;
+ complex Hermitian matrix
+
+ F06PQF (DSPR) performs a rank-one update;
+ real symmetric packed matrix
+
+ F06SQF (ZHPR) performs a rank-one update;
+ complex Hermitian packed matrix
+
+ F06PRF (DSYR2) performs a rank-two update;
+ real symmetric matrix
+
+ F06SRF (ZHER2) performs a rank-two update;
+ complex Hermitian matrix
+
+ F06PSF (DSPR2) performs a rank-two update;
+ real symmetric packed matrix
+
+ F06SSF (ZHPR2) performs a rank-two update;
+ complex Hermitian packed matrix
+
+ 3.4. The Level-3 Matrix-matrix Routines
+
+ The Level-3 routines perform matrix-matrix operations, such as
+ forming the product of two matrices.
+
+ F06YAF (DGEMM) computes a matrix-matrix product; two real
+ rectangular matrices
+
+ F06ZAF (ZGEMM) computes a matrix-matrix product; two complex
+ rectangular matrices
+
+ F06YCF (DSYMM) computes a matrix-matrix product; one real
+ symmetric matrix, one real rectangular matrix
+
+ F06ZCF (ZHEMM) computes a matrix-matrix product; one complex
+ Hermitian matrix, one complex rectangular matrix
+
+ F06YFF (DTRMM) computes a matrix-matrix product; one real
+ triangular matrix, one real rectangular matrix
+
+ F06ZFF (ZTRMM) computes a matrix-matrix product; one complex
+ triangular matrix, one complex rectangular matrix
+
+ F06YJF (DTRSM) solves a system of equations with multiple right-
+ hand sides, real triangular coefficient matrix
+
+ F06ZJF (ZTRSM) solves a system of equations with multiple right-
+ hand sides, complex triangular coefficient matrix
+
+ F06YPF (DSYRK) performs a rank-k update of a real symmetric
+ matrix
+
+ F06ZPF (ZHERK) performs a rank-k update of a complex hermitian
+ matrix
+
+ F06YRF (DSYR2K) performs a rank-2k update of a real symmetric
+ matrix
+
+ F06ZRF (ZHER2K) performs a rank-2k update of a complex Hermitian
+ matrix
+
+ F06ZTF (ZSYMM) computes a matrix-matrix product: one complex
+ symmetric matrix, one complex rectangular matrix
+
+ F06ZUF (ZSYRK) performs a rank-k update of a complex symmetric
+ matrix
+
+ F06ZWF (ZSYR2K) performs a rank-2k update of a complex symmetric
+ matrix
+
+ 4. Description of the F06 Routines
+
+ In this section we describe the purpose of each routine and give
+ information on the parameter lists, where appropriate indicating
+ their general nature. Usually the association between the routine
+ arguments and the mathematical variables is obvious and in such
+ cases a description of the argument is omitted.
+
+ Within each section, the parameter lists for all routines are
+ presented, followed by the purpose of the routines and
+ information on the parameter lists. The double precision BLAS
+ names are given in ENTRY statements.
+
+ Within each section routines are listed in alphabetic order of
+ the fifth character in the routine name, so that corresponding
+ real and complex routines may have adjacent entries.
+
+ 4.1. The Level-0 Scalar Routines
+
+ The scalar routines have no array arguments.
+
+
+ SUBROUTINE F06AAF( A,B,C,S )
+ ENTRY DROTG ( A,B,C,S )
+ DOUBLE PRECISION A,B,C,S
+
+ F06AAF(*) generates the parameters c and s of a Givens rotation
+ as defined by equations (2.3) and (2.4), from given a and b. On
+ exit, A is overwritten by d and B is overwritten by z.
+
+ 4.2. The Level-1 Vector Routines
+
+ The vector routines all have one or more one-dimensional arrays
+ as arguments, each representing a vector.
+
+ The length of each vector, n, is represented by the argument N,
+ and the routines may be called with non-positive values of N, in
+ which case the routine returns immediately except for the
+ functions, which set the function value to zero before returning.
+
+ In addition to the argument N, each array argument is also
+ associated with an increment argument that immediately follows
+ the array argument, and whose name consists of the three
+ characters INC, followed by the name of the array. For example, a
+ vector x will be represented by the two arguments X, INCX. The
+ increment argument is the spacing (stride) in the array for which
+ the elements of the vector occur. For instance, if INCX = 2, then
+ the elements of x are in locations X(1),X(3),...,X(2*N-1) of the
+ array X and the intermediate locations X(2),X(4),...,X(2*N-2) are
+ not referenced.
+
+ Thus when INCX > 0, the vector element x is in the array element
+ i
+ X(1+(i-1)*INCX). When INCX <= 0 the elements are stored in the
+ reverse order so that the vector element x is in the array
+ i
+ element X(1-(n-i)*INCX) and hence, in particular, the element x
+ n
+ is in X(1). The declared length of the array X in the calling
+ (sub)program must be at least (1+(N-1)*|INCX|).
+
+ Non-positive increments are permitted only for those routines
+ that have more than one array argument. While zero increments are
+ formally permitted for such routines, their use in Chapter F06 is
+ strongly discouraged since the effect may be implementation
+ dependent.
+
+
+
+ DOUBLE PRECISION FUNCTION F06EAF ( N, X,INCX,Y,INCY )
+ DOUBLE PRECISION DDOT
+ ENTRY DDOT ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ DOUBLE PRECISION X(*), Y(*)
+
+ COMPLEX(KIND(1.0D0)) FUNCTION F06GAF ( N, X,INCX,Y,INCY )
+ COMPLEX(KIND(1.0D0)) ZDOTU
+ ENTRY ZDOTU ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ COMPLEX(KIND(1.0D0)) X(*), Y(*)
+
+ COMPLEX(KIND(1.0D0)) FUNCTION F06GBF ( N, X,INCX,Y,INCY )
+ COMPLEX(KIND(1.0D0)) ZDOTC
+ ENTRY ZDOTC ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ COMPLEX(KIND(1.0D0)) X(*), Y(*)
+
+ SUBROUTINE F06ECF ( N,ALPHA,X,INCX,Y,INCY )
+ ENTRY DAXPY ( N,ALPHA,X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ DOUBLE PRECISION ALPHA,X(*), Y(*)
+
+ SUBROUTINE F06GCF ( N,ALPHA,X,INCX,Y,INCY )
+ ENTRY ZAXPY ( N,ALPHA,X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*), Y(*)
+
+ SUBROUTINE F06EDF ( N,ALPHA,X,INCX )
+ ENTRY DSCAL ( N,ALPHA,X,INCX )
+ INTEGER N, INCX
+ DOUBLE PRECISION ALPHA,X(*)
+
+ SUBROUTINE F06GDF ( N,ALPHA,X,INCX )
+ ENTRY ZSCAL ( N,ALPHA,X,INCX )
+ INTEGER N, INCX
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*)
+
+ SUBROUTINE F06JDF ( N,ALPHA,X,INCX )
+ ENTRY ZDSCAL ( N,ALPHA,X,INCX )
+ INTEGER N, INCX
+ DOUBLE PRECISION ALPHA
+ COMPLEX(KIND(1.0D0)) X(*)
+
+ SUBROUTINE F06EFF ( N, X,INCX,Y,INCY )
+ ENTRY DCOPY ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ DOUBLE PRECISION X(*), Y(*)
+
+ SUBROUTINE F06GFF ( N, X,INCX,Y,INCY )
+ ENTRY ZCOPY ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ COMPLEX(KIND(1.0D0)) X(*), Y(*)
+
+ SUBROUTINE F06EGF ( N, X,INCX,Y,INCY )
+ ENTRY DSWAP ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ DOUBLE PRECISION X(*), Y(*)
+
+ SUBROUTINE F06GGF ( N, X,INCX,Y,INCY )
+ ENTRY ZSWAP ( N, X,INCX,Y,INCY )
+ INTEGER N, INCX, INCY
+ COMPLEX(KIND(1.0D0)) X(*), Y(*)
+
+ DOUBLE PRECISION FUNCTION F06EJF ( N, X,INCX )
+ DOUBLE PRECISION DNRM2
+ ENTRY DNRM2 ( N, X,INCX )
+ INTEGER N, INCX
+ DOUBLE PRECISION X(*)
+
+ DOUBLE PRECISION FUNCTION F06JJF ( N, X,INCX )
+ DOUBLE PRECISION DZNRM2
+ ENTRY DZNRM2 ( N, X,INCX )
+ INTEGER N, INCX
+ COMPLEX(KIND(1.0D0)) X(*)
+
+ DOUBLE PRECISION FUNCTION F06EKF ( N, X,INCX )
+ DOUBLE PRECISION DASUM
+ ENTRY DASUM ( N, X,INCX )
+ INTEGER N, INCX
+ DOUBLE PRECISION X(*)
+
+ DOUBLE PRECISION FUNCTION F06JKF ( N, X,INCX )
+ DOUBLE PRECISION DZASUM
+ ENTRY DZASUM ( N, X,INCX )
+ INTEGER N, INCX
+ COMPLEX(KIND(1.0D0)) X(*)
+
+ INTEGER FUNCTION F06JLF ( N, X,INCX )
+ INTEGER IDAMAX
+ ENTRY IDAMAX ( N, X,INCX )
+ INTEGER N, INCX
+ DOUBLE PRECISION X(*)
+
+ INTEGER FUNCTION F06JMF ( N, X,INCX )
+ INTEGER IZAMAX
+ ENTRY IZAMAX ( N, X,INCX )
+ INTEGER N, INCX
+ COMPLEX(KIND(1.0D0)) X(*)
+
+ SUBROUTINE F06EPF ( N, X,INCX,Y,INCY,C,S )
+ ENTRY DROT ( N, X,INCX,Y,INCY,C,S )
+ INTEGER N, INCX, INCY
+ DOUBLE PRECISION X(*), Y(*), C,S
+
+ F06EAF(*) and F06GAF(*)
+
+ T
+ return the dot product x y.
+
+ F06GBF(*)
+
+ H H
+ returns the dot product x y, where x denotes the complex
+ T
+ conjugate of x .
+
+ F06ECF(*) and F06GCF(*)
+
+ perform the operation y<-(alpha)x+y, often called an axpy
+ operation.
+
+ F06EDF(*), F06GDF(*) and F06JDF(*)
+
+ perform the operation x<-(alpha)x.
+
+ F06EFF(*) and F06GFF(*)
+
+ perform the operation y<-x.
+
+ F06EGF(*) and F06GGF(*)
+
+ perform the operation x<=>y, that is x and y are swapped.
+
+ F06EJF(*) and F06JJF(*)
+
+ ( n )1/2
+ ( -- 2)
+ return the value ||x|| defined by ||x|| = ( > |x | ) .
+ 2 2 ( -- i )
+ ( i=1 )
+
+ F06EKF(*)
+
+ n
+ --
+ returns the value ||x|| defined by ||x|| = > |x |.
+ 1 1 -- i
+ i=1
+
+ F06JKF(*)
+
+ n
+ --
+ returns the value asum defined by asum= > (|(Re(x )|+|Im(x )|).
+ -- i i
+ i=1
+
+ F06JLF(*)
+
+ returns the first index j such that |x |=max |x |.
+ j i i
+
+ F06JMF(*)
+
+ returns the first index j such that
+ |Re(x )|+|Im(x )|=max (|(Re(x )|+|Im(x )|).
+ j j i i i
+
+ F06EPF(*)
+
+ ( T) ( T)
+ (x ) (x )
+ ( T) ( c s)( T)
+ performs the plane rotation (y ) <- (-s c)(y ).
+
+ 4.3. The Level-2 Matrix-vector Routines
+
+ The matrix-vector routines all have one array argument
+ representing a matrix; usually this is a two-dimensional array
+ but in some cases the matrix is represented by a one-dimensional
+ array.
+
+ The size of the matrix is determined by the arguments M and N for
+ an m by n rectangular matrix; and by the argument N for an n by n
+ symmetric, Hermitian, or triangular matrix. Note that it is
+ permissible to call the routines with M or N = 0, in which case
+ the routines exit immediately without referencing their array
+ arguments. For band matrices, the bandwidth is determined by the
+ arguments KL and KU for a rectangular matrix with kl sub-
+ diagonals and ku super-diagonals; and by the argument K for a
+ symmetric, Hermitian, or triangular matrix with k sub-diagonals
+ and/or super-diagonals.
+
+ The description of the matrix consists either of the array name
+ (A) followed by the first dimension of the array as declared in
+ the calling (sub)program (LDA), when the matrix is being stored
+ in a two-dimensional array; or the array name (AP) alone when the
+ matrix is being stored as a (packed) vector. In the former case
+ the actual array must contain at least ((n-1)d+l) elements, where
+ d is the first dimension of the array, d>=l , and l=m for arrays
+ representing general matrices, l=n for arrays representing
+ symmetric, Hermitian and triangular matrices, l=kl+ku+1 for
+ arrays representing general band matrices and l=k+1 for
+ symmetric, Hermitian and triangular band matrices. For one-
+ dimensional arrays representing matrices (packed storage) the
+ 1
+ actual array must contain at least -n(n+1) elements.
+ 2
+
+ As with the vector routines, vectors are represented by one-
+ dimensional arrays together with a corresponding increment
+ argument (see Section 4.2). The only difference is that for these
+ routines a zero increment is not permitted.
+
+ When the vector x consists of k elements then the declared length
+ of the array X in the calling (sub)program must be at least
+ (1+(k-1)|INCX|).
+
+ The arguments that specify options are character arguments with
+ the names TRANS, UPLO and DIAG. TRANS is used by the matrix-
+ vector product routines as follows:
+
+ Value Meaning
+
+ 'N' or 'n' Operate with the matrix
+
+ 'T' or 't' Operate with the transpose of the matrix
+
+ 'C' or 'c' Operate with the conjugate transpose of the matrix
+
+ In the real case the values 'T', 't', 'C' and 'c' have the same
+ meaning.
+
+ UPLO is used by the Hermitian, symmetric, and triangular matrix
+ routines to specify whether the upper or lower triangle is being
+ referenced as follows:
+
+
+ Value Meaning
+
+ 'U' or 'u' Upper triangle
+
+ 'L' or 'l' Lower triangle
+
+ DIAG is used by the triangular matrix routines to specify whether
+ or not the matrix is unit triangular, as follows:
+
+ Value Meaning
+
+ 'U' or 'u' Unit triangular
+
+ 'N' or 'n' Non-unit triangular
+
+ When DIAG is supplied as 'U' or 'u' the diagonal elements are not
+ referenced.
+
+ It is worth noting that actual character arguments in Fortran may
+ be longer than the corresponding dummy arguments. So that, for
+ example, the value 'T' for TRANS may be passed as 'TRANSPOSE'.
+
+ The routines for real symmetric and complex Hermitian matrices
+ allow for the matrix to be stored in either the upper (UPLO = 'U
+ to be packed in a one-dimensional array. In the latter case the
+ upper triangle may be packed sequentially column by column (UPLO
+ = 'U'), or the lower triangle may be packed sequentially column
+ by column (UPLO = 'L'). Note that for real symmetric matrices
+ packing the upper triangle by column is equivalent to packing the
+ lower triangle by rows, and packing the lower triangle by columns
+ is equivalent to packing the upper triangle by rows. (For complex
+ Hermitian matrices the only difference is that the off-diagonal
+ elements are conjugated.)
+
+ For triangular matrices the argument UPLO serves to define
+ whether the matrix is upper (UPLO = 'U') or lower (UPLO = 'L')
+ triangular. In packed storage the triangle has to be packed by
+ column.
+
+ The band matrix routines allow storage so that the jth column of
+ the matrix is stored in the jth column of the Fortran array. For
+ a general band matrix the diagonal of the matrix is stored in the
+ (ku+1)th row of the array. For a Hermitian or symmetric matrix
+ either the upper triangle (UPLO = 'U') may be stored in which
+ case the leading diagonal is in the (k+1)th row of the array, or
+ the lower triangle (UPLO = 'L') may be stored in which case the
+ leading diagonal is in the first row of the array. For an upper
+ triangular band matrix (UPLO = 'U') the leading diagonal is in
+ the (k+1)th row of the array and for a lower triangular band
+ matrix (UPLO = 'L') the leading diagonal is in the first row.
+
+ For a Hermitian matrix the imaginary parts of the diagonal
+ elements are of course zero and thus the imaginary parts of the
+ corresponding Fortran array elements need not be set, but are
+ assumed to be zero.
+
+ For packed triangular matrices the same storage layout is used
+ whether or not DIAG = 'U', i.e., space is left for the diagonal
+ elements even if those array elements are not referenced.
+
+ H
+ Throughout the following sections A denotes the complex
+ T
+ conjugate of A .
+
+
+ SUBROUTINE F06PAF( TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY DGEMV ( TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 TRANS
+ INTEGER M,N,LDA,INCX,INCY
+ DOUBLE PRECISION ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06SAF( TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY ZGEMV ( TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 TRANS
+ INTEGER M,N,LDA,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06PBF( TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY DGBMV ( TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 TRANS
+ INTEGER M,N,KL,KU,LDA,INCX,INCY
+ DOUBLE PRECISION ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06SBF( TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY ZGBMV ( TRANS,M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 TRANS
+ INTEGER M,N,KL,KU,LDA,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06PCF( UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY DSYMV ( UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,LDA,INCX,INCY
+ DOUBLE PRECISION ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06SCF( UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY ZHEMV ( UPLO,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,LDA,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06PDF( UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY DSBMV ( UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,K,LDA,INCX,INCY
+ DOUBLE PRECISION ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06SDF( UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ ENTRY ZHBMV ( UPLO,N,K,ALPHA,A,LDA,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,K,LDA,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06PEF( UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY )
+ ENTRY DSPMV ( UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY
+ DOUBLE PRECISION ALPHA,AP(*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06SEF( UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY )
+ ENTRY ZHPMV ( UPLO,N,ALPHA,AP,X,INCX,BETA,Y,INCY )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,AP(*),X(*),BETA,Y(*)
+
+ SUBROUTINE F06PFF( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ ENTRY DTRMV ( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,LDA,INCX
+ DOUBLE PRECISION A(LDA,*),X(*)
+
+ SUBROUTINE F06SFF( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ ENTRY ZTRMV ( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,LDA,INCX
+ COMPLEX(KIND(1.0D0)) A(LDA,*),X(*)
+
+ SUBROUTINE F06PGF( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ ENTRY DTBMV ( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,K,LDA,INCX
+ DOUBLE PRECISION A(LDA,*),X(*)
+
+ SUBROUTINE F06SGF( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ ENTRY ZTBMV ( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,K,LDA,INCX
+ COMPLEX(KIND(1.0D0)) A(LDA,*),X(*)
+
+ SUBROUTINE F06PHF( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ ENTRY DTPMV ( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,INCX
+ DOUBLE PRECISION AP(*),X(*)
+
+ SUBROUTINE F06SHF( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ ENTRY ZTPMV ( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,INCX
+ COMPLEX(KIND(1.0D0)) AP(*),X(*)
+
+ SUBROUTINE F06PJF( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ ENTRY DTRSV ( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,LDA,INCX
+ DOUBLE PRECISION A(LDA,*),X(*)
+
+ SUBROUTINE F06SJF( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ ENTRY ZTRSV ( UPLO,TRANS,DIAG,N,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,LDA,INCX
+ COMPLEX(KIND(1.0D0)) A(LDA,*),X(*)
+
+ SUBROUTINE F06PKF( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ ENTRY DTBSV ( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,K,LDA,INCX
+ DOUBLE PRECISION A(LDA,*),X(*)
+
+ SUBROUTINE F06SKF( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ ENTRY ZTBSV ( UPLO,TRANS,DIAG,N,K,A,LDA,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,K,LDA,INCX
+ COMPLEX(KIND(1.0D0)) A(LDA,*),X(*)
+
+ SUBROUTINE F06PLF( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ ENTRY DTPSV ( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,INCX
+ DOUBLE PRECISION AP(*),X(*)
+
+ SUBROUTINE F06SLF( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ ENTRY ZTPSV ( UPLO,TRANS,DIAG,N,AP,X,INCX )
+ CHARACTER*1 UPLO,TRANS,DIAG
+ INTEGER N,INCX
+ COMPLEX(KIND(1.0D0)) AP(*),X(*)
+
+ SUBROUTINE F06PMF( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ ENTRY DGER ( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ INTEGER M,N,INCX,INCY,LDA
+ DOUBLE PRECISION ALPHA,X(*),Y(*),A(LDA,*)
+
+ SUBROUTINE F06SMF( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ ENTRY ZGERU ( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ INTEGER M,N,INCX,INCY,LDA
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*),Y(*),A(LDA,*)
+
+ SUBROUTINE F06SNF( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ ENTRY ZGERC ( M,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ INTEGER M,N,INCX,INCY,LDA
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*),Y(*),A(LDA,*)
+
+ SUBROUTINE F06PPF( UPLO,N,ALPHA,X,INCX,A,LDA )
+ ENTRY DSYR ( UPLO,N,ALPHA,X,INCX,A,LDA )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,LDA
+ DOUBLE PRECISION ALPHA,X(*),A(LDA,*)
+
+ SUBROUTINE F06SPF( UPLO,N,ALPHA,X,INCX,A,LDA )
+ ENTRY ZHER ( UPLO,N,ALPHA,X,INCX,A,LDA )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,LDA
+ DOUBLE PRECISION ALPHA
+ COMPLEX(KIND(1.0D0)) X(*),A(LDA,*)
+
+ SUBROUTINE F06PQF( UPLO,N,ALPHA,X,INCX,AP )
+ ENTRY DSPR ( UPLO,N,ALPHA,X,INCX,AP )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX
+ DOUBLE PRECISION ALPHA,X(*),AP(*)
+
+ SUBROUTINE F06SQF( UPLO,N,ALPHA,X,INCX,AP )
+ ENTRY ZHPR ( UPLO,N,ALPHA,X,INCX,AP )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX
+ DOUBLE PRECISION ALPHA
+ COMPLEX(KIND(1.0D0)) X(*),AP(*)
+
+ SUBROUTINE F06PRF( UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ ENTRY DSYR2 ( UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY,LDA
+ DOUBLE PRECISION ALPHA,X(*),Y(*),A(LDA,*)
+
+ SUBROUTINE F06SRF( UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ ENTRY ZHER2 ( UPLO,N,ALPHA,X,INCX,Y,INCY,A,LDA )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY,LDA
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*),Y(*),A(LDA,*)
+
+ SUBROUTINE F06PSF( UPLO,N,ALPHA,X,INCX,Y,INCY,AP )
+ ENTRY DSPR2 ( UPLO,N,ALPHA,X,INCX,Y,INCY,AP )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY
+ DOUBLE PRECISION ALPHA,X(*),Y(*),AP(*)
+
+ SUBROUTINE F06SSF( UPLO,N,ALPHA,X,INCX,Y,INCY,AP )
+ ENTRY ZHPR2 ( UPLO,N,ALPHA,X,INCX,Y,INCY,AP )
+ CHARACTER*1 UPLO
+ INTEGER N,INCX,INCY
+ COMPLEX(KIND(1.0D0)) ALPHA,X(*),Y(*),AP(*)
+
+ F06PAF(*), F06SAF(*), F06PBF(*) and F06SBF(*)
+
+ perform the operation
+
+ y<-(alpha)Ax+(beta)y, when TRANS = 'N',
+
+ T
+ y<-(alpha)A x+(beta)y, when TRANS = 'T',
+
+ H
+ y<-(alpha)A x+(beta)y, when TRANS = 'C',
+
+ where A is a general matrix for F06PAF(*) and F06SAF(*), and is a
+ general band matrix for F06PBF(*) and F06SBF(*).
+
+ F06PCF(*), F06SCF(*), F06PEF(*), F06SEF(*), F06PDF(*) and
+ F06SDF(*)
+
+ perform the operation
+
+ y<-(alpha)Ax+(beta)y
+
+ where A is symmetric and Hermitian for F06PCF(*) and F06SCF(*)
+ respectively, is symmetric and Hermitian stored in packed form
+ for F06PEF(*) and F06SEF(*) respectively, and is symmetric and
+ Hermitian band for F06PDF(*) and F06SDF(*).
+
+ F06PFF(*), F06SFF(*), F06PHF(*), F06SHF(*), F06PGF(*) and
+ F06SGF(*)
+
+ perform the operation
+
+ x<-Ax, when TRANS = 'N',
+
+ T
+ x<-A x, when TRANS = 'T',
+
+ H
+ x<-A x, when TRANS = 'C',
+
+ where A is a triangular matrix for F06PFF(*) and F06SFF(*), is a
+ triangular matrix stored in packed form for F06PHF(*) and
+ F06SHF(*), and is a triangular band matrix for F06PGF(*) and
+ F06SGF(*).
+
+ F06PJF(*), F06SJF(*), F06PLF(*), F06SLF(*), F06PKF(*) and
+ F06SKF(*)
+
+ solve the equations
+
+ Ax=b, when TRANS = 'N',
+
+ T
+ A x=b, when TRANS = 'T',
+
+ H
+ A x=b, when TRANS = 'C',
+
+ where A is a triangular matrix for F06PJF(*) and F06SJF(*), is a
+ triangular matrix stored in packed form for F06PLF(*) and
+ F06SLF(*), and is a triangular band matrix for F06PKF(*) and
+ F06SKF(*). The vector b must be supplied in the array X and is
+ overwritten by the solution. It is important to note that no test
+ for singularity is included in these routines.
+
+ F06PMF(*) and F06SMF(*)
+
+ T
+ perform the operation A<-(alpha)xy +A, where A is a general
+ matrix.
+
+ F06SNF(*)
+
+ H
+ performs the operation A<-(alpha)xy +A, where A is a general
+ complex matrix.
+
+ F06PPF(*) and F06PQF(*)
+
+ T
+ perform the operation A<-(alpha)xx +A, where A is a symmetric
+ matrix for F06PPF(*) and is a symmetric matrix stored in packed
+ form for F06PQF(*).
+
+ F06SPF(*) and F06SQF(*)
+
+ H
+ perform the operation A<-(alpha)xx +A, where A is an Hermitian
+ matrix for F06SPF(*) and is an Hermitian matrix stored in packed
+ form for F06SQF(*).
+
+ F06PRF(*) and F06PSF(*)
+
+ T T
+ perform the operation A<-(alpha)xy +(alpha)yx +A, where A is a
+ symmetric matrix for F06PRF(*) and is a symmetric matrix stored
+ in packed form for F06PSF(*).
+
+ F06SRF(*) and F06SSF(*)
+
+ H H
+ perform the operation A<-(alpha)xy +(alpha)yx +A, where A is an
+ Hermitian matrix for F06SRF(*) and is an Hermitian matrix stored
+ in packed form for F06SSF(*).
+
+ The following argument values are invalid:
+
+ Any value of the character arguments DIAG, TRANS, or UPLO
+ whose meaning is not specified.
+
+ M < 0
+
+ N < 0
+
+ KL < 0
+
+ KU < 0
+
+ K < 0
+
+ LDA < M
+
+ LDA < KL + KU + 1
+
+ LDA < N for the routines involving full Hermitian,
+ symmetric or triangular matrices
+
+ LDA < K + 1 for the routines involving band Hermitian,
+ symmetric or triangular matrices
+
+ INCX = 0
+
+ INCY = 0
+
+ If a routine is called with an invalid value then an error
+ message is output, on the error message unit (see X04AAF), giving
+ the name of the routine and the number of the first invalid
+ argument, and execution is terminated.
+
+ 4.4. The Level-3 Matrix-matrix Routines
+
+ The matrix-matrix routines all have either two or three arguments
+ representing a matrix, one of which is an input-output argument,
+ and in each case the arguments are two-dimensional arrays.
+
+ The sizes of the matrices are determined by one or more of the
+ arguments M, N and K. The size of the input-output array is
+ always determined by the arguments M and N for a rectangular m by
+ n matrix, and by the argument N for a square n by n matrix. It is
+ permissible to call the routines with M or N = 0, in which case
+ the routines exit immediately without referencing their array
+ arguments.
+
+ Many of the routines perform an operation of the form
+
+ C<-P+(beta)C,
+
+ where P is the product of two matrices, or the sum of two such
+ products. When the inner dimension of the matrix product is
+ different from m or n it is denoted by K. Again it is permissible
+ to call the routines with K = 0 and if M > 0, but K = 0, then the
+ routines perform the operation
+
+
+ C<-(beta)C.
+
+ As with the Level-2 routines (see Section 4.3) the description of
+ the matrix consists of the array name (A or B or C) followed by
+ the first dimension (LDA or LDB or LDC).
+
+ The arguments that specify options are character arguments with
+ the names SIDE, TRANSA, TRANSB, TRANS, UPLO and DIAG. UPLO and
+ DIAG have the same values and meanings as for the Level-2
+ routines (see Section 4.3); TRANSA, TRANSB and TRANS have the
+ same values and meanings as TRANS in the Level-2 routines, where
+ TRANSA and TRANSB apply to the matrices A and B respectively.
+ SIDE is used by the routines as follows:
+
+ Value Meaning
+
+ 'L' Multiply general matrix by symmetric, Hermitian or
+ triangular matrix on the left
+
+ 'R' Multiply general matrix by symmetric, Hermitian or
+ triangular matrix on the right
+
+ The storage conventions for matrices are as for the Level-2
+ routines (see Section 4.3).
+
+ SUBROUTINE F06YAF( TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY DGEMM ( TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER TRANSA,TRANSB
+ INTEGER M,N,K,LDA,LDB,LDC
+ DOUBLE PRECISION ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06ZAF( TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY ZGEMM ( TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER TRANSA,TRANSB
+ INTEGER M,N,K,LDA,LDB,LDC
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06YCF( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY DSYMM ( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER SIDE,UPLO
+ INTEGER M,N,LDA,LDB,LDC
+ DOUBLE PRECISION ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06ZCF( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY ZHEMM ( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER SIDE,UPLO
+ INTEGER M,N,LDA,LDB,LDC
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06ZTF( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY ZSYMM ( SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER SIDE,UPLO
+ INTEGER M,N,LDA,LDB,LDC
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06YFF( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ ENTRY DTRMM ( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ CHARACTER SIDE,UPLO,TRANSA,DIAG
+ INTEGER M,N,LDA,LDB
+ DOUBLE PRECISION ALPHA,A(LDA,*),B(LDB,*)
+
+ SUBROUTINE F06ZFF( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ ENTRY ZTRMM ( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ CHARACTER SIDE,UPLO,TRANSA,DIAG
+ INTEGER M,N,LDA,LDB
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*)
+
+ SUBROUTINE F06YJF( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ ENTRY DTRSM ( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ CHARACTER SIDE,UPLO,TRANSA,DIAG
+ INTEGER M,N,LDA,LDB
+ DOUBLE PRECISION ALPHA,A(LDA,*),B(LDB,*)
+
+ SUBROUTINE F06ZJF( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ ENTRY ZTRSM ( SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB )
+ CHARACTER SIDE,UPLO,TRANSA,DIAG
+ INTEGER M,N,LDA,LDB
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*)
+
+ SUBROUTINE F06YPF( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ ENTRY DSYRK ( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDC
+ DOUBLE PRECISION ALPHA,A(LDA,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06ZPF( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ ENTRY ZHERK ( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDC
+ DOUBLE PRECISION ALPHA,BETA
+ COMPLEX(KIND(1.0D0)) A(LDA,*),C(LDC,*)
+
+ SUBROUTINE F06ZUF( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ ENTRY ZSYRK ( UPLO,TRANS,N,K,ALPHA,A,LDA,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDC
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06YRF( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY DSYR2K( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDB,LDC
+ DOUBLE PRECISION ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+ SUBROUTINE F06ZRF( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY ZHER2K( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDB,LDC
+ DOUBLE PRECISION BETA
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*),C(LDC,*)
+
+ SUBROUTINE F06ZWF( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ ENTRY ZSYR2K( UPLO,TRANS,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC )
+ CHARACTER UPLO,TRANS
+ INTEGER N,K,LDA,LDB,LDC
+ COMPLEX(KIND(1.0D0)) ALPHA,A(LDA,*),B(LDB,*),BETA,C(LDC,*)
+
+
+ F06YAF(*) and F06ZAF(*)
+
+ perform the operation indicated in the following table:
+
+ TRANSA = 'N' TRANSA = 'T' TRANSA = 'C'
+
+ T H
+ TRANSB='N' C <- (alpha)AB C <- (alpha)A B C <- (alpha)A B
+ +(beta)C +(beta)C +(beta)C
+ A is m*k, A is k*m, A is k*m,
+ B is k*n B is k*n B is k*n
+
+ T T T H T
+ TRANSB='T' C <- (alpha)AB C <- (alpha)A B C <- (alpha)A B
+ +(beta)C +(beta)C +(beta)C
+ A is m*k, A is k*m, A is k*m,
+ B is n*k B is n*k B is n*k
+
+ H T H H H
+ TRANSB='C' C <- (alpha)AB C <- (alpha)A B C <- (alpha)A B
+ +(beta)C +(beta)C +(beta)C
+ A is m*k, A is k*m, A is k*m,
+ B is n*k B is n*k B is n*k
+
+
+ where A and B are general matrices and C is a general m by n
+ matrix.
+
+ F06YCF(*), F06ZCF(*) and F06ZTF(*) perform the operation
+
+ indicated in the following table:
+
+ SIDE = 'L' SIDE = 'R'
+
+ C<-(alpha)AB+(beta)C C<-(alpha)BA+(beta)C
+
+ A is m*m B is m*n
+
+ B is m*n A is n*n
+
+ where A is symmetric for F06YCF(*) and F06ZTF(*) and is Hermitian
+ for F06ZCF(*), B is a general matrix and C is a general m by n
+ matrix.
+
+ F06YFF(*) and F06ZFF(*) perform the operation indicated in the
+ following table:
+
+ TRANSA = 'N' TRANSA = 'T' TRANSA = 'C'
+
+ T H
+ SIDE='L' B <- (alpha)AB B <- (alpha)A B B <- (alpha)A B
+
+ A is A is A is
+ triangular triangular triangular
+ m*m m*m m*m
+
+ T H
+ SIDE='R' B <- (alpha)BA B <- (alpha)BA B <- (alpha)BA
+
+ A is A is A is
+ triangular triangular triangular
+ n*n n*n n*n
+
+ where B is a general m by n matrix.
+
+ F06YJF(*) and F06ZJF(*) solve the equations, indicated in the
+ following table, for X:
+
+ TRANSA = 'N' TRANSA = 'T' TRANSA = 'C'
+
+ T H
+ SIDE='L' AX=(alpha)B A X=(alpha)B A X=(alpha)B
+
+ A is A is A is
+ triangular triangular triangular
+ m*m m*m m*m
+
+ T H
+ SIDE='R' XA=(alpha)B XA =(alpha)B XA =(alpha)B
+
+ A is A is A is
+ triangular triangular triangular
+ n*n n*n n*n
+
+ where B is a general m by n matrix. The m by n solution matrix X
+ is overwritten on the array B. It is important to note that no
+ test for singularity is included in these routines.
+
+ F06YPF(*), F06ZPF(*) and F06ZUF(*) perform the operation
+ indicated in the following table:
+
+ TRANS = 'N' TRANS = 'T' TRANS = 'C'
+
+ T T T
+ F06YPF C <- (alpha)AA C <- (alpha)A A C <- (alpha)A A
+ +(beta)C +(beta)C +(beta)C
+ T T
+ F06ZUF C <- (alpha)AA C <- (alpha)A A --
+ +(beta)C +(beta)C
+ H H
+ F06ZPF C <- (alpha)AA -- C <- (alpha)A A
+ +(beta)C +(beta)C
+
+ A is n*k A is k*n A is k*n
+
+ where A is a general matrix and C is an n by n symmetric matrix
+ for F06YPF(*) and F06ZUF(*), and is an n by n Hermitian matrix
+ for F06ZPF(*).
+
+ F06YRF(*), F06ZRF(*) and F06ZWF(*) perform the operation
+ indicated in the following table:
+
+
+ TRANS = 'N' TRANS = 'T' TRANS = 'C'
+
+ T T T
+ F06YRF C <- (alpha)AB C <- (alpha)A B C <- (alpha)A B
+ T T T
+ +(alpha)BA +(alpha)B A +(alpha)B A
+ +(beta)C +(beta)C +(beta)C
+ T T
+ F06ZWF C <- (alpha)AB C <- (alpha)A B --
+ T T
+ +(alpha)BA +(alpha)B A
+ +(beta)C +(beta)C
+ H H
+ F06ZRF C <- (alpha)AB -- C <- (alpha)A B
+ H H
+ +(alpha)BA +(alpha)B A
+ +(beta)C +(beta)C
+
+ A and B are n*k A and B are k*n A and B are k*n
+
+ where A and B are general matrices and C is an n by n symmetric
+ matrix for F06YRF(*) and F06ZWF(*), and is an n by n Hermitian
+ matrix for F06ZPF(*).
+
+ The following values of arguments are invalid:
+
+ Any value of the character arguments SIDE, TRANSA, TRANSB,
+ TRANS, UPLO or DIAG, whose meaning is not specified.
+
+ M < 0
+
+ N < 0
+
+ K < 0
+
+ LDA < the number of rows in the matrix A.
+
+ LDB < the number of rows in the matrix B.
+
+ LDC < the number of rows in the matrix C.
+
+ If a routine is called with an invalid value then an error
+ message is output, on the error message unit (see X04AAF), giving
+ the name of the routine and the number of the first invalid
+ argument, and execution is terminated.
+
+
+ F06 -- Linear Algebra Support Routines Contents -- F06
+ Chapter F06
+
+ Linear Algebra Support Routines
+
+ F06AAF (DROTG) Generate real plane rotation
+
+ F06EAF (DDOT) Dot product of two real vectors
+
+ F06ECF (DAXPY) Add scalar times real vector to real vector
+
+ F06EDF (DSCAL) Multiply real vector by scalar
+
+ F06EFF (DCOPY) Copy real vector
+
+ F06EGF (DSWAP) Swap two real vectors
+
+ F06EJF (DNRM2) Compute Euclidean norm of real vector
+
+ F06EKF (DASUM) Sum the absolute values of real vector elements
+
+ F06EPF (DROT) Apply real plane rotation
+
+ F06GAF (ZDOTU) Dot product of two complex vectors, unconjugated
+
+ F06GBF (ZDOTC) Dot product of two complex vectors, conjugated
+
+ F06GCF (ZAXPY) Add scalar times complex vector to complex vector
+
+ F06GDF (ZSCAL) Multiply complex vector by complex scalar
+
+ F06GFF (ZCOPY) Copy complex vector
+
+ F06GGF (ZSWAP) Swap two complex vectors
+
+ F06JDF (ZDSCAL) Multiply complex vector by real scalar
+
+ F06JJF (DZNRM2) Compute Euclidean norm of complex vector
+
+ F06JKF (DZASUM) Sum the absolute values of complex vector
+ elements
+
+ F06JLF (IDAMAX) Index, real vector element with largest absolute
+ value
+
+ F06JMF (IZAMAX) Index, complex vector element with largest
+ absolute value
+
+ F06PAF (DGEMV) Matrix-vector product, real rectangular matrix
+
+ F06PBF (DGBMV) Matrix-vector product, real rectangular band
+ matrix
+
+ F06PCF (DSYMV) Matrix-vector product, real symmetric matrix
+
+ F06PDF (DSBMV) Matrix-vector product, real symmetric band matrix
+
+ F06PEF (DSPMV) Matrix-vector product, real symmetric packed
+ matrix
+
+ F06PFF (DTRMV) Matrix-vector product, real triangular matrix
+
+ F06PGF (DTBMV) Matrix-vector product, real triangular band
+ matrix
+
+ F06PHF (DTPMV) Matrix-vector product, real triangular packed
+ matrix
+
+ F06PJF (DTRSV) System of equations, real triangular matrix
+
+ F06PKF (DTBSV) System of equations, real triangular band matrix
+
+ F06PLF (DTPSV) System of equations, real triangular packed
+ matrix
+
+ F06PMF (DGER) Rank-1 update, real rectangular matrix
+
+ F06PPF (DSYR) Rank-1 update, real symmetric matrix
+
+ F06PQF (DSPR) Rank-1 update, real symmetric packed matrix
+
+ F06PRF (DSYR2) Rank-2 update, real symmetric matrix
+
+ F06PSF (DSPR2) Rank-2 update, real symmetric packed matrix
+
+ F06SAF (ZGEMV) Matrix-vector product, complex rectangular matrix
+
+ F06SBF (ZGBMV) Matrix-vector product, complex rectangular band
+ matrix
+
+ F06SCF (ZHEMV) Matrix-vector product, complex Hermitian matrix
+
+ F06SDF (ZHBMV) Matrix-vector product, complex Hermitian band
+ matrix
+
+ F06SEF (ZHPMV) Matrix-vector product, complex Hermitian packed
+ matrix
+
+ F06SFF (ZTRMV) Matrix-vector product, complex triangular matrix
+
+ F06SGF (ZTBMV) Matrix-vector product, complex triangular band
+ matrix
+
+ F06SHF (ZTPMV) Matrix-vector product, complex triangular packed
+ matrix
+
+ F06SJF (ZTRSV) System of equations, complex triangular matrix
+
+ F06SKF (ZTBSV) System of equations, complex triangular band
+ matrix
+
+ F06SLF (ZTPSV) System of equations, complex triangular packed
+ matrix
+
+ F06SMF (ZGERU) Rank-1 update, complex rectangular matrix,
+ unconjugated vector
+
+ F06SNF (ZGERC) Rank-1 update, complex rectangular matrix,
+ conjugated vector
+
+ F06SPF (ZHER) Rank-1 update, complex Hermitian matrix
+
+ F06SQF (ZHPR) Rank-1 update, complex Hermitian packed matrix
+
+ F06SRF (ZHER2) Rank-2 update, complex Hermitian matrix
+
+ F06SSF (ZHPR2) Rank-2 update, complex Hermitian packed matrix
+
+ F06YAF (DGEMM) Matrix-matrix product, two real rectangular
+ matrices
+
+ F06YCF (DSYMM) Matrix-matrix product, one real symmetric matrix,
+ one real rectangular matrix
+
+ F06YFF (DTRMM) Matrix-matrix product, one real triangular
+ matrix, one real rectangular matrix
+
+ F06YJF (DTRSM) Solves a system of equations with multiple right-
+ hand sides, real triangular coefficient matrix
+
+ F06YPF (DSYRK) Rank-k update of a real symmetric matrix
+
+ F06YRF (DSYR2K) Rank-2k update of a real symmetric matrix
+
+ F06ZAF (ZGEMM) Matrix-matrix product, two complex rectangular
+ matrices
+
+ F06ZCF (ZHEMM) Matrix-matrix product, one complex Hermitian
+ matrix, one complex rectangular matrix
+
+ F06ZFF (ZTRMM) Matrix-matrix product, one complex triangular
+ matrix, one complex rectangular matrix
+
+ F06ZJF (ZTRSM) Solves system of equations with multiple right-
+ hand sides, complex triangular coefficient matrix
+
+ F06ZPF (ZHERK) Rank-k update of a complex Hermitian matrix
+
+ F06ZRF (ZHER2K) Rank-2k update of a complex Hermitian matrix
+
+ F06ZTF (ZSYMM) Matrix-matrix product, one complex symmetric
+ matrix, one complex rectangular matrix
+
+ F06ZUF (ZSYRK) Rank-k update of a complex symmetric matrix
+
+ F06ZWF (ZSYR2K) Rank-2k update of a complex symmetric matrix
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf07}{NAG On-line Documentation: f07}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F07(3NAG) Foundation Library (12/10/92) F07(3NAG)
+
+
+
+ F07 -- Linear Equations (LAPACK) Introduction -- F07
+ Chapter F07
+ Linear Equations (LAPACK)
+
+ 1. Scope of the Chapter
+
+ This chapter provides four routines concerned with matrix
+ factorization, and the solution of systems of linear equations
+ following the matrix factorizations.
+
+ 2. Background to the Problems
+
+ Background material, together with pointers to the routines in
+ this chapter, are to be found in the F01 and F04 Chapter
+ Introductions.
+
+ 3. Recommendations on Choice and Use of Routines
+
+ The routines in this chapter are derived from the LAPACK project
+ and may also be called using the LAPACK name, which is given in
+ brackets following the F07 name in the following descriptions.
+
+ Routine F07ADF (DGETRF) performs an LU factorization of a real m
+ by n matrix A. Following the use of this routine, F07AEF (DGETRS)
+ may be used to solve a system of n non-singular linear equations,
+ with one or more right-hand sides.
+
+ Routine F07FDF (DPOTRF) performs the Cholesky factorization of a
+ real symmetric positive-definite matrix A. Following the use of
+ this routine, F07FEF (DPOTRS) may be used to solve a system of
+ symmetric positive-definite linear equations, with one or more
+ right-hand sides.
+
+
+ F07 -- Linear Equations (LAPACK) Contents -- F07
+ Chapter F07
+
+ Linear Equations (LAPACK)
+
+ F07ADF (DGETRF) LU factorization of real m by n matrix
+
+ F07AEF (DGETRS) Solution of real system of linear equations,
+ multiple right-hand sides, matrix already factorized by
+ F07ADF
+
+ F07FDF (DPOTRF) Cholesky factorization of real symmetric
+ positive-definite matrix
+
+ F07FEF (DPOTRS) Solution of real symmetric positive-definite
+ system of linear equations, multiple right-hand sides,
+ matrix already factorized by F07FDF
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf07adf}{NAG On-line Documentation: f07adf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F07ADF(3NAG) Foundation Library (12/10/92) F07ADF(3NAG)
+
+
+
+ F07 -- Linear Equations (LAPACK) F07ADF
+ F07ADF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F07ADF (DGETRF) computes the LU factorization of a real m by n
+ matrix.
+
+ 2. Specification
+
+ SUBROUTINE F07ADF (M, N, A, LDA, IPIV, INFO)
+ ENTRY M, N, A, LDA, IPIV, INFO
+ INTEGER M, N, LDA, IPIV(*), INFO
+ DOUBLE PRECISION A(LDA,*)
+
+ The ENTRY statement enables the routine to be called by its
+ LAPACK name.
+
+ 3. Description
+
+ This routine forms the LU factorization of a real m by n matrix A
+ as A=PLU, where P is a permutation matrix, L is lower triangular
+ with unit diagonal elements (lower trapezoidal if m>n) and U is
+ upper triangular (upper trapezoidal if m<n). Usually A is square
+ (m=n), and both L and U are triangular. The routine uses partial
+ pivoting, with row interchanges.
+
+ 4. References
+
+ [1] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ 5. Parameters
+
+ 1: M -- INTEGER Input
+ On entry: m, the number of rows of the matrix A.
+ Constraint: M >= 0.
+
+ 2: N -- INTEGER Input
+ On entry: n, the number of columns of the matrix A.
+ Constraint: N >= 0.
+
+ 3: A(LDA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the m by n matrix A. On exit: A is overwritten by
+ the factors L and U; the unit diagonal elements of L are not
+ stored.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F07ADF is called.
+ Constraint: LDA >= max(1,M).
+
+ 5: IPIV(*) -- INTEGER array Output
+ Note: the dimension of the array IPIV must be at least
+ max(1,min(M,N)).
+ On exit: the pivot indices. Row i of the matrix A was
+ interchanged with row IPIV(i) for i=1,2,...,min(m,n).
+
+ 6: INFO -- INTEGER Output
+ On exit: INFO = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ INFO < 0
+ If INFO = -i, the ith parameter has an illegal value. An
+ explanatory message is output, and execution of the program
+ is terminated.
+
+ INFO > 0
+ If INFO = i, u is exactly zero. The factorization has been
+ ii
+ completed but the factor U is exactly singular, and division
+ by zero will occur if it is subsequently used to solve a
+ -1
+ system of linear equations or to compute A .
+
+ 7. Accuracy
+
+ The computed factors L and U are the exact factors of a perturbed
+ matrix A+E, where
+
+ |E|<=c(min(m,n))(epsilon)P|L||U|,
+
+ c(n) is a modest linear function of n, and (epsilon) is the
+ machine precision.
+
+ 8. Further Comments
+
+ The total number of floating-point operations is approximately
+ 2 3 1 2 1 2
+ -n if m=n (the usual case), -n (3m-n) if m>n and -m (3n-m) if
+ 3 3 3
+ m<n.
+
+ A call to this routine with m=n may be followed by calls to the
+ routines:
+
+ T
+ F07AEF (DGETRS) to solve AX=B or A X=B;
+
+ F07AGF (DGECON)(*) to estimate the condition number of A;
+
+ F07AJF (DGETRI)(*) to compute the inverse of A.
+
+ The complex analogue of this routine is F07ARF (ZGETRF)(*).
+
+ 9. Example
+
+ To compute the LU factorization of the matrix A, where
+
+ ( 1.80 2.88 2.05 -0.89)
+ ( 5.25 -2.95 -0.95 -3.80)
+ A=( 1.58 -2.69 -2.90 -1.04).
+ (-1.11 -0.66 -0.59 0.80)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf07aef}{NAG On-line Documentation: f07aef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F07AEF(3NAG) Foundation Library (12/10/92) F07AEF(3NAG)
+
+
+
+ F07 -- Linear Equations (LAPACK) F07AEF
+ F07AEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F07AEF (DGETRS) solves a real system of linear equations with
+ T
+ multiple right-hand sides, AX=B or A X=B, where A has been
+ factorized by F07ADF (DGETRF).
+
+ 2. Specification
+
+ SUBROUTINE F07AEF (TRANS, N, NRHS, A, LDA, IPIV, B, LDB,
+ 1 INFO)
+ ENTRY TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO
+ INTEGER N, NRHS, LDA, IPIV(*), LDB, INFO
+ DOUBLE PRECISION A(LDA,*), B(LDB,*)
+ CHARACTER*1 TRANS
+
+ The ENTRY statement enables the routine to be called by its
+ LAPACK name.
+
+ 3. Description
+
+ T
+ To solve a real system of linear equations AX=B or A X=B, this
+ routine must be preceded by a call to F07ADF (DGETRF)which
+ computes the LU factorization of A as A=PLU. The solution is
+ computed by forward and backward substitution.
+
+ If TRANS = 'N', the solution is computed by solving PLY=B and
+ then UX=Y.
+
+ T
+ If TRANS = 'T' or 'C', the solution is computed by solving U Y=B
+ T T
+ and then L P X=Y.
+
+ 4. References
+
+ [1] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ 5. Parameters
+
+ 1: TRANS -- CHARACTER*1 Input
+ On entry: indicates the form of the equations as follows:
+ if TRANS = 'N', then AX=B is solved for X;
+
+ T
+ if TRANS = 'T' or 'C', then A X=B is solved for X.
+ Constraint: TRANS = 'N', 'T' or 'C'.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 3: NRHS -- INTEGER Input
+ On entry: r, the number of right-hand sides. Constraint:
+ NRHS >= 0.
+
+ 4: A(LDA,*) -- DOUBLE PRECISION array Input
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the LU factorization of A, as returned by F07ADF
+ (DGETRF).
+
+ 5: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F07AEF is called.
+ Constraint: LDA >= max(1,N).
+
+ 6: IPIV(*) -- INTEGER array Input
+ Note: the dimension of the array IPIV must be at least
+ max(1,N).
+ On entry: the pivot indices, as returned by F07ADF (DGETRF).
+
+ 7: B(LDB,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,NRHS).
+ On entry: the n by r right-hand side matrix B. On exit: the
+ n by r solution matrix X.
+
+ 8: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F07AEF is called.
+ Constraint: LDB >= max(1,N).
+
+ 9: INFO -- INTEGER Output
+ On exit: INFO = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ INFO < 0
+ If INFO = -i, the ith parameter has an illegal value. An
+ explanatory message is output, and execution of the program
+ is terminated.
+
+ 7. Accuracy
+
+ For each right-hand side vector b, the computed solution x is the
+ exact solution of a perturbed system of equations (A+E)x=b, where
+
+ |E|<=c(n)(epsilon)P|L||U|,
+
+ c(n) is a modest linear function of n, and (epsilon) is the
+ machine precision.
+
+ ^
+ If x is the true solution, then the computed solution x satisfies
+ a forward error bound of the form
+
+ ^
+ ||x-x||
+ infty
+ ------------ <= c(n)cond(A,x)(epsilon)
+ ||x||
+ infty
+
+ -1
+ where cond(A,x)=|||A ||A||x||| /||x|| <=
+ infty infty
+ -1
+ cond(A)=|||A ||A||| <=(kappa) (A). Note that cond(A,x)
+ infty infty
+ T
+ can be much smaller than cond(A), and cond(A ) can be much larger
+ (or smaller) than cond(A).
+
+ Forward and backward error bounds can be computed by calling
+ F07AHF (DGERFS)(*), and an estimate for (kappa) (A) can be
+ infty
+ obtained by calling F07AGF (DGECON)(*) with NORM ='I'.
+
+ 8. Further Comments
+
+ The total number of floating-point operations is approximately
+ 2
+ 2n r.
+
+ This routine may be followed by a call to F07AHF (DGERFS)(*) to
+ refine the solution and return an error estimate.
+
+ The complex analogue of this routine is F07ASF (ZGETRS)(*).
+
+ 9. Example
+
+ To solve the system of equations AX=B, where
+
+ ( 1.80 2.88 2.05 -0.89)
+ ( 5.25 -2.95 -0.95 -3.80)
+ A=( 1.58 -2.69 -2.90 -1.04)
+ (-1.11 -0.66 -0.59 0.80)
+
+ and
+
+
+ ( 9.52 18.47)
+ (24.35 2.25)
+ B=( 0.77 -13.28).
+ (-6.22 -6.21)
+
+ Here A is unsymmetric and must first be factorized by F07ADF
+ (DGETRF)).
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf07fdf}{NAG On-line Documentation: f07fdf}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F07FDF(3NAG) Foundation Library (12/10/92) F07FDF(3NAG)
+
+
+
+ F07 -- Linear Equations (LAPACK) F07FDF
+ F07FDF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F07FDF (DPOTRF) computes the Cholesky factorization of a real
+ symmetric positive-definite matrix.
+
+ 2. Specification
+
+ SUBROUTINE F07FDF (UPLO, N, A, LDA, INFO)
+ ENTRY UPLO, N, A, LDA, INFO
+ INTEGER N, LDA, INFO
+ DOUBLE PRECISION A(LDA,*)
+ CHARACTER*1 UPLO
+
+ The ENTRY statement enables the routine to be called by its
+ LAPACK name.
+
+ 3. Description
+
+ This routine forms the Cholesky factorization of a real symmetric
+ T T
+ positive-definite matrix A either as A=U U if UPLO = 'U' or A=LL
+ if UPLO = 'L', where U is an upper triangular matrix and L is
+ lower triangular.
+
+ 4. References
+
+ [1] Demmel J W (1989) On Floating-point Errors in Cholesky.
+ LAPACK Working Note No. 14. University of Tennessee,
+ Knoxville.
+
+ [2] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ 5. Parameters
+
+ 1: UPLO -- CHARACTER*1 Input
+ On entry: indicates whether the upper or lower triangular
+ part of A is stored and how A is factorized, as follows:
+ if UPLO = 'U', then the upper triangular part of A is
+ T
+ stored and A is factorized as U U, where U is upper
+ triangular;
+
+ if UPLO = 'L', then the lower triangular part of A is
+ T
+ stored and A is factorized as LL , where L is lower
+ triangular.
+ Constraint: UPLO = 'U' or 'L'.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 3: A(LDA,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the n by n symmetric positive-definite matrix A.
+ If UPLO = 'U', the upper triangle of A must be stored and
+ the elements of the array below the diagonal are not
+ referenced; if UPLO = 'L', the lower triangle of A must be
+ stored and the elements of the array above the diagonal are
+ not referenced. On exit: the upper or lower triangle of A is
+ overwritten by the Cholesky factor U or L as specified by
+ UPLO.
+
+ 4: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F07FDF is called.
+ Constraint: LDA >= max(1,N).
+
+ 5: INFO -- INTEGER Output
+ On exit: INFO = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ INFO < 0
+ If INFO = -i, the ith parameter has an illegal value. An
+ explanatory message is output, and execution of the program
+ is terminated.
+
+ INFO > 0
+ If INFO = i, the leading minor of order i is not positive-
+ definite and the factorization could not be completed. Hence
+ A itself is not positive-definite. This may indicate an
+ error in forming the matrix A. To factorize a symmetric
+ matrix which is not positive-definite, call F07MDF
+ (DSYTRF)(*) instead.
+
+ 7. Accuracy
+
+ If UPLO = 'U', the computed factor U is the exact factor of a
+ perturbed matrix A+E, where
+
+ T
+ |E|<=c(n)(epsilon)|U ||U|,
+
+ c(n) is a modest linear function of n, and (epsilon) is the
+ machine precision. If UPLO = 'L', a similar statement holds for
+ the computed factor L. It follows that
+
+
+ |e |<=c(n)(epsilon) /a a .
+ ij \/ ii jj
+
+ 8. Further Comments
+
+ The total number of floating-point operations is approximately
+ 1 3
+ -n .
+ 3
+
+ A call to this routine may be followed by calls to the routines:
+
+ F07FEF (DPOTRS) to solve AX=B;
+
+ F07FGF (DPOCON)(*) to estimate the condition number of A;
+
+ F07FJF (DPOTRI)(*) to compute the inverse of A.
+
+ The complex analogue of this routine is F07FRF (ZPOTRF)(*).
+
+ 9. Example
+
+ To compute the Cholesky factorization of the matrix A, where
+
+ ( 4.16 -3.12 0.56 -0.10)
+ (-3.12 5.03 -0.83 1.18)
+ A=( 0.56 -0.83 0.76 0.34).
+ (-0.10 1.18 0.34 1.18)
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}
+\begin{page}{manpageXXf07fef}{NAG On-line Documentation: f07fef}
+\beginscroll
+\begin{verbatim}
+
+
+
+ F07FEF(3NAG) Foundation Library (12/10/92) F07FEF(3NAG)
+
+
+
+ F07 -- Linear Equations (LAPACK) F07FEF
+ F07FEF -- NAG Foundation Library Routine Document
+
+ Note: Before using this routine, please read the Users' Note for
+ your implementation to check implementation-dependent details.
+ The symbol (*) after a NAG routine name denotes a routine that is
+ not included in the Foundation Library.
+
+ 1. Purpose
+
+ F07FEF (DPOTRS) solves a real symmetric positive-definite system
+ of linear equations with multiple right-hand sides, AX=B, where A
+ has been factorized by F07FDF (DPOTRF).
+
+ 2. Specification
+
+ SUBROUTINE F07FEF (UPLO, N, NRHS, A, LDA, B, LDB, INFO)
+ ENTRY UPLO, N, NRHS, A, LDA, B, LDB, INFO
+ INTEGER N, NRHS, LDA, LDB, INFO
+ DOUBLE PRECISION A(LDA,*), B(LDB,*)
+ CHARACTER*1 UPLO
+
+ The ENTRY statement enables the routine to be called by its
+ LAPACK name.
+
+ 3. Description
+
+ To solve a real symmetric positive-definite system of linear
+ equations AX=B, this routine must be preceded by a call to
+ F07FDF (DPOTRF) which computes the Cholesky factorization of A.
+ The solution X is computed by forward and backward substitution.
+
+ T
+ If UPLO = 'U', A=U U, where U is upper triangular; the solution X
+ T
+ is computed by solving U Y=B and then UX=Y.
+
+ T
+ If UPLO = 'L', A=LL , where L is lower triangular; the solution X
+ T
+ is computed by solving LY=B and then L X=Y.
+
+ 4. References
+
+ [1] Golub G H and Van Loan C F (1989) Matrix Computations (2nd
+ Edition). Johns Hopkins University Press, Baltimore,
+ Maryland.
+
+ 5. Parameters
+
+ 1: UPLO -- CHARACTER*1 Input
+ On entry: indicates whether the upper or lower triangular
+ part of A is stored and how A is factorized, as follows:
+ T
+ if UPLO = 'U', then A=U U where U is upper triangular;
+
+ T
+ if UPLO = 'L', then A=LL where L is lower triangular.
+ Constraint: UPLO = 'U' or 'L'.
+
+ 2: N -- INTEGER Input
+ On entry: n, the order of the matrix A. Constraint: N >= 0.
+
+ 3: NRHS -- INTEGER Input
+ On entry: r, the number of right-hand sides. Constraint:
+ NRHS >= 0.
+
+ 4: A(LDA,*) -- DOUBLE PRECISION array Input
+ Note: the second dimension of the array A must be at least
+ max(1,N).
+ On entry: the Cholesky factor of A, as returned by F07FDF
+ (DPOTRF).
+
+ 5: LDA -- INTEGER Input
+ On entry:
+ the first dimension of the array A as declared in the
+ (sub)program from which F07FEF is called.
+ Constraint: LDA >=max(1,N).
+
+ 6: B(LDB,*) -- DOUBLE PRECISION array Input/Output
+ Note: the second dimension of the array B must be at least
+ max(1,NRHS).
+ On entry: the n by r right-hand side matrix B.
+
+ 7: LDB -- INTEGER Input
+ On entry:
+ the first dimension of the array B as declared in the
+ (sub)program from which F07FEF is called.
+ Constraint: LDB >=max(1,N).
+
+ 8: INFO -- INTEGER Output
+ On exit: INFO = 0 unless the routine detects an error (see
+ Section 6).
+
+ 6. Error Indicators and Warnings
+
+ INFO < 0
+ If INFO = -i, the ith parameter has an illegal value. An
+ explanatory message is output, and execution of the program
+ is terminated.
+
+ 7. Accuracy
+
+ For each right-hand side vector b, the computed solution x is the
+ exact solution of a perturbed system of equations (A+E)x=b, where
+
+ T
+ |E|<=c(n)(epsilon)|U ||U| if UPLO = 'U',
+
+ T
+ |E|<=c(n)(epsilon)|L||L | if UPLO = 'L',
+
+ c(n) is a modest linear function of n, and (epsilon) is the
+ machine precision.
+
+ ^
+ If x is the true solution, then the computed solution x satisfies
+ a forward bound of the form
+
+ ^
+ ||x-x||
+ infty
+ ------------<=c(n)cond(A,x)(epsilon)
+ ||x||
+ infty
+
+ -1
+ where cond(A,x)=|||A ||A||x||| /||x|| <=
+ infty infty
+ -1
+ cond(A)=|||A ||A||| <=(kappa) (A). Note that cond(A,x)
+ infty infty
+ can be much smaller than cond(A).
+
+ Forward and backward error bounds can be computed by calling
+ F07FHF (DPORFS)(*), and an estimate for (kappa) (A) (
+ infty
+ =(kappa) (A)) can be obtained by calling F07FGF (DPOCON)(*).
+ 1
+
+ 8. Further Comments
+
+ The total number of floating-point operations is approximately
+ 2
+ 2n r.
+
+ This routine may be followed by a call to F07FHF (DPORFS)(*) to
+ refine the solution and return an error estimate.
+
+ The complex analogue of this routine is F07FSF (ZPOTRS)(*).
+
+ 9. Example
+
+ To compute the Cholesky factorization of the matrix A, where
+
+ ( 4.16 -3.12 0.56 -0.10)
+ (-3.12 5.03 -0.83 1.18)
+ A=( 0.56 -0.83 0.76 0.34).
+ (-0.10 1.18 0.34 1.18)
+
+ and
+
+ ( 8.70 8.30)
+ (-13.35 2.13)
+ B=( 1.89 1.61).
+ ( -4.14 5.00)
+
+ Here A is symmetric positive-definite and must first be
+ factorized by F07FDF (DPOTRF).
+
+ The example program is not reproduced here. The source code for
+ all example programs is distributed with the NAG Foundation
+ Library software and should be available on-line.
+
+\end{verbatim}
+\endscroll
+\end{page}