Contents


NAME

     sptsvx - use the factorization A = L*D*L**T to  compute  the
     solution to a real system of linear equations A*X = B, where
     A is  an  N-by-N  symmetric  positive  definite  tridiagonal
     matrix and X and B are N-by-NRHS matrices

SYNOPSIS

     SUBROUTINE SPTSVX(FACT, N, NRHS, D, E, DF, EF, B, LDB, X,
           LDX, RCOND, FERR, BERR, WORK, INFO)

     CHARACTER * 1 FACT
     INTEGER N, NRHS, LDB, LDX, INFO
     REAL RCOND
     REAL D(*), E(*), DF(*), EF(*), B(LDB,*), X(LDX,*),  FERR(*),
     BERR(*), WORK(*)

     SUBROUTINE SPTSVX_64(FACT, N, NRHS, D, E, DF, EF, B, LDB,
           X, LDX, RCOND, FERR, BERR, WORK, INFO)

     CHARACTER * 1 FACT
     INTEGER*8 N, NRHS, LDB, LDX, INFO
     REAL RCOND
     REAL D(*), E(*), DF(*), EF(*), B(LDB,*), X(LDX,*),  FERR(*),
     BERR(*), WORK(*)

  F95 INTERFACE
     SUBROUTINE PTSVX(FACT, [N], [NRHS], D, E, DF, EF, B, [LDB],
            X, [LDX], RCOND, FERR, BERR, [WORK], [INFO])

     CHARACTER(LEN=1) :: FACT
     INTEGER :: N, NRHS, LDB, LDX, INFO
     REAL :: RCOND
     REAL, DIMENSION(:) :: D, E, DF, EF, FERR, BERR, WORK
     REAL, DIMENSION(:,:) :: B, X

     SUBROUTINE PTSVX_64(FACT, [N], [NRHS], D, E, DF, EF, B,
            [LDB], X, [LDX], RCOND, FERR, BERR, [WORK], [INFO])

     CHARACTER(LEN=1) :: FACT
     INTEGER(8) :: N, NRHS, LDB, LDX, INFO
     REAL :: RCOND
     REAL, DIMENSION(:) :: D, E, DF, EF, FERR, BERR, WORK
     REAL, DIMENSION(:,:) :: B, X

  C INTERFACE
     #include <sunperf.h>
     void sptsvx(char fact, int n, int nrhs, float *d, float  *e,
               float *df, float *ef, float *b, int ldb, float *x,
               int ldx, float *rcond, float *ferr,  float  *berr,
               int *info);

     void sptsvx_64(char fact, long n, long nrhs, float *d, float
               *e,  float  *df,  float  *ef,  float *b, long ldb,
               float *x, long ldx,  float  *rcond,  float  *ferr,
               float *berr, long *info);

PURPOSE

     sptsvx uses the factorization A = L*D*L**T  to  compute  the
     solution to a real system of linear equations A*X = B, where
     A is  an  N-by-N  symmetric  positive  definite  tridiagonal
     matrix and X and B are N-by-NRHS matrices.

     Error bounds on the solution and a  condition  estimate  are
     also provided.

     The following steps are performed:

     1. If FACT = 'N', the matrix A is factored as A =  L*D*L**T,
     where L
        is a unit lower bidiagonal matrix and D is diagonal.  The
        factorization can also be regarded as having the form
        A = U**T*D*U.

     2. If the leading i-by-i principal  minor  is  not  positive
     definite,
        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)
               Specifies whether or not the factored  form  of  A
               has  been supplied on entry.  = 'F':  On entry, DF
               and EF contain the factored form of A.  D, E,  DF,
               and EF will not be modified.  = 'N':  The matrix A
               will be copied to DF and EF and factored.

     N (input) The order of the matrix A.  N >= 0.

     NRHS (input)
               The number of right hand sides, i.e.,  the  number
               of columns of the matrices B and X.  NRHS >= 0.

     D (input) The n diagonal elements of the tridiagonal  matrix
               A.

     E (input) The (n-1) subdiagonal elements of the  tridiagonal
               matrix A.

     DF (input or output)
               If FACT = 'F', then DF is an input argument and on
               entry  contains  the  n  diagonal  elements of the
               diagonal matrix D from the L*D*L**T  factorization
               of  A.   If FACT = 'N', then DF is an output argu-
               ment and on exit contains the n diagonal  elements
               of the diagonal matrix D from the L*D*L**T factor-
               ization of A.

     EF (input or output)
               If FACT = 'F', then EF is an input argument and on
               entry  contains  the (n-1) subdiagonal elements of
               the unit bidiagonal factor  L  from  the  L*D*L**T
               factorization  of A.  If FACT = 'N', then EF is an
               output argument and on  exit  contains  the  (n-1)
               subdiagonal elements of the unit bidiagonal factor
               L from the L*D*L**T factorization of A.

     B (input) The N-by-NRHS right hand side matrix B.

     LDB (input)
               The leading dimension of  the  array  B.   LDB  >=
               max(1,N).
     X (output)
               If INFO = 0 of INFO = N+1, the N-by-NRHS  solution
               matrix X.

     LDX (input)
               The leading dimension of  the  array  X.   LDX  >=
               max(1,N).

     RCOND (output)
               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 precision.  This condition is indicated
               by a return code of INFO > 0.

     FERR (output)
               The forward error bound for each  solution  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).

     BERR (output)
               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)
               dimension(2*N)

     INFO (output)
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an ille-
               gal value
               > 0:  if INFO = i, and i is
               <= N:  the leading minor of order i of  A  is  not
               positive  definite, so the factorization could not
               be completed, and the solution has not  been  com-
               puted.  RCOND  =  0 is returned.  = N+1: U is non-
               singular, but RCOND is less  than  machine  preci-
               sion, meaning that the matrix is singular to work-
               ing precision.   Nevertheless,  the  solution  and
               error  bounds  are  computed  because  there are a
               number of situations where the  computed  solution
               can be more accurate than the value of RCOND would
               suggest.