Developer Reference for Intel® oneAPI Math Kernel Library for C
A newer version of this document is available. Customers should click here to go to the newest version.
?ggsvp3
Performs preprocessing for a generalized SVD.
Syntax
lapack_int LAPACKE_sggsvp3 (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, float * a, lapack_int lda, float * b, lapack_int ldb, float tola, float tolb, lapack_int * k, lapack_int * l, float * u, lapack_int ldu, float * v, lapack_int ldv, float * q, lapack_int ldq);
lapack_int LAPACKE_dggsvp3 (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, double * a, lapack_int lda, double * b, lapack_int ldb, double tola, double tolb, lapack_int * k, lapack_int * l, double * u, lapack_int ldu, double * v, lapack_int ldv, double * q, lapack_int ldq);
lapack_int LAPACKE_cggsvp3 (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_float * a, lapack_int lda, lapack_complex_float * b, lapack_int ldb, float tola, float tolb, lapack_int * k, lapack_int * l, lapack_complex_float * u, lapack_int ldu, lapack_complex_float * v, lapack_int ldv, lapack_complex_float * q, lapack_int ldq);
lapack_int LAPACKE_zggsvp3 (int matrix_layout, char jobu, char jobv, char jobq, lapack_int m, lapack_int p, lapack_int n, lapack_complex_double * a, lapack_int lda, lapack_complex_double * b, lapack_int ldb, double tola, double tolb, lapack_int * k, lapack_int * l, lapack_complex_double * u, lapack_int ldu, lapack_complex_double * v, lapack_int ldv, lapack_complex_double * q, lapack_int ldq);
Include Files
- mkl_lapack.h
 
Include Files
- mkl.h
 
Description
?ggsvp3 computes orthogonal or unitary matrices U, V, and Q such that
for real flavors:
 if m - k - l≥ 0;
 if m - k - l< 0;

for complex flavors:
 if m - k - l≥ 0;
 if m - k-l< 0;

where the k-by-k matrix A12 and l-by-l matrix B13 are nonsingular upper triangular; A23 is l-by-l upper triangular if m-k-l≥ 0, otherwise A23 is (m-k-by-l upper trapezoidal. k + l = the effective numerical rank of the (m + p)-by-n matrix (AT,BT)T for real flavors or (AH,BH)H for complex flavors.
This decomposition is the preprocessing step for computing the Generalized Singular Value Decomposition (GSVD), see ?ggsvd3.
Input Parameters
- matrix_layout
 -  
     
Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
 - jobu
 -  
     
= 'U': Orthogonal/unitary matrix U is computed;
= 'N': U is not computed.
 - jobv
 -  
     
= 'V': Orthogonal/unitary matrix V is computed;
= 'N': V is not computed.
 - jobq
 -  
     
= 'Q': Orthogonal/unitary matrix Q is computed;
= 'N': Q is not computed.
 - m
 -  
     
The number of rows of the matrix A.
m≥ 0.
 - p
 -  
     
The number of rows of the matrix B.
p≥ 0.
 - n
 -  
     
The number of columns of the matrices A and B.
n≥ 0.
 - a
 -  
     
Array, size (lda*n).
On entry, the m-by-n matrix A.
 - lda
 -  
     
The leading dimension of the array a.
lda≥ max(1,m).
 - b
 -  
     
Array, size (ldb*n).
On entry, the p-by-n matrix B.
 - ldb
 -  
     
The leading dimension of the array b.
ldb≥ max(1,p).
 - tola, tolb
 -  
     
tola and tolb are the thresholds to determine the effective numerical rank of matrix B and a subblock of A. Generally, they are set to
tola = max(m,n)*norm(a)*MACHEPS,
tolb = max(p,n)*norm(b)*MACHEPS.
The size of tola and tolb may affect the size of backward errors of the decomposition.
 - ldu
 -  
     
The leading dimension of the array u.
ldu≥ max(1,m) if jobu = 'U'; ldu≥ 1 otherwise.
 - ldv
 -  
     
The leading dimension of the array v.
ldv≥ max(1,p) if jobv = 'V'; ldv≥ 1 otherwise.
 - ldq
 -  
     
The leading dimension of the array q.
ldq≥ max(1,n) if jobq = 'Q'; ldq≥ 1 otherwise.
 
Output Parameters
a  |  
      On exit, a contains the triangular (or trapezoidal) matrix described in the Description section.  |  
     
b  |  
      On exit, b contains the triangular matrix described in the Description section.  |  
     
k, l  |  
      On exit, k and l specify the dimension of the subblocks described in Description section. k + l = effective numerical rank of (AT,BT)T for real flavors or (AH,BH)H for complex flavors.  |  
     
u  |  
      Array, size (ldu*m). If jobu = 'U', u contains the orthogonal/unitary matrix U. If jobu = 'N', u is not referenced.  |  
     
v  |  
      Array, size (ldv*p). If jobv = 'V', v contains the orthogonal/unitary matrix V. If jobv = 'N', v is not referenced.  |  
     
q  |  
      Array, size (ldq*n). If jobq = 'Q', q contains the orthogonal/unitary matrix Q. If jobq = 'N', q is not referenced.  |  
     
Return Values
This function returns a value info.
= 0: successful exit.
< 0: if info = -i, the i-th argument had an illegal value.
Application Notes
The subroutine uses LAPACK subroutine ?geqp3 for the QR factorization with column pivoting to detect the effective numerical rank of the A matrix. It may be replaced by a better rank determination strategy.
?ggsvp3 replaces the deprecated subroutine ?ggsvp.