TESTING/EIG/dbdt05.f(3)
π TESTING/EIG/dbdt05.f(3) β the DBDT05 glow-up
Okay bestie, gather round, because this little file lives at TESTING/EIG/dbdt05.f and it is literally the vibe-check machine for your bidiagonal SVD. No cap. π
β¨ NAME β¨
TESTING/EIG/dbdt05.f β that's the whole name, she's lowkey minimal about it π¦
πΈ SYNOPSIS πΈ
So first up, the functions/subroutines situation:
subroutine dbdt05 (m, n, a, lda, s, ns, u, ldu, vt, ldvt, work, resid)β and the subroutine is called DBDT05 π
π Function/Subroutine Documentation π
π§ The one and only subroutine dbdt05 π§
Here's her whole signature, copied exactly because we do NOT mess with types:
subroutine dbdt05 (integer m, integer n, double precision, dimension( lda, *
) a, integer lda, double precision, dimension( * ) s, integer ns, double
precision, dimension( ldu, * ) u, integer ldu, double precision,
dimension( ldvt, * ) vt, integer ldvt, double precision, dimension( * )
work, double precision resid)
Name again, in case you forgot: DBDT05 π«
π― Purpose (the main character moment)
!>
!> DBDT05 reconstructs a bidiagonal matrix B from its (partial) SVD:
!> S = U' * B * V
!> where U and V are orthogonal matrices and S is diagonal.
!>
!> The test ratio to test the singular value decomposition is
!> RESID = norm( S - U' * B * V ) / ( n * norm(B) * EPS )
!> where VT = V' and EPS is the machine precision.
!>
So basically, she takes your bidiagonal B, gets it a fresh fit from its (partial) SVD where S = U' * B * V and U and V are orthogonal and S is diagonal. Then she computes that test ratio to check the SVD is actually serving. And yes, VT = V', and EPS is the machine precision. Slay. π₯
π Parameters (the whole cast, no one gets left out)
MβM is INTEGER. The number of rows of the matricesAandU. Rows, bestie. πNβN is INTEGER. The number of columns of the matricesAandVT. Columns, equally iconic. πAβA is DOUBLE PRECISION array, dimension (LDA,N). AndAitself? It's thembynmatrixA. That's her. π«ΆLDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,M). Respect the constraint fr fr. π¨SβS is DOUBLE PRECISION array, dimension (NS). The singular values from the (partial) SVD ofB, sorted in decreasing order. Big to small, her order, her rules. πNSβNS is INTEGER. The number of singular values/vectors from the (partial) SVD ofB. Count them properly. π’UβU is DOUBLE PRECISION array, dimension (LDU,NS). Thenbynsorthogonal matrixUinS = U' * B * V. Orthogonal queen πLDUβLDU is INTEGER. The leading dimension of the arrayU.LDU >= max(1,N). Another bound, another boundary respected πVTβVT is DOUBLE PRECISION array, dimension (LDVT,N). Thenbynsorthogonal matrixVinS = U' * B * V. Yes, this param is namedVTbut described asVβ that's canon, I don't make the rules, that's literally what it says. πLDVTβLDVT is INTEGER. The leading dimension of the arrayVT. That's it, that's the note. πWORKβWORK is DOUBLE PRECISION array, dimension (M,N). Workspace! Give her somewhere to think. π§RESIDβRESID is DOUBLE PRECISION. The test ratio:norm(S - U' * A * V) / ( n * norm(A) * EPS ). This is the moment of truth, the final score, the vibe check result itself β
π Author
Credit where it's so due:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
(the whole squad π«Ά)
π Definition
Definition at line 125 of file dbdt05.f. β line one-two-five, go look, she's there β¨
π Author (the meta one)
Generated automatically by Doxygen for LAPACK from the source code. β yes, she was generated by Doxygen from the source code, she's a machine-made icon and we love her for it ππ
And that's the whole page bestie! This little gift was brought to you by LAPACK, Version 3.12.0, all sitting pretty under TESTING/EIG/dbdt05.f(3) β mwah, go test that SVD, 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