SRC/slasd6.f(3)
π NAME π
SRC/slasd6.f β this is the SRC/slasd6.f(3) page from the Library Functions Manual, bestie π¦. We're diving into slasd6, and it's lowkey iconic.
β¨ SYNOPSIS β¨
π§ Functions/Subroutines
Here's the signature, copied exactly because we do not mess with signatures:
subroutine slasd6 (icompq, nl, nr, sqre, d, vf, vl, alpha, beta, idxq,
perm, givptr, givcol, ldgcol, givnum, ldgnum, poles, difl, difr, z,
k, c, s, work, iwork, info)
SLASD6 computes the SVD of an updated upper bidiagonal matrix obtained by merging two smaller ones by appending a row. Used by sbdsdc.
π¦ Function/Subroutine Documentation π¦
Typed signature, also exact, no cap:
subroutine slasd6 (integer icompq, integer nl, integer nr, integer sqre,
real, dimension( * ) d, real, dimension( * ) vf, real, dimension( * )
vl, real alpha, real beta, integer, dimension( * ) idxq, integer,
dimension( * ) perm, integer givptr, integer, dimension( ldgcol, * )
givcol, integer ldgcol, real, dimension( ldgnum, * ) givnum, integer
ldgnum, real, dimension( ldgnum, * ) poles, real, dimension( * ) difl,
real, dimension( * ) difr, real, dimension( * ) z, integer k, real c,
real s, real, dimension( * ) work, integer, dimension( * ) iwork,
integer info)
SLASD6 computes the SVD of an updated upper bidiagonal matrix obtained by merging two smaller ones by appending a row. Used by sbdsdc.
π― Purpose
Okay so SLASD6 computes the SVD of an updated upper bidiagonal matrix B obtained by merging two smaller ones by appending a row. This routine is used only for the problem which requires all singular values and optionally singular vector matrices in factored form. B is an N-by-M matrix with N = NL + NR + 1 and M = N + SQRE. A related subroutine, SLASD1, handles the case in which all singular values and singular vectors of the bidiagonal matrix are desired.
SLASD6 computes the SVD as follows:
( D1(in) 0 0 0 )
B = U(in) * ( Z1**T a Z2**T b ) * VT(in)
( 0 0 D2(in) 0 )
= U(out) * ( D(out) 0) * VT(out)
where Z**T = (Z1**T a Z2**T b) = u**T VT**T, and u is a vector of dimension M with ALPHA and BETA in the NL+1 and NL+2 th entries and zeros elsewhere; and the entry b is empty if SQRE = 0.
The singular values of B can be computed using D1, D2, the first components of all the right singular vectors of the lower block, and the last components of all the right singular vectors of the upper block. These components are stored and updated in VF and VL, respectively, in SLASD6. Hence U and VT are not explicitly referenced.
The singular values are stored in D. The algorithm consists of two stages:
- The first stage consists of deflating the size of the problem when there are multiple singular values or if there is a zero in the
Zvector. For each such occurrence the dimension of the secular equation problem is reduced by one. This stage is performed by the routineSLASD7. - The second stage consists of calculating the updated singular values. This is done by finding the roots of the secular equation via the routine
SLASD4(as called bySLASD8). This routine also updatesVFandVLand computes the distances between the updated singular values and the old singular values.
SLASD6 is called from SLASDA.
πΈ Parameters
ICOMPQβICOMPQ is INTEGER. Specifies whether singular vectors are to be computed in factored form:= 0: compute singular values only.= 1: compute singular vectors in factored form as well.NLβNL is INTEGER. The row dimension of the upper block.NL >= 1.NRβNR is INTEGER. The row dimension of the lower block.NR >= 1.SQREβSQRE is INTEGER.= 0: the lower block is anNR-by-NRsquare matrix.= 1: the lower block is anNR-by-(NR+1)rectangular matrix. The bidiagonal matrix has row dimensionN = NL + NR + 1, and column dimensionM = N + SQRE.DβD is REAL array, dimension (NL+NR+1). On entryD(1:NL,1:NL)contains the singular values of the upper block, andD(NL+2:N)contains the singular values of the lower block. On exitD(1:N)contains the singular values of the modified matrix.VFβVF is REAL array, dimension (M). On entry,VF(1:NL+1)contains the first components of all right singular vectors of the upper block; andVF(NL+2:M)contains the first components of all right singular vectors of the lower block. On exit,VFcontains the first components of all right singular vectors of the bidiagonal matrix.VLβVL is REAL array, dimension (M). On entry,VL(1:NL+1)contains the last components of all right singular vectors of the upper block; andVL(NL+2:M)contains the last components of all right singular vectors of the lower block. On exit,VLcontains the last components of all right singular vectors of the bidiagonal matrix.ALPHAβALPHA is REAL. Contains the diagonal element associated with the added row.BETAβBETA is REAL. Contains the off-diagonal element associated with the added row.IDXQβIDXQ is INTEGER array, dimension (N). This contains the permutation which will reintegrate the subproblem just solved back into sorted order, i.e.D( IDXQ( I = 1, N ) )will be in ascending order.PERMβPERM is INTEGER array, dimension ( N ). The permutations (from deflation and sorting) to be applied to each block. Not referenced ifICOMPQ = 0.GIVPTRβGIVPTR is INTEGER. The number of Givens rotations which took place in this subproblem. Not referenced ifICOMPQ = 0.GIVCOLβGIVCOL is INTEGER array, dimension ( LDGCOL, 2 ). Each pair of numbers indicates a pair of columns to take place in a Givens rotation. Not referenced ifICOMPQ = 0.LDGCOLβLDGCOL is INTEGER. Leading dimension ofGIVCOL, must be at leastN.GIVNUMβGIVNUM is REAL array, dimension ( LDGNUM, 2 ). Each number indicates theCorSvalue to be used in the corresponding Givens rotation. Not referenced ifICOMPQ = 0.LDGNUMβLDGNUM is INTEGER. The leading dimension ofGIVNUMandPOLES, must be at leastN.POLESβPOLES is REAL array, dimension ( LDGNUM, 2 ). On exit,POLES(1,*)is an array containing the new singular values obtained from solving the secular equation, andPOLES(2,*)is an array containing the poles in the secular equation. Not referenced ifICOMPQ = 0.DIFLβDIFL is REAL array, dimension ( N ). On exit,DIFL(I)is the distance between theI-th updated (undeflated) singular value and theI-th (undeflated) old singular value.DIFRβDIFR is REAL array, dimension( LDDIFR, 2 )ifICOMPQ = 1and dimension( K )ifICOMPQ = 0. On exit,DIFR(I,1) = D(I) - DSIGMA(I+1),DIFR(K,1)is not defined and will not be referenced. IfICOMPQ = 1,DIFR(1:K,2)is an array containing the normalizing factors for the right singular vector matrix. SeeSLASD8for details onDIFLandDIFR.ZβZ is REAL array, dimension ( M ). The first elements of this array contain the components of the deflation-adjusted updating row vector.KβK is INTEGER. Contains the dimension of the non-deflated matrix, This is the order of the related secular equation.1 <= K <=N.CβC is REAL.Ccontains garbage ifSQRE =0and theC-value of a Givens rotation related to the right null space ifSQRE = 1.SβS is REAL.Scontains garbage ifSQRE =0and theS-value of a Givens rotation related to the right null space ifSQRE = 1.WORKβWORK is REAL array, dimension ( 4 * M ).IWORKβIWORK is INTEGER array, dimension ( 3 * N ).INFOβINFO is INTEGER.= 0: successful exit.< 0: ifINFO = -i, thei-th argument had an illegal value.> 0: ifINFO = 1, a singular value did not converge.
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π«Ά Contributors:
Ming Gu and Huan Ren, Computer Science Division, University of California at Berkeley, USA
π Definition
Definition at line 309 of file slasd6.f.
πΈ Author πΈ
Generated automatically by Doxygen for LAPACK from the source code.
xoxo π this whole page is from LAPACK Version 3.12.0, source SRC/slasd6.f(3) β bye bestie π«Άβ¨
π¦ 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