ssysvx(3)
NAME
- SSYSVX - use the diagonal pivoting factorization to com
- pute the solution to a real system of linear equations A * X = B,
SYNOPSIS
SUBROUTINE SSYSVX( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF,
IPIV, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK, IWORK, INFO
)
CHARACTER FACT, UPLO
INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N,
NRHS
REAL RCOND
INTEGER IPIV( * ), IWORK( * )
REAL A( LDA, * ), AF( LDAF, * ), B( LDB, *
), BERR( * ), FERR( * ), WORK( * ), X( LDX, * )
PURPOSE
- SSYSVX uses the diagonal pivoting factorization to compute
- the solution to a real system of linear equations A * X = B,
- where A is an N-by-N symmetric matrix and X and B are N-by-NRHS
- matrices.
- Error bounds on the solution and a condition estimate are
- also provided.
DESCRIPTION
The following steps are performed:
- 1. If FACT = 'N', the diagonal pivoting method is used to
- factor A.
The form of the factorization is
A = U * D * U**T, if UPLO = 'U', or
A = L * D * L**T, if UPLO = 'L', - where U (or L) is a product of permutation and unit up
- per (lower)
triangular matrices, and D is symmetric and block diag - onal with
1-by-1 and 2-by-2 diagonal blocks. - 2. If some D(i,i)=0, so that D is exactly singular, then
- the routine
returns with INFO = i. Otherwise, the factored form of - A is used
to estimate the condition number of the matrix A. If - the
reciprocal of the condition number is less than machine - precision,
INFO = N+1 is returned as a warning, but the routine - still goes on
to solve for X and compute error bounds as described - below.
- 3. The system of equations is solved for X using the fac
- tored form
of A. - 4. Iterative refinement is applied to improve the computed
- solution
matrix and calculate error bounds and backward error - estimates
for it.
ARGUMENTS
- FACT (input) CHARACTER*1
- Specifies whether or not the factored form of A
- has been supplied on entry. = 'F': On entry, AF and IPIV con
- tain the factored form of A. AF and IPIV will not be modified.
- = 'N': The matrix A will be copied to AF and factored.
- UPLO (input) CHARACTER*1
= 'U': Upper triangle of A is stored;
= 'L': Lower triangle of A is stored. - N (input) INTEGER
The number of linear equations, i.e., the order of - the matrix A. N >= 0.
- NRHS (input) INTEGER
The number of right hand sides, i.e., the number - of columns of the matrices B and X. NRHS >= 0.
- A (input) REAL array, dimension (LDA,N)The symmetric matrix A. If UPLO = 'U', the lead
- ing N-by-N upper triangular part of A contains the upper triangu
- lar part of the matrix A, and the strictly lower triangular part
- of A is not referenced. If UPLO = 'L', the leading N-by-N lower
- triangular part of A contains the lower triangular part of the
- matrix A, and the strictly upper triangular part of A is not ref
- erenced.
- LDA (input) INTEGER
The leading dimension of the array A. LDA >= - max(1,N).
- AF (input or output) REAL array, dimension (LDAF,N)
If FACT = 'F', then AF is an input argument and on - entry contains the block diagonal matrix D and the multipliers
- used to obtain the factor U or L from the factorization A =
- U*D*U**T or A = L*D*L**T as computed by SSYTRF.
- If FACT = 'N', then AF is an output argument and
- on exit returns the block diagonal matrix D and the multipliers
- used to obtain the factor U or L from the factorization A =
- U*D*U**T or A = L*D*L**T.
- LDAF (input) INTEGER
The leading dimension of the array AF. LDAF >= - max(1,N).
- IPIV (input or output) INTEGER array, dimension (N)
If FACT = 'F', then IPIV is an input argument and - on entry contains details of the interchanges and the block
- structure of D, as determined by SSYTRF. If IPIV(k) > 0, then
- rows and columns k and IPIV(k) were interchanged and D(k,k) is a
- 1-by-1 diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) <
- 0, then rows and columns k-1 and -IPIV(k) were interchanged and
- D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and IP
- IV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k)
- were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
- If FACT = 'N', then IPIV is an output argument and
- on exit contains details of the interchanges and the block struc
- ture of D, as determined by SSYTRF.
- B (input) REAL array, dimension (LDB,NRHS)
The N-by-NRHS right hand side matrix B. - LDB (input) INTEGER
The leading dimension of the array B. LDB >= - max(1,N).
- X (output) REAL array, dimension (LDX,NRHS)
If INFO = 0 or INFO = N+1, the N-by-NRHS solution - matrix X.
- LDX (input) INTEGER
The leading dimension of the array X. LDX >= - max(1,N).
- RCOND (output) REAL
The estimate of the reciprocal condition number of - the matrix A. If RCOND is less than the machine precision (in
- particular, if RCOND = 0), the matrix is singular to working pre
- cision. This condition is indicated by a return code of INFO >
- 0.
- FERR (output) REAL array, dimension (NRHS)The estimated forward error bound for each solu
- tion vector X(j) (the j-th column of the solution matrix X). If
- XTRUE is the true solution corresponding to X(j), FERR(j) is an
- estimated upper bound for the magnitude of the largest element in
- (X(j) - XTRUE) divided by the magnitude of the largest element in
- X(j). The estimate is as reliable as the estimate for RCOND, and
- is almost always a slight overestimate of the true error.
- BERR (output) REAL array, dimension (NRHS)
The componentwise relative backward error of each - solution vector X(j) (i.e., the smallest relative change in any
- element of A or B that makes X(j) an exact solution).
- WORK (workspace/output) REAL array, dimension (LWORK)
On exit, if INFO = 0, WORK(1) returns the optimal - LWORK.
- LWORK (input) INTEGER
The length of WORK. LWORK >= 3*N, and for best - performance LWORK >= N*NB, where NB is the optimal blocksize for
- SSYTRF.
- If LWORK = -1, then a workspace query is assumed;
- the routine only calculates the optimal size of the WORK array,
- returns this value as the first entry of the WORK array, and no
- error message related to LWORK is issued by XERBLA.
- IWORK (workspace) INTEGER array, dimension (N)
- INFO (output) INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an ille - gal value
> 0: if INFO = i, and i is
<= N: D(i,i) is exactly zero. The factorization - has been completed but the factor D is exactly singular, so the
- solution and error bounds could not be computed. RCOND = 0 is re
- turned. = N+1: D is nonsingular, but RCOND is less than machine
- precision, meaning that the matrix is singular to working preci
- sion. Nevertheless, the solution and error bounds are computed
- because there are a number of situations where the computed solu
- tion can be more accurate than the value of RCOND would suggest.
- LAPACK version 3.0 15 June 2000