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

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

## SGBMV, DGBMV, CGBMV, or ZGBMV Subroutine

### Purpose

Performs matrix-vector operations with general banded matrices.

### Library

BLAS Library (**libblas.a**)

### FORTRAN Syntax

**SUBROUTINE SGBMV(***TRANS***, ***M***, ***N***, ***KL***, ***KU, ALPHA***, ***A***, ***LDA***,**
*X***, ***INCX***, ***BETA***, ***Y***, ***INCY***)**
**REAL** *ALPHA***,***BETA*
**INTEGER** *INCX***,***INCY***,***KL***,***KU***,***LDA***,***M***,***N*
**CHARACTER*1** *TRANS*
**REAL** *A***(***LDA***,*), ***X***(*), ***Y***(*)**

**SUBROUTINE DGBMV(***TRANS***, ***M***, ***N***, ***KL***, ***KU***, ***ALPHA***, ***A***, ***LDA***,**
*X***, ***INCX***, ***BETA***, ***Y***, ***INCY***)**
**DOUBLE PRECISION** *ALPHA***,***BETA*
**INTEGER** *INCX***,***INCY***,***KL***,***KU***,***LDA***,***M***,***N*
**CHARACTER*1** *TRANS*
**DOUBLE PRECISION ***A***(***LDA***,*), ***X***(*), ***Y***(*)**

**SUBROUTINE CGBMV(***TRANS***, ***M***, ***N***, ***KL***, ***KU***, ***ALPHA***, ***A***, ***LDA***,**
*X***, ***INCX***, ***BETA***, ***Y***, ***INCY***)**
**COMPLEX** *ALPHA***,***BETA*
**INTEGER** *INCX***,***INCY***,***KL***,***KU***,***LDA***,***M***,***N*
**CHARACTER*1** *TRANS*
**COMPLEX ***A***(***LDA***,*), ***X***(*), ***Y***(*)**

**SUBROUTINE ZGBMV(***TRANS***, ***M***, ***N***, ***KL***, ***KU***, ***ALPHA***, ***A***, ***LDA***,**
*X***, ***INCX***, ***BETA***, ***Y***, ***INCY***)**
**COMPLEX*16** *ALPHA***,***BETA*
**INTEGER** *INCX***,***INCY***,***KL***,***KU***,***LDA***,***M***,***N*
**CHARACTER*1** *TRANS*
**COMPLEX*16 ***A***(***LDA***,*), ***X***(*), ***Y***(*)**

### Description

The **SGBMV**, **DGBMV**, **CGBMV**, or **ZGBMV** subroutine performs one of the following matrix-vector operations:

`y := alpha * ``A`` * x + beta * y`

OR

`y := alpha * ``A``' * x + beta * y`

where alpha and beta are scalars, x and y are vectors and *A* is an *M* by *N* band matrix, with *KL* subdiagonals and *KU* superdiagonals.

### Parameters

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

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

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

*KL* |
On entry, *KL* specifies the number of subdiagonals of the matrix *A*; *KL* must satisfy 0 .le. *KL*; unchanged on exit. |

*KU* |
On entry, *KU* specifies the number of superdiagonals of the matrix *A*; *KU* must satisfy 0 .le. *KU*; unchanged on exit. |

*ALPHA* |
On entry, *ALPHA* specifies the scalar alpha; unchanged on exit. |

*A* |
A vector of dimension ( *LDA*, *N* ); on entry, the leading ( *KL* + *KU* + 1 ) by *N* part of the array *A* must contain the matrix of coefficients, supplied column by column, with the leading diagonal of the matrix in row ( *KU* + 1 ) of the array, the first superdiagonal starting at position 2 in row *KU*, the first subdiagonal starting at position 1 in row ( *KU* + 2 ), and so on. Elements in the array *A* that do not correspond to elements in the band matrix (such as the top left *KU* by *KU* triangle) are not referenced. The following program segment transfers a band matrix from conventional full matrix storage to band storage:
DO 20, J = 1, N
K = KU + 1 - J
DO 10, I = MAX( 1, J - KU ), MIN( M, J + KL )
A( K + I, J ) = matrix( I, J )
10 CONTINUE
20 CONTINUE
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 ( *KL* + *KU* + 1 ); unchanged on exit. |

*X* |
A vector of dimension at least (1 + (*N*-1) * abs( *INCX* ) ) when *TRANS* = 'N' or 'n', otherwise, at least (1 + (*M*-1) * abs( *INCX *) ); on entry, the incremented array *X* must contain the vector x; unchanged on exit. |

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

*BETA* |
On entry, *BETA* specifies the scalar beta; when* BETA* is supplied as 0 then *Y* need not be set on input; unchanged on exit. |

*Y* |
A vector of dimension at least (1 + (*M*-1) * abs( *INCY* ) ) when *TRANS* = 'N' or 'n' , otherwise, at least (1 + (*N*-1) * abs( *INCY* ) ); on entry, the incremented array *Y* must contain the vector y; on exit, *Y* is overwritten by the updated vector y. |

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

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