ungbr(3)

๐ŸŒธ ungbr(3) โ€” Library Functions Manual ๐ŸŒธ

okay bestie, pull up a chair, because this is the ungbr page from the Library Functions Manual, and it's genuinely a whole vibe. ๐Ÿซถ This is part one of a long one, so hydrate first. ๐Ÿ’…

The headline: this page covers the {un,or}gbr squad โ€” the routines that generate Q, P from gebrd. Or as the NAME section says it: {un,or}gbr: generate Q, P from gebrd. ๐ŸŽ€


๐Ÿ’– NAME

ungbr โ€” {un,or}gbr: generate Q, P from gebrd


โœจ SYNOPSIS โœจ

๐Ÿฆ‹ Functions

  • subroutine cungbr (vect, m, n, k, a, lda, tau, work, lwork, info) โ€” the complex one, aka CUNGBR
  • subroutine dorgbr (vect, m, n, k, a, lda, tau, work, lwork, info) โ€” the double precision one, aka DORGBR
  • subroutine sorgbr (vect, m, n, k, a, lda, tau, work, lwork, info) โ€” the real one, aka SORGBR
  • subroutine zungbr (vect, m, n, k, a, lda, tau, work, lwork, info) โ€” the complex*16 one, aka ZUNGBR

๐Ÿงš Detailed Description

so this section is literally just the section title, no extra prose, like a girl who shows up to the party already looking flawless and says nothing. ๐Ÿ’€ The actual content lives in Function Documentation, right below. ๐Ÿ‘‡


๐Ÿ‘‘ Function Documentation ๐Ÿ‘‘

๐ŸŒˆ subroutine cungbr (character vect, integer m, integer n, integer k, complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) tau, complex, dimension( * ) work, integer lwork, integer info)

CUNGBR

๐Ÿ’œ Purpose:

!>
!> CUNGBR generates one of the complex unitary matrices Q or P**H
!> determined by CGEBRD when reducing a complex matrix A to bidiagonal
!> form: A = Q * B * P**H.  Q and P**H are defined as products of
!> elementary reflectors H(i) or G(i) respectively.
!>
!> If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q
!> is of order M:
!> if m >= k, Q = H(1) H(2) . . . H(k) and CUNGBR returns the first n
!> columns of Q, where m >= n >= k;
!> if m < k, Q = H(1) H(2) . . . H(m-1) and CUNGBR returns Q as an
!> M-by-M matrix.
!>
!> If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**H
!> is of order N:
!> if k < n, P**H = G(k) . . . G(2) G(1) and CUNGBR returns the first m
!> rows of P**H, where n >= m >= k;
!> if k >= n, P**H = G(n-1) . . . G(2) G(1) and CUNGBR returns P**H as
!> an N-by-N matrix.
!>

like, it builds Q or P**H out of those elementary reflectors H(i) and G(i) โ€” no cap, that's the whole job. ๐ŸŒŸ

๐Ÿ“ Parameters

  • VECT โ€” it's a CHARACTER*1, bestie. Tells the routine whether you want the matrix Q or the matrix P**H, exactly as defined in the transformation applied by CGEBRD:
    • = 'Q': generate Q;
    • = 'P': generate P**H.
  • M โ€” INTEGER. The number of rows of the matrix Q or P**H you're getting back. M >= 0. ๐Ÿ’ซ
  • N โ€” INTEGER. The number of columns of the matrix Q or P**H you're getting back. N >= 0. And the constraints, listen up: if VECT = 'Q', then M >= N >= min(M,K); if VECT = 'P', then N >= M >= min(N,K). iykyk ๐ŸŽฏ
  • K โ€” INTEGER. If VECT = 'Q', it's the number of columns in the original M-by-K matrix that got reduced by CGEBRD. If VECT = 'P', it's the number of rows in the original K-by-N matrix reduced by CGEBRD. K >= 0. ๐Ÿงฎ
  • A โ€” a COMPLEX array, dimension (LDA,N). On entry, it holds the vectors which define the elementary reflectors, as returned by CGEBRD. On exit? it's the M-by-N matrix Q or P**H. glow-up complete. โœจ
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= M. ๐Ÿ“
  • TAU โ€” a COMPLEX array, dimension (min(M,K)) if VECT = 'Q', or (min(N,K)) if VECT = 'P'. TAU(i) must contain the scalar factor of the elementary reflector H(i) or G(i), which determines Q or P**H, as returned by CGEBRD in its array argument TAUQ or TAUP. ๐ŸŽ€
  • WORK โ€” a COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. ๐Ÿ‘€
  • LWORK โ€” INTEGER. The dimension of the array WORK. LWORK >= max(1,min(M,N)). For optimum performance, LWORK >= min(M,N)*NB, where NB is the optimal blocksize. and โ€” big one โ€” if LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. ๐Ÿšจ
  • INFO โ€” INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. ๐Ÿ’€

๐ŸŒธ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line 156 of file cungbr.f.


๐ŸŒˆ subroutine dorgbr (character vect, integer m, integer n, integer k, double precision, dimension( lda, * ) a, integer lda, double precision, dimension( * ) tau, double precision, dimension( * ) work, integer lwork, integer info)

DORGBR

๐Ÿ’œ Purpose:

!>
!> DORGBR generates one of the real orthogonal matrices Q or P**T
!> determined by DGEBRD when reducing a real matrix A to bidiagonal
!> form: A = Q * B * P**T.  Q and P**T are defined as products of
!> elementary reflectors H(i) or G(i) respectively.
!>
!> If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q
!> is of order M:
!> if m >= k, Q = H(1) H(2) . . . H(k) and DORGBR returns the first n
!> columns of Q, where m >= n >= k;
!> if m < k, Q = H(1) H(2) . . . H(m-1) and DORGBR returns Q as an
!> M-by-M matrix.
!>
!> If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**T
!> is of order N:
!> if k < n, P**T = G(k) . . . G(2) G(1) and DORGBR returns the first m
!> rows of P**T, where n >= m >= k;
!> if k >= n, P**T = G(n-1) . . . G(2) G(1) and DORGBR returns P**T as
!> an N-by-N matrix.
!>

same energy as CUNGBR but make it double precision and orthogonal instead of unitary. ๐Ÿฆ‹

๐Ÿ“ Parameters

  • VECT โ€” CHARACTER*1. Specifies whether the matrix Q or the matrix P**T is required, as defined in the transformation applied by DGEBRD:
    • = 'Q': generate Q;
    • = 'P': generate P**T.
  • M โ€” INTEGER. The number of rows of the matrix Q or P**T to be returned. M >= 0. ๐Ÿ’ซ
  • N โ€” INTEGER. The number of columns of the matrix Q or P**T to be returned. N >= 0. Constraints: if VECT = 'Q', M >= N >= min(M,K); if VECT = 'P', N >= M >= min(N,K). ๐ŸŽฏ
  • K โ€” INTEGER. If VECT = 'Q', the number of columns in the original M-by-K matrix reduced by DGEBRD. If VECT = 'P', the number of rows in the original K-by-N matrix reduced by DGEBRD. K >= 0. ๐Ÿงฎ
  • A โ€” DOUBLE PRECISION array, dimension (LDA,N). On entry, the vectors which define the elementary reflectors, as returned by DGEBRD. On exit, the M-by-N matrix Q or P**T. โœจ
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= max(1,M). ๐Ÿ“
  • TAU โ€” DOUBLE PRECISION array, dimension (min(M,K)) if VECT = 'Q', or (min(N,K)) if VECT = 'P'. TAU(i) must contain the scalar factor of the elementary reflector H(i) or G(i), which determines Q or P**T, as returned by DGEBRD in its array argument TAUQ or TAUP. ๐ŸŽ€
  • WORK โ€” DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. ๐Ÿ‘€
  • LWORK โ€” INTEGER. The dimension of the array WORK. LWORK >= max(1,min(M,N)). For optimum performance LWORK >= min(M,N)*NB, where NB is the optimal blocksize. If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA. ๐Ÿšจ
  • INFO โ€” INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. ๐Ÿ’€

๐ŸŒธ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line 156 of file dorgbr.f.


๐ŸŒˆ subroutine sorgbr (character vect, integer m, integer n, integer k, real, dimension( lda, * ) a, integer lda, real, dimension( * ) tau, real, dimension( * ) work, integer lwork, integer info)

SORGBR

๐Ÿ’œ Purpose:

!>
!> SORGBR generates one of the real orthogonal matrices Q or P**T
!> determined by SGEBRD when reducing a real matrix A to bidiagonal
!> form: A = Q * B * P**T.  Q and P**T are defined as products of
!> elementary reflectors H(i) or G(i) respectively.
!>
!> If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q
!> is of order M:
!> if m >= k, Q = H(1) H(2) . . . H(k) and SORGBR returns the first n
!> columns of Q, where m >= n >= k;
!> if m < k, Q = H(1) H(2) . . . H(m-1) and SORGBR returns Q as an
!> M-by-M matrix.
!>
!> If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**T
!> is of order N:
!> if k < n, P**T = G(k) . . . G(2) G(1) and SORGBR returns the first m
!> rows of P**T, where n >= m >= k;
!> if k >= n, P**T = G(n-1) . . . G(2) G(1) and SORGBR returns P**T as
!> an N-by-N matrix.
!>

the single precision sibling, same routine energy, SGEBRD in the credits instead of DGEBRD. ๐Ÿซถ

๐Ÿ“ Parameters

  • VECT โ€” CHARACTER*1. Specifies whether the matrix Q or the matrix P**T is required, as defined in the transformation applied by SGEBRD:
    • = 'Q': generate Q;
    • = 'P': generate P**T.
  • M โ€” INTEGER. The number of rows of the matrix Q or P**T to be returned. M >= 0. ๐Ÿ’ซ
  • N โ€” INTEGER. The number of columns of the matrix Q or P**T to be returned. N >= 0. Constraints: if VECT = 'Q', M >= N >= min(M,K); if VECT = 'P', N >= M >= min(N,K). ๐ŸŽฏ
  • K โ€” ...and the rest of the K deets roll in on the next part, bestie โ€” hold that thought ๐Ÿ’…

<!-- continuation: more of sorgbr's K parameter and the zungbr routine follow in part 2 -->

  • K โ€” INTEGER, bestie. If VECT = 'Q', itโ€™s the number of columns in the original M-by-K matrix reduced by SGEBRD. If VECT = 'P', itโ€™s the number of rows in the original K-by-N matrix reduced by SGEBRD. And K >= 0, periodt. ๐Ÿ’…
  • A โ€” a REAL array, dimension (LDA,N). On entry, it holds the vectors which define the elementary reflectors, exactly as returned by SGEBRD. On exit, itโ€™s the M-by-N matrix Q or P**T. Iconic glow-up, honestly โœจ.
  • LDA โ€” INTEGER, the leading dimension of the array A. LDA >= max(1,M). No cap.
  • TAU โ€” a REAL array, dimension (min(M,K)) if VECT = 'Q', or (min(N,K)) if VECT = 'P'. TAU(i) must contain the scalar factor of the elementary reflector H(i) or G(i), which determines Q or P**T, as returned by SGEBRD in its array argument TAUQ or TAUP. Slay.
  • WORK โ€” REAL array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. Lowkey useful ๐Ÿซถ.
  • LWORK โ€” INTEGER, the dimension of the array WORK. LWORK >= max(1,min(M,N)). For optimum performance, LWORK >= min(M,N)*NB, where NB is the optimal blocksize.
If LWORK = -1, then a workspace query is assumed ๐ŸŒธ โ€” the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
  • INFO โ€” INTEGER.
    • = 0: successful exit ๐ŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ’€

๐Ÿ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Definition at line 156 of file sorgbr.f.


๐Ÿ’œ ZUNGBR

subroutine zungbr (character vect, integer m, integer n, integer k,
    complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( *
    ) tau, complex*16, dimension( * ) work, integer lwork, integer info)

โœจ Purpose โœจ

Okay so ZUNGBR generates one of the complex unitary matrices Q or P**H determined by ZGEBRD when reducing a complex matrix A to bidiagonal form: A = Q * B * P**H. Q and P**H are defined as products of elementary reflectors H(i) or G(i) respectively.

If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q is of order M:

  • if m >= k, Q = H(1) H(2) . . . H(k) and ZUNGBR returns the first n columns of Q, where m >= n >= k;
  • if m < k, Q = H(1) H(2) . . . H(m-1) and ZUNGBR returns Q as an M-by-M matrix.

If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**H is of order N:

  • if k < n, P**H = G(k) . . . G(2) G(1) and ZUNGBR returns the first m rows of P**H, where n >= m >= k;
  • if k >= n, P**H = G(n-1) . . . G(2) G(1) and ZUNGBR returns P**H as an N-by-N matrix.

๐ŸŒธ Parameters ๐ŸŒธ

  • VECT โ€” CHARACTER*1. Specifies whether the matrix Q or the matrix P**H is required, as defined in the transformation applied by ZGEBRD:
    • = 'Q': generate Q;
    • = 'P': generate P**H.
  • M โ€” INTEGER, the number of rows of the matrix Q or P**H to be returned. M >= 0.
  • N โ€” INTEGER, the number of columns of the matrix Q or P**H to be returned. N >= 0.
    • If VECT = 'Q', M >= N >= min(M,K);
    • if VECT = 'P', N >= M >= min(N,K).
  • K โ€” INTEGER. If VECT = 'Q', the number of columns in the original M-by-K matrix reduced by ZGEBRD. If VECT = 'P', the number of rows in the original K-by-N matrix reduced by ZGEBRD. K >= 0.
  • A โ€” COMPLEX*16 array, dimension (LDA,N). On entry, the vectors which define the elementary reflectors, as returned by ZGEBRD. On exit, the M-by-N matrix Q or P**H.
  • LDA โ€” INTEGER, the leading dimension of the array A. LDA >= M.
  • TAU โ€” COMPLEX*16 array, dimension (min(M,K)) if VECT = 'Q', or (min(N,K)) if VECT = 'P'. TAU(i) must contain the scalar factor of the elementary reflector H(i) or G(i), which determines Q or P**H, as returned by ZGEBRD in its array argument TAUQ or TAUP.
  • WORK โ€” COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK โ€” INTEGER, the dimension of the array WORK. LWORK >= max(1,min(M,N)). For optimum performance, LWORK >= min(M,N)*NB, where NB is the optimal blocksize.
If LWORK = -1, then a workspace query is assumed ๐Ÿซถ โ€” the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.
  • INFO โ€” INTEGER.
    • = 0: successful exit ๐ŸŽ‰
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ’€

๐Ÿ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Definition at line 156 of file zungbr.f.


And thatโ€™s the whole page, bestie ๐Ÿซถ โ€” generated automatically by Doxygen for LAPACK from the source code, LAPACK Version 3.12.0, and this manual page is ungbr(3). The footer only gives source/version vibes, no extra date line to quote. Catch you in the next group chat ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from