bdsvdx(3)

bdsvdx β€” bidiagonal SVD, bisection πŸ’…

okay so this is the bdsvdx(3) page from the Library Functions Manual, and it's all about computing a bidiagonal SVD by bisection. not me being obsessed with tridiagonal matrices, but here we are πŸ¦‹


✨ NAME ✨

bdsvdx β€” bdsvdx: bidiagonal SVD, bisection πŸŽ€


🌸 SYNOPSIS 🌸

Functions

the Fortran subroutines on deck are these two icons, no cap:

       subroutine dbdsvdx (uplo, jobz, range, n, d, e, vl, vu, il, iu, ns, s,
           z, ldz, work, iwork, info)

that one is DBDSVDX πŸ’–

       subroutine sbdsvdx (uplo, jobz, range, n, d, e, vl, vu, il, iu, ns, s,
           z, ldz, work, iwork, info)

and that one is SBDSVDX ✨


πŸ¦‹ Detailed Description

the detailed description is literally the function documentation right below β€” both dbdsvdx and sbdsvdx get their full moment πŸ’…


πŸ“š Function Documentation

dbdsvdx β€” DBDSVDX πŸ’œ

here's the exact signature, bestie:

       subroutine dbdsvdx (character uplo, character jobz, character range, integer
           n, double precision, dimension( * ) d, double precision, dimension( * )
           e, double precision vl, double precision vu, integer il, integer iu,
           integer ns, double precision, dimension( * ) s, double precision,
           dimension( ldz, * ) z, integer ldz, double precision, dimension( * )
           work, integer, dimension( * ) iwork, integer info)

DBDSVDX

🎯 Purpose

so DBDSVDX computes the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B, B = U * S * VT, where S is a diagonal matrix with non-negative diagonal elements (the singular values of B), and U and VT are orthogonal matrices of left and right singular vectors, respectively. periodt.

given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] and superdiagonal E = [ e_1 e_2 ... e_N-1 ], DBDSVDX computes the singular value decomposition of B through the eigenvalues and eigenvectors of the N*2-by-N*2 tridiagonal matrix

       |  0  d_1                |
       | d_1  0  e_1            |
TGK = |     e_1  0  d_2        |
       |         d_2  .   .     |
       |              .   .   . |

if (s,u,v) is a singular triplet of B with ||u|| = ||v|| = 1, then (+/-s,q), ||q|| = 1, are eigenpairs of TGK, with q = P * ( u' +/-v' ) / sqrt(2) = ( v_1 u_1 v_2 u_2 ... v_n u_n ) / sqrt(2), and P = [ e_{n+1} e_{1} e_{n+2} e_{2} ... ].

given a TGK matrix, one can either a) compute -s,-v and change signs so that the singular values (and corresponding vectors) are already in descending order (as in DGESVD/DGESDD) or b) compute s,v and reorder the values (and corresponding vectors). DBDSVDX implements a) by calling DSTEVX (bisection plus inverse iteration, to be replaced with a version of the Multiple Relative Robust Representation algorithm. (See P. Willems and B. Lang, A framework for the MR^3 algorithm: theory and implementation, SIAM J. Sci. Comput., 35:740-766, 2013.) πŸ”₯

πŸŽ€ Parameters

  • UPLO β€” CHARACTER*1. = 'U': B is upper bidiagonal; = 'L': B is lower bidiagonal. πŸ‘‘
  • JOBZ β€” CHARACTER*1. = 'N': Compute singular values only; = 'V': Compute singular values and singular vectors. ✨
  • RANGE β€” CHARACTER*1. = 'A': all singular values will be found. = 'V': all singular values in the half-open interval [VL,VU) will be found. = 'I': the IL-th through IU-th singular values will be found. πŸ’–
  • N β€” INTEGER. The order of the bidiagonal matrix. N >= 0. πŸ¦‹
  • D β€” DOUBLE PRECISION array, dimension (N). The n diagonal elements of the bidiagonal matrix B. πŸ“
  • E β€” DOUBLE PRECISION array, dimension (max(1,N-1)). The (n-1) superdiagonal elements of the bidiagonal matrix B in elements 1 to N-1. 🌸
  • VL β€” DOUBLE PRECISION. If RANGE='V', the lower bound of the interval to be searched for singular values. VU > VL. Not referenced if RANGE = 'A' or 'I'. πŸ’œ
  • VU β€” DOUBLE PRECISION. If RANGE='V', the upper bound of the interval to be searched for singular values. VU > VL. Not referenced if RANGE = 'A' or 'I'. 🌈
  • IL β€” INTEGER. If RANGE='I', the index of the smallest singular value to be returned. 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. Not referenced if RANGE = 'A' or 'V'. πŸŽ€
  • IU β€” INTEGER. If RANGE='I', the index of the largest singular value to be returned. 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. Not referenced if RANGE = 'A' or 'V'. ⭐
  • NS β€” INTEGER. The total number of singular values found. 0 <= NS <= N. If RANGE = 'A', NS = N, and if RANGE = 'I', NS = IU-IL+1. πŸ’…
  • S β€” DOUBLE PRECISION array, dimension (N). The first NS elements contain the selected singular values in ascending order. 🫢
  • Z β€” DOUBLE PRECISION array, dimension (2*N,K). If JOBZ = 'V', then if INFO = 0 the first NS columns of Z contain the singular vectors of the matrix B corresponding to the selected singular values, with U in rows 1 to N and V in rows N+1 to N*2, i.e.
Z = [ U ]
    [ V ]

If JOBZ = 'N', then Z is not referenced. Note: The user must ensure that at least K = NS+1 columns are supplied in the array Z; if RANGE = 'V', the exact value of NS is not known in advance and an upper bound must be used. 🧚

  • LDZ β€” INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(2,N*2). πŸ’€
  • WORK β€” DOUBLE PRECISION array, dimension (14*N). πŸ”₯
  • IWORK β€” INTEGER array, dimension (12*N). If JOBZ = 'V', then if INFO = 0, the first NS elements of IWORK are zero. If INFO > 0, then IWORK contains the indices of the eigenvectors that failed to converge in DSTEVX. 😭
  • INFO β€” INTEGER. = 0: successful exit. < 0: if INFO = -i, the i-th argument had an illegal value. > 0: if INFO = i, then i eigenvectors failed to converge in DSTEVX. The indices of the eigenvectors (as returned by DSTEVX) are stored in the array IWORK. If INFO = N*2 + 1, an internal error occurred. πŸ™ˆ

πŸ‘‘ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

πŸ“Œ Definition

Definition at line 224 of file dbdsvdx.f. πŸŽ€


sbdsvdx β€” SBDSVDX πŸ’™

here's the exact signature for this one too:

       subroutine sbdsvdx (character uplo, character jobz, character range, integer
           n, real, dimension( * ) d, real, dimension( * ) e, real vl, real vu,
           integer il, integer iu, integer ns, real, dimension( * ) s, real,
           dimension( ldz, * ) z, integer ldz, real, dimension( * ) work, integer,
           dimension( * ) iwork, integer info)

SBDSVDX

🎯 Purpose

so SBDSVDX computes the singular value decomposition (SVD) of a real N-by-N (upper or lower) bidiagonal matrix B, B = U * S * VT, where S is a diagonal matrix with non-negative diagonal elements (the singular values of B), and U and VT are orthogonal matrices of left and right singular vectors, respectively. periodt.

given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] and superdiagonal E = [ e_1 e_2 ... e_N-1 ], SBDSVDX computes the singular value decomposition of B through the eigenvalues and eigenvectors of the N*2-by-N*2 tridiagonal matrix

       |  0  d_1                |
       | d_1  0  e_1            |
TGK = |     e_1  0  d_2        |
       |         d_2  .   .     |
       |              .   .   . |

if (s,u,v) is a singular triplet of B with ||u|| = ||v|| = 1, then (+/-s,q), ||q|| = 1, are eigenpairs of TGK, with q = P * ( u' +/-v' ) / sqrt(2) = ( v_1 u_1 v_2 u_2 ... v_n u_n ) / sqrt(2), and P = [ e_{n+1} e_{1} e_{n+2} e_{2} ... ].

given a TGK matrix, one can either a) compute -s,-v and change signs so that the singular values (and corresponding vectors) are already in descending order (as in SGESVD/SGESDD) or b) compute s,v and reorder the values (and corresponding vectors). SBDSVDX implements a) by calling SSTEVX (bisection plus inverse iteration, to be replaced with a version of the Multiple Relative Robust Representation algorithm. (See P. Willems and B. Lang, A framework for the MR^3 algorithm: theory and implementation, SIAM J. Sci. Comput., 35:740-766, 2013.) πŸ”₯

πŸŽ€ Parameters

  • UPLO β€” CHARACTER*1. = 'U': B is upper bidiagonal; = 'L': B is lower bidiagonal. πŸ‘‘
  • JOBZ β€” CHARACTER*1. = 'N': Compute singular values only; = 'V': Compute singular values and singular vectors. ✨
  • RANGE β€” CHARACTER*1. = 'A': all singular values will be found. = 'V': all singular values in the half-open interval [VL,VU) will be found. = 'I': the IL-th through IU-th singular values will be found. πŸ’–
  • N β€” INTEGER. The order of the bidiagonal matrix. N >= 0. πŸ¦‹
  • D β€” REAL array, dimension (N). The n diagonal elements of the bidiagonal matrix B. πŸ“
  • E β€” REAL array, dimension (max(1,N-1)). The (n-1) superdiagonal elements of the bidiagonal matrix B in elements 1 to N-1. 🌸
  • VL β€” REAL. If RANGE='V', the lower bound of the interval to be searched for singular values. VU > VL. Not referenced if RANGE = 'A' or 'I'. πŸ’œ
  • VU β€”
  • VU β€” VU is REAL. Bestie, if RANGE='V', this is the upper bound of the interval to be searched for singular values. VU > VL. Not referenced if RANGE = 'A' or 'I'. πŸ¦‹
  • IL β€” IL is INTEGER. If RANGE='I', this is the index of the smallest singular value to be returned. 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. Not referenced if RANGE = 'A' or 'V'. ✨
  • IU β€” IU is INTEGER. If RANGE='I', this is the index of the largest singular value to be returned. 1 <= IL <= IU <= min(M,N), if min(M,N) > 0. Not referenced if RANGE = 'A' or 'V'. πŸ’–
  • NS β€” NS is INTEGER. The total number of singular values found. 0 <= NS <= N. If RANGE = 'A', NS = N, and if RANGE = 'I', NS = IU-IL+1. πŸŽ€
  • S β€” S is REAL array, dimension (N). The first NS elements contain the selected singular values in ascending order. 🌸
  • Z β€” Z is REAL array, dimension (2*N,K). If JOBZ = 'V', then if INFO = 0 the first NS columns of Z contain the singular vectors of the matrix B corresponding to the selected singular values, with U in rows 1 to N and V in rows N+1 to N*2, i.e.
Z = [ U ]
    [ V ]

If JOBZ = 'N', then Z is not referenced. Note: The user must ensure that at least K = NS+1 columns are supplied in the array Z; if RANGE = 'V', the exact value of NS is not known in advance and an upper bound must be used. 🫢

  • LDZ β€” LDZ is INTEGER. The leading dimension of the array Z. LDZ >= 1, and if JOBZ = 'V', LDZ >= max(2,N*2). 🌈
  • WORK β€” WORK is REAL array, dimension (14*N). ⭐
  • IWORK β€” IWORK is INTEGER array, dimension (12*N). If JOBZ = 'V', then if INFO = 0, the first NS elements of IWORK are zero. If INFO > 0, then IWORK contains the indices of the eigenvectors that failed to converge in DSTEVX. 🧚
  • INFO β€” INFO is INTEGER.
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i, then i eigenvectors failed to converge
         in SSTEVX. The indices of the eigenvectors
         (as returned by SSTEVX) are stored in the
         array IWORK.
      if INFO = N*2 + 1, an internal error occurred.

Author

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

Definition at line 224 of file sbdsvdx.f. πŸ‘‘

Author

Generated automatically by Doxygen for LAPACK from the source code. πŸ€–πŸ’…


That's the footer, bestie: LAPACK, version 3.12.0, page bdsvdx(3) β€” bye! βœ¨πŸ¦‹

πŸ“¦ where this page comes from