TESTING/EIG/dcsdts.f(3)
π TESTING/EIG/dcsdts.f π
okay bestie, this page is from the Library Functions Manual and it's all about TESTING/EIG/dcsdts.f β yes, manual name folded in right here at the top, no cap. It's giving very specific numerical-testing main character energy, and honestly? Iconic. π
β¨
β¨ NAME β¨
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
π¦ Function/Subroutine Documentation π¦
subroutine dcsdts
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
Purpose π«
bestie, here's the exact math tea β source comment markers and all β because every symbol matters:
!>
!> 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 WORKRWORKβRWORK is DOUBLE PRECISION arrayRESULTβ the test-ratio queen π, and here is every single formula exactly:
RESULT is 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 at line 226 of file dcsdts.f.
π Author π
Generated automatically by Doxygen for LAPACK from the source code.
okay, that's the whole page, bestie! Final sign-off: this footer energy is LAPACK Version 3.12.0, with the source/version tag TESTING/EIG/dcsdts.f(3) β and no separate date is shown here, so I'm not inventing one. Periodt. πβ¨π«Ά
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms