Previous Next Contents Generated Index Doc Set Home



Solution to a Linear System in a Hermitian Matrix in Packed Storage (Expert Driver)

The subroutines described in this section solve a linear system AX = B for a Hermitian matrix A in packed storage and general matrices B and X. These subroutines also compute forward error bounds and backward error estimates for the solution, and estimate the condition number of the matrix A. Note that the simple driver xHPSV is also available.

Calling Sequence

CALL ZHPSVX 
(FACT, UPLO, N, NRHS, ZA, ZAF, IPIVOT, ZB, LDB, ZX, 
LDX, DRCOND, DFERR, DBERR, ZWORK, DWORK2, INFO)
CALL CHPSVX 
(FACT, UPLO, N, NRHS, CA, CAF, IPIVOT, CB, LDB, CX, 
LDX, SRCOND, SFERR, SBERR, CWORK, SWORK2, INFO)






void zhpsvx 
(char fact, char uplo, int n, int nrhs, doublecomplex 
*za, doublecomplex *zaf, int *ipivot, doublecomplex 
*zb, int ldb, doublecomplex *zx, int ldx, double 
*drcond, double *dferr, double *dberr, int *info)
void chpsvx 
(char fact, char uplo, int n, int nrhs, complex *ca, 
complex *caf, int *ipivot, complex *cb, int ldb, 
complex *cx, int ldx, float *srcond, float *sferr, 
float *sberr, int *info)

Arguments

FACT

Indicates whether or not the factored form of the matrix A is supplied on entry.

'F' or 'f'

On entry, AF and IPIVOT contain the factored form of A. A, AF, and IPIVOT will not be modified.

'N' or 'n'

On entry, the matrix A will be copied to AF and factored.

UPLO

Indicates whether xA contains the upper or lower triangle of the matrix. The legal values for UPLO are listed below. Any values not listed below are illegal.

'U' or 'u'

xA contains the upper triangle.

'L' or 'l'

xA contains the lower triangle.

N

Order of the matrix A. N 0.

NRHS

Number of right-hand sides, equal to the number of columns in the matrices B and X. NRHS 0.

xA

Upper or lower triangle of the matrix A.
The dimension of xA is (N × N + N) / 2.

xAF

The dimension of xAF is (N × N + N) / 2.
On entry, if FACT = 'F' or 'f' then AF contains the UDU or LDL factorization of A as computed by xHPTRF. Otherwise the entry value of AF is not used.
On exit, if FACT = 'N' or 'n' then AF contains the UDU or LDL factorization of A as computed by xHPTRF. Otherwise AF is unchanged.

IPIVOT

On entry, if FACT = 'F' or 'f', IPIVOT contains pivot indices as computed by xHPTRF. Otherwise the entry value is not used.
On exit, if FACT = 'N' or 'n', IPIVOT contains pivot indices as computed by xHPTRF. Otherwise IPIVOT is unchanged.

xB

On entry, the N×NRHS right-hand side matrix B.

LDB

Leading dimension of the array B as specified in a dimension or type statement. LDB max(1, N).

xX

On exit, the N×NRHS solution matrix for the original problem.

LDX

Leading dimension of the array X as specified in a dimension or type statement. LDX max(1, N).

xRCOND

On exit, an estimate of the reciprocal condition number of the matrix A after equilibration, if any, where the reciprocal condition number is defined to be 1 / (||A|| × ||A-1||). The reciprocal of the condition number is estimated instead of the condition number itself to avoid overflow or division by zero. If RCOND is less than machine precision (in particular, if RCOND = 0) then A is singular to working precision. In this case, INFO > 0 is returned and the solution and error bounds are not computed.

xFERR

On exit, the estimated forward error bound for each solution vector X(*, j) for 1 j NRHS. If X' is the true solution corresponding to
X(*, j) then FERR(j) is an upper bound on the magnitude of the largest element in X(*, j) - X' divided by the magnitude of the largest element in X(*, j).

xBERR

On exit, BERR(j) is the smallest relative change in any element of A or B(*, j) that makes X(*, j) an exact solution to AX(*, j) = B(*, j) for 1 j NRHS.

xWORK

Scratch array with a dimension of 2 × N.

xWORK2

Scratch array with a dimension of N.

INFO

On exit:

INFO = 0

Subroutine completed normally.

INFO < 0

The ith argument, where i = |INFO|, had an illegal value.

1 INFO N

D(i,i), where i = INFO, is exactly zero and D is therefore singular. The UDU or LDL factorization of A has been completed, but the solution and error bounds could not be computed.

INFO = N+1

D is nonsingular, but RCOND is less than machine precision. The UDU or LDL factorization of A has been completed, but the solution and error bounds could not be computed.

Sample Program




      PROGRAM TEST
      IMPLICIT NONE
C
      DOUBLE PRECISION  ZERO
      INTEGER           LDB, LDWORK, LDWRK2, LDX, LENGTA, N, NRHS
      PARAMETER        (N = 3)
      PARAMETER        (LDB = N)
      PARAMETER        (LDWORK = 2 * N)
      PARAMETER        (LDWRK2 = N)
      PARAMETER        (LDX = N)
      PARAMETER        (LENGTA = (N * N + N) / 2)
      PARAMETER        (NRHS = 1)
      PARAMETER        (ZERO = 0.0D0)
C
      DOUBLE PRECISION  BERR(NRHS), FERR(NRHS), RCOND
      DOUBLE PRECISION  WORK2(LDWRK2)
      COMPLEX*16        A(LENGTA), AF(LENGTA), B(LDB,NRHS)
      COMPLEX*16        WORK(LDWORK), X(LDX,NRHS)
      INTEGER           ICOL, INFO, IPIVOT(N), IROW
C
      EXTERNAL          ZHPSVX
      INTRINSIC         ABS, CMPLX, CONJG, DBLE
C
C     Initialize the array A to store the coefficient array A
C     shown below.  Initialize the array B to store the right
C     hand side vector b shown below.
C
C          1    1-i   1-i         4+i
C     A = 1+i    3    3-i     b = 4+6i
C         1+i   3+i    5          4+7i
C
      DATA A / (1.0D0,0.0D0), (1.0D0,-1.0D0), (3.0D0,0.0D0),
     $         (1.0D0,-1.0D0), (3.0D0,-1.0D0), (5.0D0,0.0D0) /
      DATA B / (4.0D0,1.0D0), (4.0D0,6.0D0), (4.0D0,7.0D0) /
C
C     Print the initial value of the arrays.
C
      PRINT 1000
      PRINT 1010, CMPLX(DBLE(A(1)),ZERO), A(2), A(4)
      PRINT 1010, CONJG(A(2)), CMPLX(DBLE(A(3)),ZERO), A(5)
      PRINT 1010, CONJG(A(4)), CONJG(A(5)), CMPLX(DBLE(A(6)),ZERO)
      PRINT 1020
      DO 130, ICOL = 1, NRHS
        DO 120, IROW = 1, N
          PRINT 1010, B(IROW,ICOL)
  120   CONTINUE
  130 CONTINUE
C
C     Compute the solution.
C
      CALL ZHPSVX ('NOT FACTORED A', 'UPPER TRIANGLE OF A STORED',
     $             N, NRHS, A, AF, IPIVOT, B, LDB, X, LDX,
     $             RCOND, FERR, BERR, WORK, WORK2, INFO)
      IF (INFO .LT. 0) THEN
        PRINT 1030, ABS(INFO)
        STOP 1
      ELSE IF (INFO .GT. 0) THEN
        PRINT 1040
        STOP 2
      END IF
C
C     Print the solution and error bounds.
C
      PRINT 1050
      DO 210, ICOL = 1, NRHS
        DO 200, IROW = 1, N
          PRINT 1010, X(IROW,ICOL)
  200   CONTINUE
  210 CONTINUE
      PRINT 1060, RCOND
      DO 220, IROW = 1, NRHS
        PRINT 1070, IROW, BERR(IROW)
        PRINT 1080, IROW, FERR(IROW)
  220 CONTINUE
C
 1000 FORMAT (1X, 'A:')
 1010 FORMAT (1X, 10(: 2X, '(', F4.1, ',', F4.1, ')'))
 1020 FORMAT (/1X, 'b:')
 1030 FORMAT (1X, 'Illegal argument to ZHPSVX, argument #', I2)
 1040 FORMAT (1X, 'A is singular to working precision.')
 1050 FORMAT (/1X, 'x:')
 1060 FORMAT (/1X,
     $        'Estimated reciprocal condition number of A: ',
     $        F5.3)
 1070 FORMAT (/1X, 'Backward error for system #', I2, ': ', E12.5)
 1080 FORMAT (1X, 'Forward error for system #', I2, ':  ', E12.5)
C
      END
 

Sample Output

 
 A:
   ( 1.0, 0.0)  ( 1.0,-1.0)  ( 1.0,-1.0)
   ( 1.0, 1.0)  ( 3.0, 0.0)  ( 3.0,-1.0)
   ( 1.0, 1.0)  ( 3.0, 1.0)  ( 5.0, 0.0)



 b:
   ( 4.0, 1.0)
   ( 4.0, 6.0)
   ( 4.0, 7.0)



 x:
   ( 1.0, 0.0)
   ( 0.0, 2.0)
   ( 1.0, 0.0)



 Estimated reciprocal condition number of A: 0.011



 Backward error for system # 1:  0.74015E-16
 Forward error for system # 1:   0.40366E-13






Previous Next Contents Generated Index Doc Set Home