SCSDTS(3)

๐Ÿ“ฆ version 3.12.0, in opensuse-leap 16.0

๐ŸŽ€ SCSDTS(3) โ€” LAPACK Library Functions Manual ๐ŸŽ€

okay bestie, meet SCSDTS: she's a LAPACK test routine, and she's here to test SORCSD and SORCSD2BY1. It's giving linear algebra, but make it cute. โœจ


๐ŸŒธ NAME ๐ŸŒธ

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

That's the file, bestie. That's the whole NAME section, no cap. ๐Ÿ’…

โœจ SYNOPSIS โœจ

Functions/Subroutines

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

๐Ÿ“š Function/Subroutine Documentation ๐Ÿ“š

subroutine SCSDTS

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

๐ŸŽฏ Purpose

SCSDTS tests SORCSD. Given an M-by-M partitioned orthogonal matrix X, like this:

             Q  M-Q
      X = [ X11 X12 ] P   ,
          [ X21 X22 ] M-P

SORCSD 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 ]

She also tests SORCSD2BY1. Given this vibe:

         Q
      [ X11 ] P   ,
      [ X21 ] M-P

it 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. It's the number of rows of the matrix X. M >= 0. ๐Ÿซถ

P

P is INTEGER. It's the number of rows of the matrix X11. P >= 0.

Q

Q is INTEGER. It's the number of columns of the matrix X11. Q >= 0.

X

X is REAL array, dimension (LDX,M). The M-by-M matrix X.

XF

XF is REAL array, dimension (LDX,M). Details of the CSD of X, as returned by SORCSD; see SORCSD for further details.

LDX

LDX is INTEGER. The leading dimension of the arrays X and XF. LDX >= max( 1,M ).

U1

U1 is REAL 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 REAL 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 REAL 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 REAL 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 REAL 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 SORCSD for details.

IWORK

IWORK is INTEGER array, dimension (M).

WORK

WORK is REAL array, dimension (LWORK).

LWORK

LWORK is INTEGER. The dimension of the array WORK.

RWORK

RWORK is REAL array.

RESULT

RESULT is REAL 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.

And the lil definition: 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 scsdts.f.

๐Ÿค– Author ๐Ÿค–

Generated automatically by Doxygen for LAPACK from the source code.


okay bestie, that's the whole vibe: LAPACK Version 3.12.0, source page /home/abui...IG/scsdts.f(3). The footer didn't hand me a date, so I'm not inventing one โ€” slay responsibly. ๐Ÿ’…โœจ

๐Ÿ“ฆ where this page comes from