# ?gbbrd

Reduces a general band matrix to bidiagonal form.

## Syntax

FORTRAN 77:

call sgbbrd(vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, info)

call dgbbrd(vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, info)

call cgbbrd(vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, rwork, info)

call zgbbrd(vect, m, n, ncc, kl, ku, ab, ldab, d, e, q, ldq, pt, ldpt, c, ldc, work, rwork, info)

Fortran 95:

call gbbrd(a [, c] [,d] [,e] [,q] [,pt] [,kl] [,m] [,info])

## Description

This routine reduces an m-by-n band matrix A to upper bidiagonal matrix B: `A = Q*B*PH`. Here the matrices Q and P are orthogonal (for real A) or unitary (for complex A). They are determined as products of Givens rotation matrices, and may be formed explicitly by the routine if required. The routine can also update a matrix C as follows: `C = QH*C`.

## Input Parameters

vect

  CHARACTER*1. Must be 'N' or 'Q' or 'P' or 'B'.

  If `vect = 'N'`, neither Q nor PH is generated.

  If `vect = 'Q'`, the routine generates the matrix Q.

  If `vect = 'P'`, the routine generates the matrix PH.

  If `vect = 'B'`, the routine generates both Q and PH.

m

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

n

  INTEGER. The number of columns in A (`n ≥ 0`).

ncc

  INTEGER. The number of columns in C (`ncc ≥ 0`).

kl

  INTEGER. The number of sub-diagonals within the band of A (`kl ≥ 0`).

ku

  INTEGER. The number of super-diagonals within the band of A (`ku ≥ 0`).

ab, c, work

  REAL for sgbbrd

  DOUBLE PRECISION for dgbbrd COMPLEX for cgbbrd DOUBLE COMPLEX for zgbbrd.

  Arrays:

  ab(ldab,*) contains the matrix A in band storage (see Matrix Storage Schemes).

  The second dimension of a must be at least max(1, n).

  c(ldc,*) contains an m-by-ncc matrix C.

  If `ncc = 0`, the array c is not referenced.

  The second dimension of c must be at least max(1, ncc).

  work(*) is a workspace array.

  The dimension of work must be at least 2*max(m, n) for real flavors, or max(m, n) for complex flavors.

ldab

  INTEGER. The first dimension of the array ab (`ldab ≥ kl + ku + 1`).

ldq

  INTEGER. The first dimension of the output array q.

  `ldq ≥ max(1, m)` if `vect = 'Q'` or 'B', `ldq ≥ 1` otherwise.

ldpt

  INTEGER. The first dimension of the output array pt.

  `ldpt ≥ max(1, n)` if `vect = 'P'` or 'B', `ldpt ≥ 1` otherwise.

ldc

  INTEGER. The first dimension of the array c.

  `ldc ≥ max(1, m)` if `ncc > 0`; `ldc ≥ 1` if `ncc = 0`.

rwork

  REAL for cgbbrd DOUBLE PRECISION for zgbbrd.

  A workspace array, DIMENSION at least max(m, n).

## Output Parameters

ab

  Overwritten by values generated during the reduction.

d

  REAL for single-precision flavors

  DOUBLE PRECISION for double-precision flavors.

  Array, DIMENSION at least max(1, min(m, n)). Contains the diagonal elements of the matrix B.

e

  REAL for single-precision flavors

  DOUBLE PRECISION for double-precision flavors.

  Array, DIMENSION at least `max(1, min(m, n) - 1)`.

  Contains the off-diagonal elements of B.

q, pt

  REAL for sgebrd

  DOUBLE PRECISION for dgebrd

  COMPLEX for cgebrd

  DOUBLE COMPLEX for zgebrd.

  Arrays:

  q(ldq,*) contains the output m-by-m matrix Q.

  The second dimension of q must be at least max(1, m).

  p(ldpt,*) contains the output n-by-n matrix PT.

  The second dimension of pt must be at least max(1, n).

info

  INTEGER.

  If `info = 0`, the execution is successful.

  If `info = -i`, the i-th parameter had an illegal value.

## Fortran 95 Interface Notes

Routines in Fortran 95 interface have fewer arguments in the calling sequence than their FORTRAN 77 counterparts. For general conventions applied to skip redundant or restorable arguments, see Fortran 95 Interface Conventions.

Specific details for the routine gbbrd interface are the following:

a

  Stands for argument ab in Fortan 77 interface . Holds the array A of size (kl+ku+1,n).

c

  Holds the matrix C of size (m,ncc).

d

  Holds the vector of length min(m,n).

e

  Holds the vector of length min(m,n)-1.

q

  Holds the matrix Q of size (m,m).

pt

  Holds the matrix PT of size (n,n).

m

  If omitted, assumed `m = n`.

kl

  If omitted, assumed kl = ku.

ku

  Restored as ku = lda-kl-1.

vect

  Restored based on the presence of arguments q and pt as follows:

  `vect = 'B'`, if both q and pt are present,

  `vect = 'Q'`, if q is present and pt omitted, vect = 'P',

  if q is omitted and pt present, `vect = 'N'`, if both q and pt are omitted.

## Application Notes

The computed matrices Q, B, and P satisfy `Q*B*PH = A + E`, where `||E||2 = c(n)ε ||A||2, c(n)` is a modestly increasing function of n, and ε is the machine precision.

If `m = n`, the total number of floating-point operations for real flavors is approximately the sum of:

`6*n2*(kl + ku)` if `vect = 'N'` and `ncc = 0`,

`3*n2*ncc*(kl + ku - 1)/(kl + ku)` if C is updated, and

`3*n3*(kl + ku - 1)/(kl + ku)` if either Q or PH is generated (double this if both).

To estimate the number of operations for complex flavors, use the same formulas with the coefficients 20 and 10 (instead of 6 and 3).

Parent topic: Singular Value Decomposition