slepc-3.21.1 2024-04-26
Report Typos and Errors

# DSGSVD

Dense Generalized Singular Value Decomposition.

### Notes

The problem is expressed as A*X = U*C, B*X = V*S, where A and B are matrices with the same number of columns, m, U and V are orthogonal (unitary), and X is an mxm invertible matrix. The DS object does not expose matrices C and S, instead the singular values sigma, which are the ratios c_i/s_i, are returned in the arguments of DSSolve(). Note that the number of columns of the returned X, U, V may be smaller in the case that some c_i or s_i are zero.

The number of rows of A (and U) is the value n passed with DSSetDimensions(). The number of columns m and the number of rows of B (and V) must be set via DSGSVDSetDimensions().

Internally, LAPACK's representation is used, U'*A*Q = C*[0 R], V'*B*Q = S*[0 R], where X = Q*inv(R) is computed at the end of DSSolve().

If the compact storage format is selected, then a simplified problem is solved, where A and B are bidiagonal (possibly with an arrow), and [A;B] is assumed to have orthonormal columns. We consider two cases: (1) A and B are square mxm upper bidiagonal, and (2) A is lower bidiagonal with m+1 rows and B is square upper bidiagonal. In these cases, R=I so it corresponds to the CS decomposition. The first matrix is stored in two diagonals of DS_MAT_T, while the second matrix is stored in DS_MAT_D and the remaining diagonal of DS_MAT_T.

Allowed arguments of DSVectors() are DS_MAT_U, DS_MAT_V and DS_MAT_X.

### Used DS matrices

 DS_MAT_A - first problem matrix DS_MAT_B - second problem matrix DS_MAT_T - first upper bidiagonal matrix (if compact storage is selected) DS_MAT_D - second upper bidiagonal matrix (if compact storage is selected)

### Implemented methods

 0 - Lapack (_ggsvd3 if available, or _ggsvd)

DSCreate(), DSSetType(), DSType, DSGSVDSetDimensions()

beginner

### Location

src/sys/classes/ds/impls/gsvd/dsgsvd.c

Index of all DS routines