# ?laqgb

Scales a general band matrix, using row and column scaling factors computed by ?gbequ.

## Syntax

call slaqgb( m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed )

call dlaqgb( m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed )

call claqgb( m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed )

call zlaqgb( m, n, kl, ku, ab, ldab, r, c, rowcnd, colcnd, amax, equed )

## Include Files

• Fortran: mkl.fi
• C: mkl.h

## Description

The routine equilibrates a general m-by-n band matrix A with kl subdiagonals and ku superdiagonals using the row and column scaling factors in the vectors r and c.

## Input Parameters

m

INTEGER. The number of rows of the matrix A. `m ≥ 0`.

n

INTEGER. The number of columns of the matrix A. `n ≥ 0`.

kl

INTEGER. The number of subdiagonals within the band of A. `kl ≥ 0`.

ku

INTEGER. The number of superdiagonals within the band of A. `ku ≥ 0`.

ab

REAL for slaqgb

DOUBLE PRECISION for dlaqgb

COMPLEX for claqgb

DOUBLE COMPLEX for zlaqgb

Array, DIMENSION (ldab,n). On entry, the matrix A in band storage, in rows 1 to kl+ku+1. The j-th column of A is stored in the j-th column of the array ab as follows: `ab(ku+1+i-j,j) = A(i,j)` for `max(1,j-ku) ≤ i ≤ min(m,j+kl)`.

ldab

INTEGER. The leading dimension of the array ab.

`lda ≥ kl+ku+1`.

amax

REAL for slaqgb/claqgb

DOUBLE PRECISION for dlaqgb/zlaqgb

Absolute value of largest matrix entry.

r, c

REAL for slaqgb/claqgb

DOUBLE PRECISION for dlaqgb/zlaqgb

Arrays r (m), c (n). Contain the row and column scale factors for A, respectively.

rowcnd

REAL for slaqgb/claqgb

DOUBLE PRECISION for dlaqgb/zlaqgb

Ratio of the smallest r(i) to the largest r(i).

colcnd

REAL for slaqgb/claqgb

DOUBLE PRECISION for dlaqgb/zlaqgb

Ratio of the smallest c(i) to the largest c(i).

## Output Parameters

ab

On exit, the equilibrated matrix, in the same storage format as A.

See equed for the form of the equilibrated matrix.

equed

CHARACTER*1.

Specifies the form of equilibration that was done.

If `equed = 'N'`: No equilibration

If `equed = 'R'`: Row equilibration, that is, A has been premultiplied by diag(r).

If `equed = 'C'`: Column equilibration, that is, A has been postmultiplied by diag(c).

If `equed = 'B'`: Both row and column equilibration, that is, A has been replaced by `diag(r)*A*diag(c)`.

## Application Notes

The routine uses internal parameters thresh, large, and small, which have the following meaning. thresh is a threshold value used to decide if row or column scaling should be done based on the ratio of the row or column scaling factors. If `rowcnd < thresh`, row scaling is done, and if `colcnd < thresh`, column scaling is done. large and small are threshold values used to decide if row scaling should be done based on the absolute size of the largest matrix element. If `amax > large` or `amax < small`, row scaling is done.

For more complete information about compiler optimizations, see our Optimization Notice.