SORCSD2BY1(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

✨ SORCSD2BY1(3) ✨

okay so bestie, this is a page from the Library Functions Manual β€” and the file it's documenting lives at /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sorcsd2by1.f. Yes that's a whole journey. Anyway, let's get into it πŸ’…


πŸ¦‹ SYNOPSIS

Functions/Subroutines

subroutine SORCSD2BY1 β€” and here's the whole squad of arguments, no cap:

subroutine SORCSD2BY1 (jobu1, jobu2, jobv1t, m, p, q, x11, ldx11, x21,
    ldx21, theta, u1, ldu1, u2, ldu2, v1t, ldv1t, work, lwork, iwork,
    info)

SORCSD2BY1


πŸŽ€ Function/Subroutine Documentation

subroutine SORCSD2BY1

here's the full signature with the types laid out, literally every single one:

subroutine SORCSD2BY1 (character jobu1, character jobu2, character jobv1t,
    integer m, integer p, integer q, real, dimension(ldx11,*) x11, integer
    ldx11, real, dimension(ldx21,*) x21, integer ldx21, real, dimension(*)
    theta, real, dimension(ldu1,*) u1, integer ldu1, real, dimension(ldu2,*)
    u2, integer ldu2, real, dimension(ldv1t,*) v1t, integer ldv1t, real,
    dimension(*) work, integer lwork, integer, dimension(*) iwork, integer
    info)

SORCSD2BY1

πŸ’– Purpose:

SORCSD2BY1 computes the CS decomposition of an M-by-Q matrix X with orthonormal columns that has been partitioned into a 2-by-1 block structure:
                               [  I1 0  0 ]
                               [  0  C  0 ]
         [ X11 ]   [ U1 |    ] [  0  0  0 ]
     X = [-----] = [---------] [----------] V1**T .
         [ X21 ]   [    | U2 ] [  0  0  0 ]
                               [  0  S  0 ]
                               [  0  0  I2]
X11 is P-by-Q. The orthogonal matrices U1, U2, and V1 are P-by-P, (M-P)-by-(M-P), and Q-by-Q, respectively. C and S are R-by-R nonnegative diagonal matrices satisfying C^2 + S^2 = I, in which R = MIN(P,M-P,Q,M-Q). I1 is a K1-by-K1 identity matrix and I2 is a K2-by-K2 identity matrix, where K1 = MAX(Q+P-M,0), K2 = MAX(Q-P,0).

like... the way that diagram just sits there being all orthonormal 😌 iconic.


🧚 Parameters

  • JOBU1 β€” this one's a CHARACTER, okay?
    • = 'Y': U1 is computed;
    • otherwise: U1 is not computed.
  • JOBU2 β€” also CHARACTER:
    • = 'Y': U2 is computed;
    • otherwise: U2 is not computed.
  • JOBV1T β€” yep, CHARACTER again:
    • = 'Y': V1T is computed;
    • otherwise: V1T is not computed.
  • M β€” INTEGER. The number of rows in X.
  • P β€” INTEGER. The number of rows in X11. 0 <= P <= M.
  • Q β€” INTEGER. The number of columns in X11 and X21. 0 <= Q <= M.
  • X11 β€” REAL array, dimension (LDX11,Q). On entry, part of the orthogonal matrix whose CSD is desired. it's giving "half the main character" ✨
  • LDX11 β€” INTEGER. The leading dimension of X11. LDX11 >= MAX(1,P).
  • X21 β€” REAL array, dimension (LDX21,Q). On entry, part of the orthogonal matrix whose CSD is desired. the other half 🫢
  • LDX21 β€” INTEGER. The leading dimension of X21. LDX21 >= MAX(1,M-P).
  • THETA β€” REAL array, dimension (R), in which R = MIN(P,M-P,Q,M-Q). And then:
    • C = DIAG( COS(THETA(1)), ... , COS(THETA(R)) ) and
    • S = DIAG( SIN(THETA(1)), ... , SIN(THETA(R)) ).
  • U1 β€” REAL array, dimension (P). If JOBU1 = 'Y', U1 contains the P-by-P orthogonal matrix U1.
  • LDU1 β€” INTEGER. The leading dimension of U1. If JOBU1 = 'Y', LDU1 >= MAX(1,P).
  • U2 β€” REAL array, dimension (M-P). If JOBU2 = 'Y', U2 contains the (M-P)-by-(M-P) orthogonal matrix U2.
  • LDU2 β€” INTEGER. The leading dimension of U2. If JOBU2 = 'Y', LDU2 >= MAX(1,M-P).
  • V1T β€” REAL array, dimension (Q). If JOBV1T = 'Y', V1T contains the Q-by-Q matrix orthogonal matrix V1**T. (that's what the page says, bestie β€” "matrix orthogonal matrix", she said it twice for emphasis πŸ’€)
  • LDV1T β€” INTEGER. The leading dimension of V1T. If JOBV1T = 'Y', LDV1T >= MAX(1,Q).
  • WORK β€” REAL array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. If INFO > 0 on exit, WORK(2:R) contains the values PHI(1), ..., PHI(R-1) that, together with THETA(1), ..., THETA(R), define the matrix in intermediate bidiagonal-block form remaining after nonconvergence. INFO specifies the number of nonzero PHI's.
  • LWORK β€” INTEGER. The dimension of the array WORK.
    • 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. lowkey a freebie, we love a query mode πŸŽ€
  • IWORK β€” INTEGER array, dimension (M-MIN(P,M-P,Q,M-Q)).
  • INFO β€” INTEGER:
    • = 0: successful exit. slay πŸ’…
    • < 0: if INFO = -i, the i-th argument had an illegal value.
    • > 0: SBBCSD did not converge. See the description of WORK above for details. 😭
heads up bestie: INFO > 0 is the nonconvergence case, and the leftover info you need is stashed in WORK β€” don't skip that part.

🌈 References:

[1] Brian D. Sutton. Computing the complete CS decomposition. Numer. Algorithms, 50(1):33-65, 2009.


πŸ‘‘ Author

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

Definition at line 230 of file sorcsd2by1.f.


⭐ Author

Generated automatically by Doxygen for LAPACK from the source code.


and that's the whole page, fr fr. this little gem comes to you courtesy of LAPACK, Version 3.12.0 β€” mwah, take care of her πŸ’œπŸ¦‹πŸŒΈ

πŸ“¦ where this page comes from