This chapter provides routines for the solution of linear least squares problems, eigenvalue problems and singular value problems, as well as associated computations. It provides routines for:
solution of linear least squares problems
solution of symmetric eigenvalue problems
solution of nonsymmetric eigenvalue problems
solution of singular value problems
solution of generalized linear least squares problems
solution of generalized symmetric-definite eigenvalue problems
solution of generalized nonsymmetric eigenvalue problems
solution of generalized singular value problems
matrix factorizations associated with the above problems
estimating condition numbers of eigenvalue and eigenvector problems
estimating the numerical rank of a matrix
solution of the Sylvester matrix equation
Routines are provided for both real and complex data.
For a general introduction to the solution of linear least squares problems, you should turn first to Chapter F04. The decision trees, at the end of Chapter F04, direct you to the most appropriate routines in Chapters F04 or F08. Chapters F04 and F08 contain Black Box (or driver) routines which enable standard linear least squares problems to be solved by a call to a single routine.
For a general introduction to eigenvalue and singular value problems, you should turn first to Chapter F02. The decision trees, at the end of Chapter F02, direct you to the most appropriate routines in Chapters F02 or F08. Chapters F02 and F08 contain Black Box (or driver) routines which enable standard types of problem to be solved by a call to a single routine. Often routines in Chapter F02 call Chapter F08 routines to perform the necessary computational tasks.
The routines in this chapter (Chapter F08) handle only dense, band, tridiagonal and Hessenberg matrices (not matrices with more specialised structures, or general sparse matrices). The tables in Section 3 and the decision trees in Section 4 direct you to the most appropriate routines in Chapter F08.
The routines in this chapter have all been derived from the LAPACK project (see Anderson et al. (1999)). They have been designed to be efficient on a wide range of high-performance computers, without compromising efficiency on conventional serial machines.
2Background to the Problems
This section is only a brief introduction to the numerical solution of linear least squares problems, eigenvalue and singular value problems. Consult a standard textbook for a more thorough discussion, for example Golub and Van Loan (2012).
2.1Linear Least Squares Problems
The linear least squares problem is
where is an by matrix, is a given element vector and is an -element solution vector.
In the most usual case and , so that has full rank and in this case the solution to problem (1) is unique; the problem is also referred to as finding a least squares solution to an overdetermined system of linear equations.
When and , there are an infinite number of solutions which exactly satisfy . In this case it is often useful to find the unique solution which minimizes , and the problem is referred to as finding a minimum norm solution to an underdetermined system of linear equations.
In the general case when we may have – in other words, may be rank-deficient – we seek the minimum norm least squares solution which minimizes both and .
This chapter (Chapter F08) contains driver routines to solve these problems with a single call, as well as computational routines that can be combined with routines in Chapter F07 to solve these linear least squares problems.
Chapter F04 also contains Black Box routines to solve these linear least squares problems in standard cases.
The next two sections discuss the factorizations that can be used in the solution of linear least squares problems.
2.2Orthogonal Factorizations and Least Squares Problems
A number of routines are provided for factorizing a general rectangular by matrix , as the product of an orthogonal matrix (unitary if complex) and a triangular (or possibly trapezoidal) matrix.
A real matrix is orthogonal if ; a complex matrix is unitary if . Orthogonal or unitary matrices have the important property that they leave the -norm of a vector invariant, so that
if is orthogonal or unitary. They usually help to maintain numerical stability because they do not amplify rounding errors.
Orthogonal factorizations are used in the solution of linear least squares problems. They may also be used to perform preliminary steps in the solution of eigenvalue or singular value problems, and are useful tools in the solution of a number of other problems.
The most common, and best known, of the factorizations is the factorization given by
where is an by upper triangular matrix and is an by orthogonal (or unitary) matrix. If is of full rank , then is nonsingular. It is sometimes convenient to write the factorization as
which reduces to
where consists of the first columns of , and the remaining columns.
If , is trapezoidal, and the factorization can be written
where is upper triangular and is rectangular.
The factorization can be used to solve the linear least squares problem (1) when and is of full rank, since
and is an -element vector. Then is the solution of the upper triangular system
The residual vector is given by
The residual sum of squares may be computed without forming explicitly, since
factorization is given by
where is by lower triangular, is by orthogonal (or unitary), consists of the first rows of , and the remaining rows.
The factorization of is essentially the same as the factorization of ( if is complex), since
The factorization may be used to find a minimum norm solution of an underdetermined system of linear equations where is by with and has rank . The solution is given by
2.2.3 factorization with column pivoting
To solve a linear least squares problem (1) when is not of full rank, or the rank of is in doubt, we can perform either a factorization with column pivoting or a singular value decomposition.
factorization with column pivoting is given by
where and are as before and is a (real) permutation matrix, chosen (in general) so that
and moreover, for each ,
If we put
where is the leading by upper triangular sub-matrix of then, in exact arithmetic, if , the whole of the sub-matrix in rows and columns to would be zero. In numerical computation, the aim must be to determine an index , such that the leading sub-matrix is well-conditioned, and is negligible, so that
The so-called basic solution to the linear least squares problem (1) can be obtained from this factorization as
where consists of just the first elements of .
2.2.4Complete orthogonal factorization
The factorization with column pivoting does not enable us to compute a minimum norm solution to a rank-deficient linear least squares problem, unless . However, by applying for further orthogonal (or unitary) transformations from the right to the upper trapezoidal matrix , can be eliminated:
This gives the complete orthogonal factorization
from which the minimum norm solution can be obtained as
2.2.5Updating a factorization
Section 2.2.1 gave the forms of the factorization of an by matrix for the two cases and . Taking first the case , the least squares solution of
is the solution of
If the original system is now augmented by the addition of rows so that we require the solution of
where is by , then this is equivalent to finding the least squares solution of
This now requires the factorization of the by triangular-rectangular matrix .
For the case , the least squares solution of the augmented system reduces to
where is pentagonal.
In both cases can be written as a special case of a triangular-pentagonal matrix consisting of an upper triangular part on top of a rectangular part which is itself on top of a trapezoidal part. In the first case there is no trapezoidal part, in the second case a zero upper triangular part can be added, and more generally the two cases can be combined.
The and factorizations are given by
The factorizations are less commonly used than either the or factorizations described above, but have applications in, for example, the computation of generalized factorizations.
2.3The Singular Value Decomposition
The singular value decomposition (SVD) of an by matrix is given by
where and are orthogonal (unitary) and is an by diagonal matrix with real diagonal elements, , such that
The are the singular values of and the first columns of and are the left and right singular vectors of . The singular values and singular vectors satisfy
where and are the th columns of and respectively.
The computation proceeds in the following stages.
1.The matrix is reduced to bidiagonal form if is real ( if is complex), where and are orthogonal (unitary if is complex), and is real and upper bidiagonal when and lower bidiagonal when , so that is nonzero only on the main diagonal and either on the first superdiagonal (if ) or the first subdiagonal (if ).
2.The SVD of the bidiagonal matrix is computed as , where and are orthogonal and is diagonal as described above. The singular vectors of are then and .
If , it may be more efficient to first perform a factorization of , and then compute the SVD of the by matrix , since if and , then the SVD of is given by .
Similarly, if , it may be more efficient to first perform an factorization of .
This chapter supports three primary algorithms for computing the SVD of a bidiagonal matrix. They are:
(i)the divide and conquer algorithm;
(iii)eigenpairs of an associated symmetric tridiagonal matrix.
The divide and conquer algorithm is much faster than the algorithm if singular vectors of large matrices are required. If only a relatively small number (%) of singular values and associated singular vectors are required, then the third algorithm listed above is likely to be faster than the divide-and-conquer algorithm.
2.4The Singular Value Decomposition and Least Squares Problems
The SVD may be used to find a minimum norm solution to a (possibly) rank-deficient linear least squares problem (1). The effective rank, , of can be determined as the number of singular values which exceed a suitable threshold. Let be the leading by sub-matrix of , and be the matrix consisting of the first columns of . Then the solution is given by
where consists of the first elements of .
2.5Generalized Linear Least Squares Problems
The simple type of linear least squares problem described in Section 2.1 can be generalized in various ways.
1.Linear least squares problems with equality constraints:
where is by and is by , with . The equations may be regarded as a set of equality constraints on the problem of minimizing . Alternatively the problem may be regarded as solving an overdetermined system of equations
where some of the equations (those involving ) are to be solved exactly, and the others (those involving ) are to be solved in a least squares sense. The problem has a unique solution on the assumptions that has full row rank and the matrix has full column rank . (For linear least squares problems with inequality constraints, refer to Chapter E04.)
2.General Gauss–Markov linear model problems:
where is by and is by , with . When , the problem reduces to an ordinary linear least squares problem. When is square and nonsingular, it is equivalent to a weighted linear least squares problem:
The problem has a unique solution on the assumptions that has full column rank , and the matrix has full row rank . Unless is diagonal, for numerical stability it is generally preferable to solve a weighted linear least squares problem as a general Gauss–Markov linear model problem.
2.6Generalized Orthogonal Factorization and Generalized Linear Least Squares Problems
The generalized (GQR) factorization of an by matrix and an by matrix is given by the pair of factorizations
where and are respectively by and by orthogonal matrices (or unitary matrices if and are complex). has the form
where is upper triangular. has the form
where or is upper triangular.
Note that if is square and nonsingular, the GQR factorization of and implicitly gives the factorization of the matrix :
without explicitly computing the matrix inverse or the product (remembering that the inverse of an invertible upper triangular matrix and the product of two upper triangular matrices is an upper triangular matrix).
The GQR factorization can be used to solve the general (Gauss–Markov) linear model problem (GLM) (see Section 2.5, but note that and are dimensioned differently there as by and by respectively). Using the GQR factorization of and , we rewrite the equation as
We partition this as
The GLM problem is solved by setting
from which we obtain the desired solutions
The generalized (GRQ) factorization of an by matrix and a by matrix is given by the pair of factorizations
where and are respectively by and by orthogonal matrices (or unitary matrices if and are complex). has the form
where or is upper triangular. has the form
where is upper triangular.
Note that if is square and nonsingular, the GRQ factorization of and implicitly gives the factorization of the matrix :
without explicitly computing the matrix or the product (remembering that the inverse of an invertible upper triangular matrix and the product of two upper triangular matrices is an upper triangular matrix).
The GRQ factorization can be used to solve the linear equality-constrained least squares problem (LSE) (see Section 2.5). We use the GRQ factorization of and (note that and have swapped roles), written as
We write the linear equality constraints as
which we partition as:
Therefore is the solution of the upper triangular system
We partition this expression as:
To solve the LSE problem, we set
which gives as the solution of the upper triangular system
Finally, the desired solution is given by
2.6.3Generalized Singular Value Decomposition (GSVD)
The generalized (or quotient) singular value decomposition of an by matrix and a by matrix is given by the pair of factorizations
The matrices in these factorizations have the following properties:
– is by , is by , is by , and all three matrices are orthogonal. If and are complex, these matrices are unitary instead of orthogonal, and should be replaced by in the pair of factorizations.
– is by , upper triangular and nonsingular. is by (in other words, the is an by zero matrix). The integer is the rank of , and satisfies .
– is by , is by , both are real, non-negative and diagonal, and . Write and , where and lie in the interval from to . The ratios are called the generalized singular values of the pair , . If , then the generalized singular value is infinite.
and have the following detailed structures, depending on whether or . In the first case, , then
Here is the rank of , , and are diagonal matrices satisfying , and is nonsingular. We may also identify , , for ,
, and , for . Thus, the first generalized singular values are infinite, and the remaining generalized singular values are finite.
In the second case, when ,
Again, is the rank of , , and are diagonal matrices satisfying , and is nonsingular, and we may identify , , for , , , , for and . Thus, the first generalized singular values are infinite, and the remaining generalized singular values are finite.
Here are some important special cases of the generalized singular value decomposition. First, if is square and nonsingular, then and the generalized singular value decomposition of and is equivalent to the singular value decomposition of , where the singular values of are equal to the generalized singular values of the pair , :
Second, for the matrix , where
if the columns of are orthonormal, then , and the generalized singular value decomposition of and is equivalent to the CS (Cosine–Sine) decomposition of :
Third, the generalized eigenvalues and eigenvectors of can be expressed in terms of the generalized singular value decomposition: Let
Therefore, the columns of are the eigenvectors of , and ‘nontrivial’ eigenvalues are the squares of the generalized singular values (see also Section 2.8). ‘Trivial’ eigenvalues are those corresponding to the leading columns of , which span the common null space of and . The ‘trivial eigenvalues’ are not well defined.
2.6.4The Full CS Decomposition of Orthogonal Matrices
In Section 2.6.3 the CS (Cosine-Sine) decomposition of an orthogonal matrix partitioned into two submatrices and was given by
The full CS decomposition of an by orthogonal matrix partitions into four submatrices and factorizes as
where, is a by submatrix (which implies the dimensions of , and ); , , and are orthogonal matrices of dimensions , , and respectively; is the by single-diagonal matrix
is the by single-diagonal matrix
is the by single-diagonal matrix
and, is the by single-diagonal matrix
where and the missing zeros remind us that either the column or the row is missing. The by diagonal matrices and are such that .
This is equivalent to the simultaneous singular value decomposition of the four submatrices , , and .
2.7Symmetric Eigenvalue Problems
The symmetric eigenvalue problem is to find the eigenvalues, , and corresponding eigenvectors, , such that
For the Hermitian eigenvalue problem we have
For both problems the eigenvalues are real.
When all eigenvalues and eigenvectors have been computed, we write
where is a diagonal matrix whose diagonal elements are the eigenvalues, and is an orthogonal (or unitary) matrix whose columns are the eigenvectors. This is the classical spectral factorization of .
The basic task of the symmetric eigenproblem routines is to compute values of and, optionally, corresponding vectors for a given matrix . This computation proceeds in the following stages.
1.The real symmetric or complex Hermitian matrix is reduced to real tridiagonal form
. If is real symmetric this decomposition is with orthogonal and symmetric tridiagonal. If is complex Hermitian, the decomposition is with unitary and , as before, real symmetric tridiagonal.
2.Eigenvalues and eigenvectors of the real symmetric tridiagonal matrix are computed. If all eigenvalues and eigenvectors are computed, this is equivalent to factorizing as , where is orthogonal and is diagonal. The diagonal entries of are the eigenvalues of , which are also the eigenvalues of , and the columns of are the eigenvectors of ; the eigenvectors of are the columns of , so that ( when is complex Hermitian).
This chapter supports four primary algorithms for computing eigenvalues and eigenvectors of real symmetric matrices and complex Hermitian matrices. They are:
(i)the divide-and-conquer algorithm;
(iii)bisection followed by inverse iteration;
(iv)the Relatively Robust Representation (RRR).
The divide-and-conquer algorithm is generally more efficient than the traditional algorithm for computing all eigenvalues and eigenvectors, but the RRR algorithm tends to be fastest of all. For further information and references see Anderson et al. (1999).
This section is concerned with the solution of the generalized eigenvalue problems , , and , where and are real symmetric or complex Hermitian and is positive definite. Each of these problems can be reduced to a standard symmetric eigenvalue problem, using a Cholesky factorization of as either or ( or in the Hermitian case).
With , we have
Hence the eigenvalues of are those of , where is the symmetric matrix and . In the complex case is Hermitian with and .
Table 1 summarises how each of the three types of problem may be reduced to standard form , and how the eigenvectors of the original problem may be recovered from the eigenvectors of the reduced problem. The table applies to real problems; for complex problems, transposed matrices must be replaced by conjugate-transposes.
Type of problem
Recovery of eigenvectors
Reduction of generalized symmetric-definite eigenproblems to standard problems
When the generalized symmetric-definite problem has been reduced to the corresponding standard problem , this may then be solved using the routines described in the previous section. No special routines are needed to recover the eigenvectors of the generalized problem from the eigenvectors of the standard problem, because these computations are simple applications of Level 2 or Level 3 BLAS
(see Chapter F06).
2.9Packed Storage for Symmetric Matrices
Routines which handle symmetric matrices are usually designed so that they use either the upper or lower triangle of the matrix; it is not necessary to store the whole matrix. If either the upper or lower triangle is stored conventionally in the upper or lower triangle of a two-dimensional array, the remaining elements of the array can be used to store other useful data. However, that is not always convenient, and if it is important to economize on storage, the upper or lower triangle can be stored in a one-dimensional array of length ; that is, the storage is almost halved.
This storage format is referred to as packed storage; it is described in Section 3.3.2 in the F07 Chapter Introduction.
Routines designed for packed storage are usually less efficient, especially on high-performance computers, so there is a trade-off between storage and efficiency.
A band matrix is one whose elements are confined to a relatively small number of subdiagonals or superdiagonals on either side of the main diagonal. Algorithms can take advantage of bandedness to reduce the amount of work and storage required. The storage scheme for band matrices is described in Section 3.3.4 in the F07 Chapter Introduction.
If the problem is the generalized symmetric definite eigenvalue problem and the matrices and are additionally banded, the matrix as defined in Section 2.8 is, in general, full. We can reduce the problem to a banded standard problem by modifying the definition of thus:
where is an orthogonal matrix chosen to ensure that has bandwidth no greater than that of .
A further refinement is possible when and are banded, which halves the amount of work required to form . Instead of the standard Cholesky factorization of as or , we use a split Cholesky factorization , where
with upper triangular and lower triangular of order approximately ; has the same bandwidth as .
2.11Nonsymmetric Eigenvalue Problems
The nonsymmetric eigenvalue problem is to find the eigenvalues, , and corresponding eigenvectors, , such that
More precisely, a vector as just defined is called a right eigenvector of , and a vector satisfying
is called a left eigenvector of .
A real matrix may have complex eigenvalues, occurring as complex conjugate pairs.
This problem can be solved via the Schur factorization of , defined in the real case as
where is an orthogonal matrix and is an upper quasi-triangular matrix with by and by diagonal blocks, the by blocks corresponding to complex conjugate pairs of eigenvalues of . In the complex case, the Schur factorization is
where is unitary and is a complex upper triangular matrix.
The columns of are called the Schur vectors. For each (), the first columns of form an orthonormal basis for the invariant subspace corresponding to the first eigenvalues on the diagonal of . Because this basis is orthonormal, it is preferable in many applications to compute Schur vectors rather than eigenvectors. It is possible to order the Schur factorization so that any desired set of eigenvalues occupy the leading positions on the diagonal of .
The two basic tasks of the nonsymmetric eigenvalue routines are to compute, for a given matrix , all values of and, if desired, their associated right eigenvectors and/or left eigenvectors , and the Schur factorization.
These two basic tasks can be performed in the following stages.
1.A general matrix is reduced to upper Hessenberg form
which is zero below the first subdiagonal. The reduction may be written with orthogonal if is real, or with unitary if is complex.
2.The upper Hessenberg matrix is reduced to Schur form , giving the Schur factorization (for real) or (for complex). The matrix (the Schur vectors of ) may optionally be computed as well. Alternatively may be postmultiplied into the matrix determined in stage , to give the matrix , the Schur vectors of . The eigenvalues are obtained from the diagonal elements or diagonal blocks of .
3.Given the eigenvalues, the eigenvectors may be computed in two different ways. Inverse iteration can be performed on to compute the eigenvectors of , and then the eigenvectors can be multiplied by the matrix in order to transform them to eigenvectors of . Alternatively the eigenvectors of can be computed, and optionally transformed to those of or if the matrix or is supplied.
The accuracy with which eigenvalues can be obtained can often be improved by balancing a matrix. This is discussed further in Section 2.14.6 below.
2.12Generalized Nonsymmetric Eigenvalue Problem
The generalized nonsymmetric eigenvalue problem is to find the eigenvalues, , and corresponding eigenvectors, , such that
More precisely, a vector as just defined is called a right eigenvector of the matrix pair , and a vector satisfying
is called a left eigenvector of the matrix pair .
If is singular then the problem has one or more infinite eigenvalues
, corresponding to . Note that if is nonsingular, then the equivalent problem is perfectly well defined and an infinite eigenvalue corresponds to . To deal with both finite (including zero) and infinite eigenvalues, the routines in this chapter do not compute explicitly, but rather return a pair of numbers such that if
and if and then . is always returned as real and non-negative. Of course, computationally an infinite eigenvalue may correspond to a small rather than an exact zero.
For a given pair the set of all the matrices of the form is called a matrix pencil and and are said to be an eigenvalue and eigenvector of the pencil . If and are both singular and share a common null space then
so that the pencil is singular for all . In other words any can be regarded as an eigenvalue. In exact arithmetic a singular pencil will have for some . Computationally if some pair is small then the pencil is singular, or nearly singular, and no reliance can be placed on any of the computed eigenvalues. Singular pencils can also manifest themselves in other ways; see, in particular, Sections 18.104.22.168 and 22.214.171.124 of Anderson et al. (1999) for further details.
The generalized eigenvalue problem can be solved via the generalized Schur factorization of the pair defined in the real case as
where and are orthogonal, is upper triangular with non-negative diagonal elements and is upper quasi-triangular with by and by diagonal blocks, the by blocks corresponding to complex conjugate pairs of eigenvalues. In the complex case, the generalized Schur factorization is
where and are unitary and and are upper triangular, with having real non-negative diagonal elements. The columns of and are called respectively the left and right generalized Schur vectors and span pairs of deflating subspaces of and , which are a generalization of invariant subspaces.
It is possible to order the generalized Schur factorization so that any desired set of eigenvalues correspond to the leading positions on the diagonals of the pair .
The two basic tasks of the generalized nonsymmetric eigenvalue routines are to compute, for a given pair , all values of and, if desired, their associated right eigenvectors and/or left eigenvectors , and the generalized Schur factorization.
These two basic tasks can be performed in the following stages.
1.The matrix pair is reduced to generalized upper Hessenberg form ,
where is upper Hessenberg (zero below the first subdiagonal) and is upper triangular. The reduction may be written as
in the real case with and orthogonal, and
in the complex case with and unitary.
2.The generalized upper Hessenberg form is reduced to the generalized
Schur form using the generalized Schur factorization , in the real case with and orthogonal, and in the complex case. The generalized Schur vectors of are given by , . The eigenvalues are obtained from the diagonal elements (or blocks) of the pair .
3.Given the eigenvalues, the eigenvectors of the pair can be computed, and optionally transformed to those of or .
The accuracy with which eigenvalues can be obtained can often be improved by balancing a matrix pair. This is discussed further in Section 2.14.8 below.
2.13The Sylvester Equation and the Generalized Sylvester Equation
The Sylvester equation is a matrix equation of the form
where , , and are given matrices with being by , an by matrix and , and the solution matrix , by matrices. The solution of a special case of this equation occurs in the computation of the condition number for an invariant subspace, but a combination of routines in this chapter allows the solution of the general Sylvester equation.
Routines are also provided for solving a special case of the generalized Sylvester equations
where , and are given matrix pairs, and and are the solution matrices.
2.14Error and Perturbation Bounds and Condition Numbers
In this section we discuss the effects of rounding errors in the solution process and the effects of uncertainties in the data, on the solution to the problem. A number of the routines in this chapter return information, such as condition numbers, that allow these effects to be assessed. First we discuss some notation used in the error bounds of later sections.
The bounds usually contain the factor (or ), which grows as a function of the matrix dimension (or matrix dimensions and ). It measures how errors can grow as a function of the matrix dimension, and represents a potentially different function for each problem. In practice, it usually grows just linearly; is often true, although generally only much weaker bounds can be actually proved. We normally describe as a ‘modestly growing’ function of . For detailed derivations of various , see Golub and Van Loan (2012) and Wilkinson (1965).
For linear equation (see Chapter F07) and least squares solvers, we consider bounds on the relative error in the computed solution , where is the true solution. For eigenvalue problems we consider bounds on the error in the th computed eigenvalue , where is the true th eigenvalue. For singular value problems we similarly consider bounds .
Bounding the error in computed eigenvectors and singular vectors
is more subtle because these vectors are not unique: even though we restrict and , we may still multiply them by arbitrary constants of absolute value . So to avoid ambiguity we bound the angular difference between and the true vector , so that
Here is in the standard range: . When is small, we can choose a constant with absolute value so that .
In addition to bounds for individual eigenvectors, bounds can be obtained for the spaces spanned by collections of eigenvectors. These may be much more accurately determined than the individual eigenvectors which span them. These spaces are called invariant subspaces in the case of eigenvectors, because if is any vector in the space, is also in the space, where is the matrix. Again, we will use angle to measure the difference between a computed space and the true space :
may be computed as follows. Let be a matrix whose columns are orthonormal and . Similarly let be an orthonormal matrix with columns spanning . Then
Finally, we remark on the accuracy of the bounds when they are large. Relative errors like and angular errors like are only of interest when they are much less than . Some stated bounds are not strictly true when they are close to , but rigorous bounds are much more complicated and supply little extra information in the interesting case of small errors. These bounds are indicated by using the symbol , or ‘approximately less than’, instead of the usual . Thus, when these bounds are close to 1 or greater, they indicate that the computed answer may have no significant digits at all, but do not otherwise bound the error.
A number of routines in this chapter return error estimates and/or condition number estimates directly. In other cases Anderson et al. (1999) gives code fragments to illustrate the computation of these estimates, and a number of the Chapter F08 example programs, for the driver routines, implement these code fragments.
2.14.1Least squares problems
The conventional error analysis of linear least squares problems goes as follows. The problem is to find the minimizing . Let be the solution computed using one of the methods described above. We discuss the most common case, where is overdetermined (i.e., has more rows than columns) and has full rank.
Then the computed solution has a small normwise backward error. In other words minimizes , where
and is a modestly growing function of and is the machine precision. Let , , and . Then if is small enough, the error is bounded by
If is rank-deficient, the problem can be regularized by treating all singular values less than a user-specified threshold as exactly zero. See Golub and Van Loan (2012) for error bounds in this case, as well as for the underdetermined case.
The solution of the overdetermined, full-rank problem may also be characterised as the solution of the linear system of equations
The computed SVD, , is nearly the exact SVD of , i.e., is the true SVD, so that and are both orthogonal, where , , and . Here is a modestly growing function of and and is the machine precision. Each computed singular value differs from the true by an amount satisfying the bound
Thus large singular values (those near ) are computed to high relative accuracy and small ones may not be.
The angular difference between the computed left singular vector and the true satisfies the approximate bound
is the absolute gap between and the nearest other singular value. Thus, if is close to other singular values, its corresponding singular vector may be inaccurate. The same bound applies to the computed right singular vector and the true vector . The gaps may be easily obtained from the computed singular values.
Let be the space spanned by a collection of computed left singular vectors , where is a subset of the integers from to . Let be the corresponding true space. Then
is the absolute gap between the singular values in and the nearest other singular value. Thus, a cluster of close singular values which is far away from any other singular value may have a well determined space even if its individual singular vectors are ill-conditioned. The same bound applies to a set of right singular vectors .
In the special case of bidiagonal matrices, the singular values and singular vectors may be computed much more accurately (see Demmel and Kahan (1990)). A bidiagonal matrix has nonzero entries only on the main diagonal and the diagonal immediately above it (or immediately below it). Reduction of a dense matrix to bidiagonal form can introduce additional errors, so the following bounds for the bidiagonal case do not apply to the dense case.
Using the routines in this chapter, each computed singular value of a bidiagonal matrix is accurate to nearly full relative accuracy, no matter how tiny it is, so that
The computed left singular vector has an angular error at most about
is the relative gap between and the nearest other singular value. The same bound applies to the right singular vector and . Since the relative gap may be much larger than the absolute gap, this error bound may be much smaller than the previous one. The relative gaps may be easily obtained from the computed singular values.
2.14.3The symmetric eigenproblem
The usual error analysis of the symmetric eigenproblem is as follows (see Parlett (1998)).
The computed eigendecomposition is nearly the exact eigendecomposition of , i.e., is the true eigendecomposition so that is orthogonal, where and and is a modestly growing function of and is the machine precision. Each computed eigenvalue differs from the true by an amount satisfying the bound
Thus large eigenvalues (those near ) are computed to high relative accuracy and small ones may not be.
The angular difference between the computed unit eigenvector and the true satisfies the approximate bound
if is small enough, where
is the absolute gap between and the nearest other eigenvalue. Thus, if is close to other eigenvalues, its corresponding eigenvector may be inaccurate. The gaps may be easily obtained from the computed eigenvalues.
Let be the invariant subspace spanned by a collection of eigenvectors , where is a subset of the integers from to . Let be the corresponding true subspace. Then
is the absolute gap between the eigenvalues in and the nearest other eigenvalue. Thus, a cluster of close eigenvalues which is far away from any other eigenvalue may have a well determined invariant subspace even if its individual eigenvectors are ill-conditioned.
In the special case of a real symmetric tridiagonal matrix , routines in this chapter can compute the eigenvalues and eigenvectors much more accurately. See Anderson et al. (1999) for further details.
The three types of problem to be considered are , and . In each case and are real symmetric (or complex Hermitian) and is positive definite. We consider each case in turn, assuming that routines in this chapter are used to transform the generalized problem to the standard symmetric problem, followed by the solution of the symmetric problem. In all cases
is the absolute gap between and the nearest other eigenvalue.
1.. The computed eigenvalues can differ from the true eigenvalues by an amount
The angular difference between the computed eigenvector and the true eigenvector is
2. or . The computed eigenvalues can differ from the true eigenvalues by an amount
The angular difference between the computed eigenvector and the true eigenvector is
These error bounds are large when is ill-conditioned with respect to inversion ( is large). It is often the case that the eigenvalues and eigenvectors are much better conditioned than indicated here. One way to get tighter bounds is effective when the diagonal entries of differ widely in magnitude, as for example with a graded matrix.
be a diagonal matrix. Then replace by and by in the above bounds.
2. or . Let be a diagonal matrix. Then replace by and by in the above bounds.
The nonsymmetric eigenvalue problem is more complicated than the symmetric eigenvalue problem. In this section, we just summarise the bounds. Further details can be found in Anderson et al. (1999).
We let be the th computed eigenvalue and the th true eigenvalue. Let be the corresponding computed right eigenvector, and the true right eigenvector (so ). If is a subset of the integers from to , we let denote the average of the selected eigenvalues:
, and similarly for . We also let denote the subspace spanned by ; it is called a right invariant subspace because if is any vector in then is also in . is the corresponding computed subspace.
The algorithms for the nonsymmetric eigenproblem are normwise backward stable: they compute the exact eigenvalues, eigenvectors and invariant subspaces of slightly perturbed matrices , where . Some of the bounds are stated in terms of and others in terms of ; one may use for either quantity.
Routines are provided so that, for each () pair the two values and , or for a selected subset of eigenvalues the values and can be obtained, for which the error bounds in Table 2 are true for sufficiently small , (which is why they are called asymptotic):
Asymptotic error bounds for the nonsymmetric eigenproblem
If the problem is ill-conditioned, the asymptotic bounds may only hold for extremely small . The global error bounds of Table 3 are guaranteed to hold for all :
Holds for all
Global error bounds for the nonsymmetric eigenproblem
2.14.6Balancing and condition for the nonsymmetric eigenproblem
There are two preprocessing steps one may perform on a matrix in order to make its eigenproblem easier. The first is permutation, or reordering the rows and columns to make more nearly upper triangular (closer to Schur form): , where is a permutation matrix. If is permutable to upper triangular form (or close to it), then no floating-point operations (or very few) are needed to reduce it to Schur form. The second is scaling by a diagonal matrix to make the rows and columns of more nearly equal in norm: . Scaling can make the matrix norm smaller with respect to the eigenvalues, and so possibly reduce the inaccuracy contributed by roundoff (see Chapter 11 of Wilkinson and Reinsch (1971)). We refer to these two operations as balancing.
Permuting has no effect on the condition numbers or their interpretation as described previously. Scaling, however, does change their interpretation and further details can be found in Anderson et al. (1999).
2.14.7The generalized nonsymmetric eigenvalue problem
The algorithms for the generalized nonsymmetric eigenvalue problem are normwise backward stable: they compute the exact eigenvalues (as the pairs ), eigenvectors and deflating subspaces of slightly perturbed pairs , where
Asymptotic and global error bounds can be obtained, which are generalizations of those given in Tables 2 and 3. See Section 4.11 of Anderson et al. (1999) for details. Routines are provided to compute estimates of reciprocal conditions numbers for eigenvalues and eigenspaces.
2.14.8Balancing the generalized eigenvalue problem
As with the standard nonsymmetric eigenvalue problem, there are two preprocessing steps one may perform on a matrix pair in order to make its eigenproblem easier; permutation and scaling, which together are referred to as balancing, as indicated in the following two steps.
1.The balancing routine first attempts to permute and to block upper triangular form by a similarity transformation:
where is a permutation matrix, , , and are upper triangular. Then the diagonal elements of the matrix and are generalized eigenvalues of . The rest of the generalized eigenvalues are given by the matrix pair . Subsequent operations to compute the eigenvalues of need only be applied to the matrix ; this can save a significant amount of work if is smaller than the original matrix pair . If no suitable permutation exists (as is often the case), then there is no gain in efficiency or accuracy.
2.The balancing routine applies a diagonal similarity transformation to , to make the rows and columns of as close as possible in the norm:
This transformation usually improves the accuracy of computed generalized eigenvalues and eigenvectors. However, there are exceptional occasions when this transformation increases the norm of the pencil; in this case accuracy could be lower with diagonal balancing.
Error bounds for other problems such as the generalized linear least squares problem and generalized singular value decomposition can be found in Anderson et al. (1999).
2.15Block Partitioned Algorithms
A number of the routines in this chapter use what is termed a block partitioned algorithm. This means that at each major step of the algorithm a block of rows or columns is updated, and much of the computation is performed by matrix-matrix operations on these blocks. These matrix-matrix operations make efficient use of computer memory and are key to achieving high performance. See Golub and Van Loan (2012) or Anderson et al. (1999) for more about block partitioned algorithms.
The performance of a block partitioned algorithm varies to some extent with the block size – that is, the number of rows or columns per block. This is a machine-dependent constant, which is set to a suitable value when the Library is implemented on each range of machines. Block size affects the amount of workspace that should be supplied to a particular routine. This is discussed in Section 3.4.3.
3Recommendations on Choice and Use of Available Routines
The tables in the following sub-sections show the routines which are provided for performing different computations on different types of matrices. Each entry in the table gives the NAG routine name and the LAPACK double precision name(see Section 3.2).
Black box (or driver) routines are provided for the solution of most problems. In a number of cases there are simple drivers, which just return the solution to the problem, as well as expert drivers, which return additional information, such as condition number estimates, and may offer additional facilities such as balancing. The following sub-sections give tables for the driver routines.
126.96.36.199Linear least squares problems (LLS)
solve LLS using or factorization
solve LLS using complete orthogonal factorization
solve LLS using SVD
solve LLS using divide-and-conquer SVD
It is possible to solve problems by calling two or more routines in sequence. Some common sequences of routines are indicated in the tables in the following sub-sections; an asterisk () against a routine name means that the sequence of calls is illustrated in the example program for that routine.
Routines are provided for factorization (with and without column pivoting), and for , and factorizations (without pivoting only), of a general real or complex rectangular matrix. A routine is also provided for the factorization of a real or complex upper trapezoidal matrix. (LAPACK refers to this as the factorization.)
The factorization routines do not form the matrix explicitly, but represent it as a product of elementary reflectors (see Section 3.3.6). Additional routines are provided to generate all or part of explicitly if it is required, or to apply in its factored form to another matrix (specifically to compute one of the matrix products , , or with replaced by if and are complex).
Routines are provided to reduce a general real or complex rectangular matrix to real bidiagonal form by an orthogonal transformation (or by a unitary transformation if is complex). Different routines allow a full matrix to be stored conventionally (see Section 3.3.1), or a band matrix to use band storage (see Section 3.3.4 in the F07 Chapter Introduction).
The routines for reducing full matrices do not form the matrix or explicitly; additional routines are provided to generate all or part of them, or to apply them to another matrix, as with the routines for orthogonal factorizations. Explicit generation of or is required before using the bidiagonal algorithm to compute left or right singular vectors of .
The routines for reducing band matrices have options to generate or if required.
Further routines are provided to compute all or part of the singular value decomposition of a real bidiagonal matrix; the same routines can be used to compute the singular value decomposition of a real or complex matrix that has been reduced to bidiagonal form.
Where , the first stage should be preceeded by a factorization with the remaining stages operating on the resultant matrix (see Section 188.8.131.52). The left singular vectors obtained must then be premultiplied by to obtain the left singular vectors of the original matrix. Similarly, if , then an initial factorization and a final post-multiplication by on the right singular vectors should be performed, with the above listed stages operating on the matrix .
Given the singular values, f08flf is provided to compute the reciprocal condition numbers for the left or right singular vectors of a real or complex matrix.
To compute the singular values and vectors of a rectangular matrix, as described in Section 2.3, use the following sequence of calls:
Routines are provided to compute the generalized SVD of a real or complex matrix pair in upper trapezoidal form. Routines are also provided to reduce a general real or complex matrix pair to the required upper trapezoidal form.
Routines are provided for the full CS decomposition of orthogonal and unitary matrices expressed as by partitions of submatrices. For real orthogonal matrices the CS decomposition is performed by f08raf, while for unitary matrices the equivalent routine is f08rnf.
184.108.40.206Symmetric eigenvalue problems
Routines are provided to reduce a real symmetric or complex Hermitian matrix to real tridiagonal form by an orthogonal similarity transformation (or by a unitary transformation if is complex). Different routines allow a full matrix to be stored conventionally (see Section 3.3.1 in the F07 Chapter Introduction) or in packed storage (see Section 3.3.2 in the F07 Chapter Introduction); or a band matrix to use band storage (see Section 3.3.4 in the F07 Chapter Introduction).
The routines for reducing full matrices do not form the matrix explicitly; additional routines are provided to generate , or to apply it to another matrix, as with the routines for orthogonal factorizations. Explicit generation of is required before using the algorithm to find all the eigenvectors of ; application of to another matrix is required after eigenvectors of have been found by inverse iteration, in order to transform them to eigenvectors of .
The routines for reducing band matrices have an option to generate if required.
Given the eigenvalues, f08flf is provided to compute the reciprocal condition numbers for the eigenvectors of a real symmetric or complex Hermitian matrix.
A variety of routines are provided to compute eigenvalues and eigenvectors of the real symmetric tridiagonal matrix , some computing all eigenvalues and eigenvectors, some computing selected eigenvalues and eigenvectors. The same routines can be used to compute eigenvalues and eigenvectors of a real symmetric or complex Hermitian matrix which has been reduced to tridiagonal form.
Eigenvalues and eigenvectors of real symmetric tridiagonal matrices:
The original (non-reduced) matrix is Real Symmetric or Complex Hermitian
Routines are provided for reducing each of the problems , or to an equivalent standard eigenvalue problem . Different routines allow the matrices to be stored either conventionally or in packed storage. The positive definite matrix must first be factorized using a routine from Chapter F07. There is also a routine which reduces the problem where and are banded, to an equivalent banded standard eigenvalue problem; this uses a split Cholesky factorization for which a routine in Chapter F08 is provided.
If eigenvectors are computed, the eigenvectors of the equivalent standard problem must be transformed back to those of the original generalized problem, as indicated in Section 2.8; routines from
may be used for this.
220.127.116.11Nonsymmetric eigenvalue problems
Routines are provided to reduce a general real or complex matrix to upper Hessenberg form by an orthogonal similarity transformation (or by a unitary transformation if is complex).
These routines do not form the matrix explicitly; additional routines are provided to generate , or to apply it to another matrix, as with the routines for orthogonal factorizations. Explicit generation of is required before using the algorithm on to compute the Schur vectors; application of to another matrix is needed after eigenvectors of have been computed by inverse iteration, in order to transform them to eigenvectors of .
Routines are also provided to balance the matrix before reducing it to Hessenberg form, as described in Section 2.14.6. Companion routines are required to transform Schur vectors or eigenvectors of the balanced matrix to those of the original matrix.
Routines are provided to compute the eigenvalues and all or part of the Schur factorization of an upper Hessenberg matrix. Eigenvectors may be computed either from the upper Hessenberg form by inverse iteration, or from the Schur form by back-substitution; these approaches are equally satisfactory for computing individual eigenvectors, but the latter may provide a more accurate basis for a subspace spanned by several eigenvectors.
Additional routines estimate the sensitivities of computed eigenvalues and eigenvectors, as discussed in Section 2.14.5.
Eigenvalues and Schur factorization ( algorithm)
Eigenvectors from Hessenberg form (inverse iteration)
Finally routines are provided for reordering the Schur factorization, so that eigenvalues appear in any desired order on the diagonal of the Schur form. The routines f08qffandf08qtf simply swap two diagonal elements or blocks, and may need to be called repeatedly to achieve a desired order. The routines f08qgfandf08quf perform the whole reordering process for the important special case where a specified cluster of eigenvalues is to appear at the top of the Schur form; if the Schur vectors are reordered at the same time, they yield an orthonormal basis for the invariant subspace corresponding to the specified cluster of eigenvalues. These routines can also compute the sensitivities of the cluster of eigenvalues and the invariant subspace.
Reorder Schur factorization
Reorder Schur factorization, find basis for invariant subspace and estimate sensitivities
Routines are provided to reduce a real or complex matrix pair ,
where is general and is upper triangular, to generalized upper
Hessenberg form by orthogonal transformations ,
(or by unitary transformations ,
in the complex case). These routines can optionally return and/or . Note that to transform a general matrix pair to the form a factorization of () should first be performed and the matrix obtained as (see Section 18.104.22.168 above).
Routines are also provided to balance a general matrix pair before reducing it to generalized Hessenberg form, as described in Section 2.14.8. Companion routines are provided to transform vectors of the balanced pair to those of the original matrix pair.
Routines are provided to compute the eigenvalues (as the pairs ) and all or part of the generalized Schur factorization of a generalized upper Hessenberg matrix pair. Eigenvectors may be computed from the generalized Schur form by back-substitution.
Additional routines estimate the sensitivities of computed eigenvalues and eigenvectors.
Eigenvalues and generalized Schur factorization
Finally, routines are provided for reordering the generalized Schur factorization so that eigenvalues appear in any desired order on the diagonal of the generalized Schur form. f08yffandf08ytf simply swap two diagonal elements or blocks, and may need to be called repeatedly to achieve a desired order. f08ygfandf08yuf perform the whole reordering process for the important special case where a specified cluster of eigenvalues is to appear at the top of the generalized Schur form; if the Schur vectors are reordered at the same time, they yield an orthonormal basis for the deflating subspace corresponding to the specified cluster of eigenvalues. These routines can also compute the sensitivities of the cluster of eigenvalues and the deflating subspace.
Reorder generalized Schur factorization
Reorder generalized Schur factorization, find basis for deflating subspace and estimate sensitivites
22.214.171.124The Sylvester equation and the generalized Sylvester equation
Routines are provided to solve the real or complex Sylvester equation , where and are upper quasi-triangular if real, or upper triangular if complex. To solve the general form of the Sylvester equation in which and are general square matrices, and must be reduced to upper (quasi-) triangular form by the Schur factorization, using routines described in Section 126.96.36.199. For more details, see the documents for the routines listed below.
Routines are also provided to solve the real or complex generalized Sylvester equations
where the pairs and are in generalized Schur form. To solve the general form of the generalized Sylvester equation in which and are general matrix pairs, and must first be reduced to generalized Schur form.
As well as the NAG routine name (beginning F08), the tables in Section 3.1 show the LAPACK routine names in double precision.
The routines may be called either by their NAG or LAPACK names. When using the NAG Library, the double precision form of the LAPACK name must be used (beginning with D- or Z-).
References to Chapter F08 routines in the manual normally include the LAPACK double precision names, for example f08aef. The LAPACK routine names follow a simple
scheme (which is similar to that used for the BLAS in Chapter F06).
Each name has the structure XYYZZZ, where the components have the following meanings:
–the initial letter X indicates the data type (real or complex) and precision:
– real, single precision (in Fortran 77, REAL)
– real, double precision (in Fortran 77, DOUBLE PRECISION)
– complex, single precision (in Fortran 77, COMPLEX)
– complex, double precision (in Fortran 77, COMPLEX*16 or DOUBLE COMPLEX)
–the second and third letters YY indicate the type of the matrix or matrix pair (and in some cases the storage scheme):
– general band
– general pair ( may be triangular)
– (complex) Hermitian band
– generalized upper Hessenberg
– Hermitian (packed storage)
– upper Hessenberg
– (real) orthogonal (packed storage)
– (real) orthogonal
– symmetric or Hermitian positive definite tridiagonal
– (real) symmetric band
– symmetric (packed storage)
– (real) symmetric tridiagonal
– triangular pair (one may be quasi-triangular)
– triangular (or quasi-triangular)
– (complex) unitary
– (complex) unitary (packed storage)
–the last three letters ZZZ indicate the computation performed. For example, QRF is a factorization.
Thus the routine dgeqrf performs a factorization of a real general
matrix; the corresponding routine for a complex general matrix is zgeqrf.
3.3Matrix Storage Schemes
In this chapter the following storage schemes are used for matrices:
–conventional storage in a two-dimensional array;
–packed storage for symmetric or Hermitian matrices;
–packed storage for orthogonal or unitary matrices;
–band storage for general, symmetric or Hermitian band matrices;
–storage of bidiagonal, symmetric or Hermitian tridiagonal matrices in two one-dimensional arrays.
These storage schemes are compatible with those used in
Chapters F06 and F07,
but different schemes for packed, band and tridiagonal storage are used in a few older routines in Chapters F01, F02, F03 and F04.
Please see Section 3.3.1 in the F07 Chapter Introduction for full details.
Please see Section 3.3.2 in the F07 Chapter Introduction for full details.
Please see Section 3.3.4 in the F07 Chapter Introduction for full details.
3.3.4Tridiagonal and bidiagonal matrices
A symmetric tridiagonal or bidiagonal matrix is stored in two one-dimensional arrays, one of length containing the diagonal elements, and one of length containing the off-diagonal elements. (Older routines in Chapter F02 store the off-diagonal elements in elements of a vector of length .)
3.3.5Real diagonal elements of complex matrices
Please see Section 3.3.6 in the F07 Chapter Introduction for full details.
3.3.6Representation of orthogonal or unitary matrices
A real orthogonal or complex unitary matrix (usually denoted ) is often represented in the NAG Library as a product of elementary reflectors – also referred to as elementary Householder matrices (usually denoted ). For example,
You need not be aware of the details, because routines are provided to work with this representation, either to generate all or part of explicitly, or to multiply a given matrix by or ( in the complex case) without forming explicitly.
Nevertheless, the following further details may occasionally be useful.
An elementary reflector (or elementary Householder matrix) of order is a unitary matrix of the form
where is a scalar, and is an -element vector, with ; is often referred to as the Householder vector. Often has several leading or trailing zero elements, but for the purpose of this discussion assume that has no such special structure.
There is some redundancy in the representation , which can be removed in various ways. The representation used in Chapter F08 and in LAPACK (which differs from those used in some of the routines in
Chapters F01, F02, F04 and F06)
sets ; hence need not be stored. In real arithmetic, , except that implies .
In complex arithmetic, may be complex, and satisfies and . Thus a complex is not Hermitian (as it is in other representations), but it is unitary, which is the important property. The advantage of allowing to be complex is that, given an arbitrary complex vector can be computed so that
. This is useful, for example, when reducing a complex Hermitian matrix to real symmetric tridiagonal form, or a complex rectangular matrix to real bidiagonal form.
Most routines in this chapter have one or more option arguments, of type CHARACTER. The descriptions in Section 5 of the routine documents refer only to upper case values (for example or ); however in every case, the corresponding lower case characters may be supplied (with the same meaning). Any other value is illegal.
A longer character string can be passed as the actual argument, making the calling program more readable, but only the first character is significant.
(This is a feature of Fortran 77.) For example:
It is permissible for the problem dimensions (for example, m or n) to be passed as zero, in which case the computation (or part of it) is skipped. Negative dimensions are regarded as an error.
3.4.3Length of work arrays
A number of routines implementing block algorithms require workspace sufficient to hold one block of rows or columns of the matrix if they are to achieve optimum levels of performance – for example, workspace of size , where is the optimal block size. In such cases, the actual declared length of the work array must be passed as a separate argument lwork, which immediately follows work in the argument-list.
The blocked routines in this chapter allow you to perform a workspace query. In this case the routine only calculates the optimal size of the work array, and returns this value as the first entry of the work array. You are strongly encouraged to perform such a query before using a particular routine. The routine will still perform correctly when less workspace is provided: it simply uses the largest block size allowed by the amount of workspace supplied, as long as this is likely to give better performance than the unblocked algorithm.
If lwork indicates that there is insufficient workspace to perform the unblocked algorithm, this is regarded as an illegal value of lwork, and is treated like any other illegal argument value (see Section 3.4.4).
3.4.4Error-handling and the Diagnostic Argument INFO
Routines in this chapter do not use the usual NAG Library error-handling mechanism, involving the argument IFAIL. Instead they have a diagnostic argument INFO. (Thus they preserve complete compatibility with the LAPACK specification.)
Whereas IFAIL is an Input/Output argument and must be set before calling a routine, INFO is purely an Output argument and need not be set before entry.
INFO indicates the success or failure of the computation, as follows:
: successful termination;
: failure in the course of computation, control returned to the calling program.
If the routine document specifies that the routine may terminate with , then it is essential to test info on exit from the routine. (This corresponds to a soft failure in terms of the usual NAG error-handling terminology.) No error message is output.
All routines check that input arguments such as n or lda or option arguments of type CHARACTER have permitted values. If an illegal value of the th argument is detected, info is set to , a message is output, and execution of the program is terminated. (This corresponds to a hard failure in the usual NAG terminology.) In some implementations, especially when linking to vendor versions of LAPACK, execution of the program may continue, in which case, it is essential to test info on exit from the routine.
3.5Normalizing Output Vectors
In cases where a routine computes a set of orthogonal or unitary vectors, e.g., eigenvectors or an orthogonal matrix factorization, it is possible for these vectors to differ between implementations, but still be correct. Under a strict normalization that enforces uniqueness of solution, these different solutions can be shown to be the same under that normalization. For example, an eigenvector is computed such that . However, the vector , where is a scalar such that , is also an eigenvector. So for symmetric eigenproblems where eigenvectors are real valued, , or ; and for complex eigenvectors, can lie anywhere on the unit circle on the complex plane, .
Another example is in the computation of the singular valued decomposition of a matrix. Consider the factorization
where is a diagonal matrix with elements on the unit circle. Then and are corresponding left and right singular vectors of for any such choice of .
The example programs for routines in Chapter F08 take care to perform post-processing normalizations, in such cases as those highlighted above, so that a unique set of results can be displayed over many implementations of the NAG Library (see Section 10 in f08yxf). Similar care should be taken to obtain unique vectors and matrices when calling routines in Chapter F08, particularly when these are used in equivalence tests.
The following decision trees are principally for the computation (general purpose) routines. See Section 188.8.131.52 for tables of the driver (black box) routines.
Note: the routines for band matrices only handle the problem ; the other routines handle all three types of problems (, or ) except that, if the problem is and eigenvectors are required, f06phf must be used instead of f06plfandf06yff instead of f06yjf.