# ?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 )

## 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

  COMPLEX*16 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.

Parent topic: Auxiliary Routines