TESTING/EIG/zcsdts.f(3)

πŸ“¦
version 3.12.1 Β· 2 versions
, in arch rolling

πŸ’– TESTING/EIG/zcsdts.f(3) πŸ’–

okay so bestie, welcome to the Library Functions Manual page for TESTING/EIG/zcsdts.f β€” yes, the whole filename is the name, and she is very specific. This is the ZCSDTS test routine, and it is here to check the CSD girlies. No cap. πŸ’…


✨ NAME ✨

TESTING/EIG/zcsdts.f

🌟 SYNOPSIS 🌟

🌸 Functions/Subroutines 🌸

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

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

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

πŸ”₯ Purpose πŸ”₯

okay so ZCSDTS tests ZUNCSD, which, given an M-by-M partitioned unitary 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 SORCSD2BY1, 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 β€” INTEGER; the number of rows of the matrix X. M >= 0.
  • P β€” INTEGER; the number of rows of the matrix X11. P >= 0.
  • Q β€” INTEGER; the number of columns of the matrix X11. Q >= 0.
  • X β€” COMPLEX*16 array, dimension (LDX,M); the M-by-M matrix X.
  • XF β€” COMPLEX*16 array, dimension (LDX,M); details of the CSD of X, as returned by ZUNCSD; see ZUNCSD for further details.
  • LDX β€” INTEGER; the leading dimension of the arrays X and XF. LDX >= max( 1,M ).
  • U1 β€” COMPLEX*16 array, dimension(LDU1,P); the P-by-P unitary matrix U1.
  • LDU1 β€” INTEGER; the leading dimension of the array U1. LDU >= max(1,P).
  • U2 β€” COMPLEX*16 array, dimension(LDU2,M-P); the (M-P)-by-(M-P) unitary matrix U2.
  • LDU2 β€” INTEGER; the leading dimension of the array U2. LDU >= max(1,M-P).
  • V1T β€” COMPLEX*16 array, dimension(LDV1T,Q); the Q-by-Q unitary matrix V1T.
  • LDV1T β€” INTEGER; the leading dimension of the array V1T. LDV1T >= max(1,Q).
  • V2T β€” COMPLEX*16 array, dimension(LDV2T,M-Q); the (M-Q)-by-(M-Q) unitary matrix V2T.
  • LDV2T β€” INTEGER; the leading dimension of the array V2T. LDV2T >= max(1,M-Q).
  • THETA β€” 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 ZUNCSD for details.
  • IWORK β€” INTEGER array, dimension (M).
  • WORK β€” COMPLEX*16 array, dimension (LWORK).
  • LWORK β€” INTEGER; the dimension of the array WORK.
  • RWORK β€” DOUBLE PRECISION array.
  • RESULT β€” DOUBLE PRECISION array, dimension (15); the test ratios:

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 🧾

Definition at line 226 of file zcsdts.f.


🌈 Author 🌈

Generated automatically by Doxygen for LAPACK from the source code.


mwah πŸ’‹ β€” LAPACK, Version 3.12.0, TESTING/EIG/zcsdts.f(3). That's the whole vibe, bestie. 🫢✨

πŸ“¦ where this page comes from