DCSDTS(3)

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

🌸 NAME 🌸

okay so bestie, this is DCSDTS(3) from the Library Functions Manual πŸ’–. The NAME line is literally this path, no cap:

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/EIG/dcsdts.f

✨ SYNOPSIS ✨

πŸŽ€ Functions/Subroutines πŸŽ€

subroutine DCSDTS (m, p, q, x, xf, ldx, u1, ldu1, u2, ldu2, v1t, ldv1t,
    v2t, ldv2t, theta, iwork, work, lwork, rwork, result)

DCSDTS β€” that's the whole synopsis vibe 🫢

πŸ’… Function/Subroutine Documentation πŸ’…

subroutine DCSDTS (integer m, integer p, integer q, double precision,
    dimension( ldx, * ) x, double precision, dimension( ldx, * ) xf, integer
    ldx, double precision, dimension( ldu1, * ) u1, integer ldu1, double
    precision, dimension( ldu2, * ) u2, integer ldu2, double precision,
    dimension( ldv1t, * ) v1t, integer ldv1t, double precision, dimension(
    ldv2t, * ) v2t, integer ldv2t, double precision, dimension( * ) theta,
    integer, dimension( * ) iwork, double precision, dimension( lwork )
    work, integer lwork, double precision, dimension( * ) rwork, double
    precision, dimension( 15 ) result)

DCSDTS β€” yes, it's giving β€œlong signature, main character energy” 😭

πŸ”₯ Purpose πŸ”₯

bestie, here's the exact purpose block, and it is so specific:

!>
!> DCSDTS tests DORCSD, which, given an M-by-M partitioned orthogonal
!> matrix X,
!>              Q  M-Q
!>       X = [ X11 X12 ] P   ,
!>           [ X21 X22 ] M-P
!>
!> computes the CSD
!>
!>       [ U1    ]**T * [ X11 X12 ] * [ V1    ]
!>       [    U2 ]      [ X21 X22 ]   [    V2 ]
!>
!>                             [  I  0  0 |  0  0  0 ]
!>                             [  0  C  0 |  0 -S  0 ]
!>                             [  0  0  0 |  0  0 -I ]
!>                           = [---------------------] = [ D11 D12 ] ,
!>                             [  0  0  0 |  I  0  0 ]   [ D21 D22 ]
!>                             [  0  S  0 |  0  C  0 ]
!>                             [  0  0  I |  0  0  0 ]
!>
!> and also DORCSD2BY1, which, given
!>          Q
!>       [ X11 ] P   ,
!>       [ X21 ] M-P
!>
!> computes the 2-by-1 CSD
!>
!>                                     [  I  0  0 ]
!>                                     [  0  C  0 ]
!>                                     [  0  0  0 ]
!>       [ U1    ]**T * [ X11 ] * V1 = [----------] = [ D11 ] ,
!>       [    U2 ]      [ X21 ]        [  0  0  0 ]   [ D21 ]
!>                                     [  0  S  0 ]
!>                                     [  0  0  I ]
!>

πŸ¦‹ Parameters πŸ¦‹

  • M β€” M is INTEGER; the number of rows of the matrix X. M >= 0. 🌸
  • P β€” P is INTEGER; the number of rows of the matrix X11. P >= 0. πŸ¦‹
  • Q β€” Q is INTEGER; the number of columns of the matrix X11. Q >= 0. πŸŽ€
  • X β€” X is DOUBLE PRECISION array, dimension (LDX,M); the M-by-M matrix X. πŸ’–
  • XF β€” XF is DOUBLE PRECISION array, dimension (LDX,M); details of the CSD of X, as returned by DORCSD; see DORCSD for further details. ✨
  • LDX β€” LDX is INTEGER; the leading dimension of the arrays X and XF. LDX >= max( 1,M ). πŸ”₯
  • U1 β€” U1 is DOUBLE PRECISION array, dimension(LDU1,P); the P-by-P orthogonal matrix U1. πŸ‘‘
  • LDU1 β€” LDU1 is INTEGER; the leading dimension of the array U1. LDU >= max(1,P). πŸ’…
  • U2 β€” U2 is DOUBLE PRECISION array, dimension(LDU2,M-P); the (M-P)-by-(M-P) orthogonal matrix U2. 🌈
  • LDU2 β€” LDU2 is INTEGER; the leading dimension of the array U2. LDU >= max(1,M-P). ⭐
  • V1T β€” V1T is DOUBLE PRECISION array, dimension(LDV1T,Q); the Q-by-Q orthogonal matrix V1T. 🧚
  • LDV1T β€” LDV1T is INTEGER; the leading dimension of the array V1T. LDV1T >= max(1,Q). πŸ’œ
  • V2T β€” V2T is DOUBLE PRECISION array, dimension(LDV2T,M-Q); the (M-Q)-by-(M-Q) orthogonal matrix V2T. πŸ“
  • LDV2T β€” LDV2T is INTEGER; the leading dimension of the array V2T. LDV2T >= max(1,M-Q). 🫢
  • THETA β€” THETA is DOUBLE PRECISION array, dimension MIN(P,M-P,Q,M-Q); the CS values of X; the essentially diagonal matrices C and S are constructed from THETA; see subroutine DORCSD for details. πŸ¦‹
  • IWORK β€” IWORK is INTEGER array, dimension (M) πŸ’–
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (LWORK) ✨
  • LWORK β€” LWORK is INTEGER; the dimension of the array WORK πŸ”₯
  • RWORK β€” RWORK is DOUBLE PRECISION array 🌸
  • RESULT β€” RESULT is DOUBLE PRECISION array, dimension (15); the test ratios are:
First, the 2-by-2 CSD:
RESULT(1) = norm( U1'*X11*V1 - D11 ) / ( MAX(1,P,Q)*EPS2 )
RESULT(2) = norm( U1'*X12*V2 - D12 ) / ( MAX(1,P,M-Q)*EPS2 )
RESULT(3) = norm( U2'*X21*V1 - D21 ) / ( MAX(1,M-P,Q)*EPS2 )
RESULT(4) = norm( U2'*X22*V2 - D22 ) / ( MAX(1,M-P,M-Q)*EPS2 )
RESULT(5) = norm( I - U1'*U1 ) / ( MAX(1,P)*ULP )
RESULT(6) = norm( I - U2'*U2 ) / ( MAX(1,M-P)*ULP )
RESULT(7) = norm( I - V1T'*V1T ) / ( MAX(1,Q)*ULP )
RESULT(8) = norm( I - V2T'*V2T ) / ( MAX(1,M-Q)*ULP )
RESULT(9) = 0        if THETA is in increasing order and
                     all angles are in [0,pi/2]

                  = ULPINV   otherwise.
Then, the 2-by-1 CSD:
RESULT(10) = norm( U1'*X11*V1 - D11 ) / ( MAX(1,P,Q)*EPS2 )
RESULT(11) = norm( U2'*X21*V1 - D21 ) / ( MAX(1,M-P,Q)*EPS2 )
RESULT(12) = norm( I - U1'*U1 ) / ( MAX(1,P)*ULP )
RESULT(13) = norm( I - U2'*U2 ) / ( MAX(1,M-P)*ULP )
RESULT(14) = norm( I - V1T'*V1T ) / ( MAX(1,Q)*ULP )
RESULT(15) = 0        if THETA is in increasing order and
                              all angles are in [0,pi/2]

                   = ULPINV   otherwise.
( EPS2 = MAX( norm( I - X'*X ) / M, ULP ). )

πŸ‘‘ Author πŸ‘‘

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

Definition at line 226 of file dcsdts.f.

🌈 Author 🌈

Generated automatically by Doxygen for LAPACK from the source code.


mwah πŸ’‹ β€” footer deets, bestie: LAPACK Version 3.12.0, and the path is /home/abui...IG/dcsdts.f(3). No date on this one, so that's the whole sign-off vibe πŸŽ€πŸ’…

πŸ“¦ where this page comes from