GEBD2 - 5.2 English - 68552

AOCL API Guide (68552)

Document ID
68552
Release Date
2025-12-29
Version
5.2 English
template<typename T>
void gebd2(integer *m, integer *n, T *a, integer *lda, T *d, T *e, T *tauq, T *taup, T *work, integer *info)#

Reduction to bidiagonal form (unblocked algorithm)

Purpose:

    Reduction of a general real m-by-n matrix a to upper or lower bidiagonal form B by an
    orthogonal transformation: Q**T * A * P = B.

    If m >= n, B is upper bidiagonal; if m < n, B is lower bidiagonal.

Further Details

                  The matrices Q and P are represented as products of elementary reflectors:

                  If m >= n,

                  Q = H(1) H(2) . . . H(n)  and  P = G(1) G(2) . . . G(n-1)

                  Each H(i) and G(i) has the form:

                  H(i) = I - tauq * V * V**T  and G(i) = I - taup * u * u**T

                  where tauq and taup are real scalars, and V and u are real vectors;
                  V(1:i-1) = 0, V(i) = 1, and V(i+1:m) is stored on exit in A(i+1:m,i);
                  u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in A(i,i+2:n);
                  tauq is stored in tauq(i) and taup in taup(i).

                  If m < n,

                  Q = H(1) H(2) . . . H(m-1)  and  P = G(1) G(2) . . . G(m)

                  Each H(i) and G(i) has the form:

                  H(i) = I - tauq * V * V**T  and G(i) = I - taup * u * u**T

                  where tauq and taup are real scalars, and V and u are real vectors;
                  V(1:i) = 0, V(i+1) = 1, and V(i+2:m) is stored on exit in A(i+2:m,i);
                  u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n);
                  tauq is stored in tauq(i) and taup in taup(i).

                  The contents of A on exit are illustrated by the following examples:

                  m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):

                  (  d   e   u1  u1  u1)  (  d   u1  u1  u1  u1  u1)
                  (  v1  d   e   u2  u2)  (  e   d   u2  u2  u2  u2)
                  (  v1  v2  d   e   u3)  (  v1  e   d   u3  u3  u3)
                  (  v1  v2  v3  d   e )  (  v1  v2  e   d   u4  u4)
                  (  v1  v2  v3  v4  d )  (  v1  v2  v3  e   d   u5)
                  (  v1  v2  v3  v4  v5)

                  where d and e denote diagonal and off-diagonal elements of B, vi denotes an
element of the vector defining H(i), and ui an element of the vector defining G(i).
Parameters:
  • m[in]

    m is integer*

    The number of rows in the matrix a. m >= 0.

  • n[in]

    n is integer*

    The number of columns in the matrix a. n >= 0.

  • a[inout]

    a is float/double array, dimension (lda,n)

    On entry, the m-by-n general matrix to be reduced.

    On exit,

    if m >= n, the diagonal and the first superdiagonal are overwritten with the upper bidiagonal matrix b; the elements below the diagonal, with the array tauq, represent the orthogonal matrix Q as a product of elementary reflectors, and the elements above the first superdiagonal, with the array taup, represent the orthogonal matrix P as a product of elementary reflectors;

    if m < n, the diagonal and the first subdiagonal are overwritten with the lower bidiagonal matrix b; the elements below the first subdiagonal, with the array tauq, represent the orthogonal matrix Q as a product of elementary reflectors, and the elements above the diagonal, with the array taup, represent the orthogonal matrix P as a product of elementary reflectors.

    See Further Details.

  • lda[in]

    lda is integer*

    The leading dimension of the array a. lda >= fla_max(1,m).

  • d[out]

    d is float/double array, dimension (min(m,n))

    The diagonal elements of the bidiagonal matrix b:

    D(i) = A(i,i).
  • e[out]

    e is float/double array, dimension (min(m,n)-1)

    The off-diagonal elements of the bidiagonal matrix b:

    if m >= n, E(i) = A(i,i+1) for i = 1,2,…,n-1;

    if m < n, E(i) = A(i+1,i) for i = 1,2,…,m-1.

  • tauq[out]

    tauq is float/double array, dimension (min(m,n))

    The scalar factors of the elementary reflectors which represent the orthogonal matrix Q. See Further Details.

  • taup[out]

    taup is float/double array, dimension (min(m,n))

    The scalar factors of the elementary reflectors which represent the orthogonal matrix P.

    See Further Details.
  • WORK[out] WORK is COMPLEX 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 gebd2(integer *m, integer *n, T *a, integer *lda, Ta *d, Ta *e, T *tauq, T *taup, T *work, integer *info)#