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.
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) |
0 | - Lapack (_ggsvd3 if available, or _ggsvd) |