[ Previous |
Next |
Contents |
Glossary |
Home |
Search ]

*AIX Version 4.3 Base Operating System and Extensions Technical Reference, Volume 2*

## STBMV, DTBMV, CTBMV, or ZTBMV Subroutine

### Purpose

Performs matrix-vector operations using a triangular band matrix.

### Library

BLAS Library (**libblas.a**)

### FORTRAN Syntax

**SUBROUTINE STBMV(***UPLO***, ***TRANS***, ***DIAG***, ***N***,**
*K***, ***A***, ***LDA***, ***X***, ***INCX***)**
**INTEGER** *INCX***,***K***,***LDA***,***N*
**CHARACTER*1** *DIAG***,***TRANS***,***UPLO*
**REAL** *A***(***LDA***,*), ***X***(*)**

**SUBROUTINE DTBMV(***UPLO***, ***TRANS***, ***DIAG***, ***N***,**
*K***, ***A***, ***LDA***, ***X***, ***INCX***)**
**INTEGER** *INCX***,***K***,***LDA***,***N*
**CHARACTER*1** *DIAG***,***TRANS***,***UPLO*
**DOUBLE PRECISION** *A***(***LDA***,*), ***X***(*)**

**SUBROUTINE CTBMV(***UPLO***, ***TRANS***, ***DIAG***, ***N***,**
*K***, ***A***, ***LDA***, ***X***, ***INCX***)**
**INTEGER ***INCX***,***K***,***LDA***,***N*
**CHARACTER*1 ***DIAG***,***TRANS***,***UPLO*
**COMPLEX** *A***(***LDA***,*), ***X***(*)**

**SUBROUTINE ZTBMV(***UPLO***, ***TRANS***, ***DIAG***, ***N***,**
*K***, ***A***, ***LDA***, ***X***, ***INCX***)**
**INTEGER ***INCX***,***K***,***LDA***,***N*
**CHARACTER*1 ***DIAG***,***TRANS***,***UPLO*
**COMPLEX*16** *A***(***LDA***,*), ***X***(*)**

### Description

The **STBMV**, **DTBMV**, **CTBMV**, or **ZTBMV** subroutine performs one of the matrix-vector operations:

`x := ``A`` * x`

OR

`x := ``A``' * x`

where x is an *N* element vector and *A* is an *N* by *N* unit, or non-unit, upper or lower triangular band matrix, with ( *K* + 1 ) diagonals.

### Parameters

*UPLO* |
On entry, *UPLO *specifies whether the matrix is an upper or lower triangular matrix as follows:
*UPLO* = 'U' or 'u' |
*A* is an upper triangular matrix. |
*UPLO* = 'L' or 'l' |
*A* is a lower triangular matrix. |
Unchanged on exit. |

*TRANS* |
On entry, *TRANS* specifies the operation to be performed as follows:
*TRANS* = 'N' or 'n' |
x := *A ** x |
*TRANS* = 'T' or 't' |
x := *A*' * x |
*TRANS* = 'C' or 'c' |
x := *A*' * x |
Unchanged on exit. |

*DIAG* |
On entry, *DIAG* specifies whether or not *A* is unit triangular as follows:
*DIAG *= 'U' or 'u' |
*A *is assumed to be unit triangular. |
*DIAG* = 'N' or 'n' |
*A* is not assumed to be unit triangular. |
Unchanged on exit. |

*N* |
On entry, *N* specifies the order of the matrix *A*; *N* must be at least 0; unchanged on exit. |

*K* |
On entry with *UPLO* = 'U' or 'u', *K* specifies the number of superdiagonals of the matrix *A*; on entry with *UPLO* = 'L' or 'l', *K* specifies the number of subdiagonals of the matrix *A*. *K* must satisfy 0 .le. *K*; unchanged on exit. |

*A* |
An array of dimension ( *LDA*, *N* ). On entry with *UPLO *= 'U' or 'u', the leading ( *K* + 1 ) by *N* part of the array *A* must contain the upper triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( *K* + 1 ) of the array, the first superdiagonal starting at position 2 in row *K*, and so on. The top left *K* by *K* triangle of the array *A* is not referenced. The following program segment will transfer an upper triangular band matrix from conventional full matrix storage to band storage:
DO 20, J = 1, N
M = K + 1 - J
DO 10, I = MAX( 1, J - K ), J
A( M + I, J ) = matrix( I, J )
10 CONTINUE
20 CONTINUE |

DO 20, J = 1, N
M = 1 - J
DO 10, I = J, MIN( N, J + K )
A( M + I, J ) = matrix( I, J )
10 CONTINUE
20 CONTINUE

On entry with *UPLO* = 'L' or 'l', the leading ( *K* + 1 ) by *N* part of the array *A* must contain the lower triangular band part of the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row 1 of the array, the first subdiagonal starting at position 1 in row 2, and so on. The bottom right *K* by *K* triangle of the array *A* is not referenced. The following program segment will transfer a lower triangular band matrix from conventional full matrix storage to band storage:

When *DIAG *= 'U' or 'u' the elements of the array *A* corresponding to the diagonal elements of the matrix are not referenced, but are assumed to be unity; unchanged on exit.

*LDA* |
On entry, *LDA* specifies the first dimension of *A *as declared in the calling (sub) program; *LDA* must be at least ( *K* + 1 ); unchanged on exit. |

*X* |
A vector of dimension at least (1 + (*N*-1) * abs( *INCX* ) ); on entry, the incremented array *X *must contain the *N* element vector x; on exit, *X* is overwritten with the transformed vector x. |

*INCX* |
On entry, *INCX* specifies the increment for the elements of *X*; *INCX* must not be 0; unchanged on exit. |

[ Previous |
Next |
Contents |
Glossary |
Home |
Search ]