GBBRD - GBBRD - 5.3 English - 68552

AOCL API Guide (68552)

Document_ID
68552
Release_Date
2026-05-13
Version
5.3 English
template<typename T>
void gbbrd(char *vect, integer *m, integer *n, integer *ncc, integer *kl, integer *ku, T *ab, integer *ldab, T *d, T *e, T *q, integer *ldq, T *pt, integer *ldpt, T *c, integer *ldc, T *work, integer *info)#

Reduces a general band matrix to bidiagonal form.

Purpose :

 GBBRD reduces a real general m-by-n band matrix A to upper
  bidiagonal form B by an orthogonal transformation: Q**T * A * P = B.

  The routine computes B, and optionally forms Q or P**T, or computes
 Q**T*C for a given matrix C.
Parameters:
  • VECT – [in]

    VECT is CHARACTER*1

    Specifies whether or not the matrices Q and P**T are to be formed.

    = ‘N’: do not form Q or P**T;

    = ‘Q’: form Q only;

    = ‘P’: form P**T only;

    = ‘B’: form both.

  • M – [in]

    M is INTEGER

    The number of rows of the matrix A. M >= 0.

  • N – [in]

    N is INTEGER

    The number of columns of the matrix A. N >= 0.

  • NCC – [in]

    NCC is INTEGER

    The number of columns of the matrix C. NCC >= 0.

  • KL – [in]

    KL is INTEGER

    The number of subdiagonals of the matrix A. KL >= 0.

  • KU – [in]

    KU is INTEGER

    The number of superdiagonals of the matrix A. KU >= 0.

  • AB – [inout]

    AB is REAL array, dimension (LDAB,N)

    On entry, the m-by-n band matrix A, stored 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 fla_max(1,j-ku)<=i<=min(m,j+kl). On exit, A is overwritten by values generated during the reduction.
  • LDAB – [in]

    LDAB is INTEGER

    The leading dimension of the array A. LDAB >= KL+KU+1.

  • D – [out]

    D is REAL array, dimension (min(M,N))

    The diagonal elements of the bidiagonal matrix B.

  • E – [out]

    E is REAL array, dimension (min(M,N)-1)

    The superdiagonal elements of the bidiagonal matrix B.

  • Q – [out]

    Q is REAL array, dimension (LDQ,M)

    If VECT = ‘Q’ or ‘B’, the m-by-m orthogonal matrix Q.

    If VECT = ‘N’ or ‘P’, the array Q is not referenced.
  • LDQ – [in]

    LDQ is INTEGER

    The leading dimension of the array Q.

    LDQ >= fla_max(1,M) if VECT = ‘Q’ or ‘B’; LDQ >= 1 otherwise.
  • PT – [out]

    PT is REAL array, dimension (LDPT,N)

    If VECT = ‘P’ or ‘B’, the n-by-n orthogonal matrix P’.

    If VECT = ‘N’ or ‘Q’, the array PT is not referenced.
  • LDPT – [in]

    LDPT is INTEGER

    The leading dimension of the array PT.

    LDPT >= fla_max(1,N) if VECT = ‘P’ or ‘B’; LDPT >= 1 otherwise.
  • C – [inout]

    C is REAL array, dimension (LDC,NCC) On entry, an m-by-ncc matrix C.

    On exit, C is overwritten by Q**T*C.

    C is not referenced if NCC = 0.
  • LDC – [in]

    LDC is INTEGER

    The leading dimension of the array C.

    LDC >= fla_max(1,M) if NCC > 0; LDC >= 1 if NCC = 0.
  • WORK – [out] WORK is COMPLEX array, dimension (fla_max(M,N))

  • RWORK – [out] RWORK is REAL array, dimension (fla_max(M,N))

  • INFO – [out]

    INFO is INTEGER

    = 0: successful exit.

    < 0: if INFO = -i, the i-th argument had an illegal value.
template<typename T, typename Ta>
void gbbrd(char *vect, integer *m, integer *n, integer *ncc, integer *kl, integer *ku, T *ab, integer *ldab, Ta *d, Ta *e, T *q, integer *ldq, T *pt, integer *ldpt, T *c, integer *ldc, T *work, Ta *rwork, integer *info)#