Skip to main content
`Ctrl`+`K`

# DSGSVD

Dense Generalized Singular Value Decomposition.

## Notes

The problem is expressed as \(AX = UC\), \(BX = VS\), where \(A\) and \(B\) are matrices with the same number of columns, \(m\), \(U\) and \(V\) are orthogonal (unitary), and \(X\) is an \(m\times m\) invertible matrix. The `DS` object does not expose matrices \(C\) and \(S\), instead the singular values \(\sigma_i\), 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^*AQ = C[0,R]\), \(V^*BQ = S[0, R]\), where \(X = QR^{-1}\) 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 the stacked matrix \(\begin{bmatrix}A^* &B^*\end{bmatrix}^*\) is assumed to have orthonormal columns. We consider two cases,

1. \(A\) and \(B\) are square \(m\times m\) upper bidiagonal, or

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 [Golub and van Loan, 1996]. 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)

- `DS_MAT_U` - (upper) left generalized singular vectors

- `DS_MAT_V` - (lower) left generalized singular vectors

- `DS_MAT_X` - right generalized singular vectors

## Implemented methods

- 0 - Lapack (`_ggsvd3` if available, or `_ggsvd`)

## References

[Gol96]

G. H. Golub and C. F. van Loan. Matrix Computations. The Johns Hopkins University Press, Baltimore, MD, third edition, 1996.

## See Also

DS: Direct Solver (or Dense System), `DSCreate()`, `DSSetType()`, `DSType`, `DSGSVDSetDimensions()`

## Level

beginner

## Location

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

Index of all DS routines Table of Contents for all manual pages Index of all manual pages