Previous Next Contents Generated Index Doc Set Home



Product of a Triangular Matrix in Banded Storage and a Vector

The subroutines described in this section compute one of the following results for a triangular matrix A in banded storage and a vector y:



Calling Sequence

CALL DTBMV 
(UPLO, TRANSA, DIAG, N, NDIAG, DA, LDA, DY, INCY)
CALL STBMV 
(UPLO, TRANSA, DIAG, N, NDIAG, SA, LDA, SY, INCY)
CALL ZTBMV 
(UPLO, TRANSA, DIAG, N, NDIAG, ZA, LDA, ZY, INCY)
CALL CTBMV 
(UPLO, TRANSA, DIAG, N, NDIAG, CA, LDA, CY, INCY)






void dtbmv 
(char uplo, char trans, char diag, int n, int ndiag, 
double *da, int lda, double *dx, int incx)
void stbmv 
(char uplo, char trans, char diag, int n, int ndiag, 
float *sa, int lda, float *sx, int incx)
void ztbmv 
(char uplo, char trans, char diag, int n, int ndiag, 
doublecomplex *za, int lda, doublecomplex *zx, int 
incx)
void ctbmv 
(char uplo, char trans, char diag, int n, int ndiag, 
complex *ca, int lda, complex *cx, int incx)

Arguments

UPLO

Indicates whether the values in a matrix reside in the upper or lower triangle of the array in which the matrix is stored. The legal values for UPLO are listed below. Any value not listed below is illegal.

'L' or 'l'

Only the lower triangle of the array will be referenced.

'U' or 'u'

Only the upper triangle of the array will be referenced.

TRANSA

Indicates how to use the matrix stored in the array argument. The legal values for TRANSA are listed below. Any value not listed below is illegal.

'N' or 'n'

Use the matrix as it is stored in the array.

'T' or 't'

Use the transpose of the matrix.

'C' or 'c'

Use the conjugate transpose of the matrix.

DIAG

Indicates whether or not a triangular matrix is unit triangular. If the matrix is unit triangular then none of the diagonal elements of the array will be accessed. The legal values for DIAG are listed below. Any value not listed below is illegal.

'N' or 'n'

The matrix is not unit triangular.

'U' or 'u'

The matrix is unit triangular.

N

Size of a matrix with N rows and N columns. N 0.

NDIAG

Bandwidth of a matrix with NDIAG superdiagonals or subdiagonals. N-1 NDIAG 0 but if N = 0 then NDIAG = 0.

xA

Two-dimensional array that contains the input matrix.

LDA

Leading dimension of the array A as specified in a dimension or type statement. LDA NDIAG + 1.

xY

Y and INCY describe a vector of length N.

On entry, an input vector.

On exit, a result vector.

INCY

Scalar that contains the storage spacing between successive elements of the vector Y. INCY 0.

If INCY is one then elements of the vector are contiguous in memory. INCY may take on values besides 1 to allow the programmer to extract from a matrix a vector that is not stored in contiguous memory locations.

If Y is a one-dimensional array and INCY = -1 then the array will be accessed in reverse order.

If Y is a two-dimensional array and INCY = LDA then the vector will be a row of the array.

If Y is a two-dimensional array and INCY = LDA+1 then the vector will be a diagonal of the array.

Sample Program

 
      PROGRAM TEST
      IMPLICIT NONE
C
      INTEGER           LDA, N, NDIAG
      PARAMETER        (N = 4)
      PARAMETER        (NDIAG = 2)
      PARAMETER        (LDA = NDIAG + 1)
C
      DOUBLE PRECISION  A(LDA,N), X(N)
      INTEGER           I, J
C
      EXTERNAL          DTBMV
      INTRINSIC         DBLE
C
C     Initialize the array A to store in triangular banded form
C     the matrix A shown below.  Initialize the array X to store
C     the vector x shown below.
C
C         1                 4
C     A = 2  4          x = 3
C         3  5  7           2
C            6  8  9        1
C
      DATA A /1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0,
     $        7.0D0, 8.0D0, 8.8D8, 9.0D0, 8.8D8, 8.8D8 /
C
      DO 10, I = 1, N
        X(I) = DBLE (5 - I)
   10 CONTINUE
      PRINT 1000
      PRINT 1010, A(1,1)
      PRINT 1010, A(2,1), A(1,2)
      PRINT 1010, A(3,1), A(2,2), A(1,3)
      PRINT 1020,         A(3,2), A(2,3), A(1,4)
      PRINT 1030
      DO 20, I = 1, LDA
        PRINT 1010, (A(I,J), J = 1, N)
   20 CONTINUE
      PRINT 1040
      PRINT 1050, X
      CALL DTBMV ('LOWER TRIANGULAR A', 'NOT TRANSPOSED A',
     $            'NOT UNIT DIAGONAL A', N, NDIAG, A, LDA, X, 1)
      PRINT 1060
      PRINT 1050, X
C
 1000 FORMAT (1X, 'A in full form:')
 1010 FORMAT (1X, 4(2X, F5.1))
 1020 FORMAT (1X, 7X, 3(2X, F5.1))
 1030 FORMAT (/1X, 'A in banded form:  (* in unused elements)')
 1040 FORMAT (/1X, 'Original x vector:')
 1050 FORMAT (1X, 2X, F5.1)
 1060 FORMAT (/1X, 'Ax:')
C
      END
 

Sample Output

 
 A in full form:
     1.0
     2.0    4.0
     3.0    5.0    7.0
            6.0    8.0    9.0



 A in banded form:  (* in unused elements)
     1.0    4.0    7.0    9.0
     2.0    5.0    8.0  *****
     3.0    6.0  *****  *****



 Original x vector:
     4.0
     3.0
     2.0
     1.0



 Ax:
     4.0
    20.0
    41.0
    43.0






Previous Next Contents Generated Index Doc Set Home