Developer Reference for Intel® oneAPI Math Kernel Library for C
?gbbrd
Reduces a general band matrix to bidiagonal form.
Syntax
lapack_int LAPACKE_sgbbrd ( intmatrix_layout , charvect , lapack_intm , lapack_intn , lapack_intncc , lapack_intkl , lapack_intku , float*ab , lapack_intldab , float*d , float*e , float*q , lapack_intldq , float*pt , lapack_intldpt , float*c , lapack_intldc );
lapack_int LAPACKE_dgbbrd ( intmatrix_layout , charvect , lapack_intm , lapack_intn , lapack_intncc , lapack_intkl , lapack_intku , double*ab , lapack_intldab , double*d , double*e , double*q , lapack_intldq , double*pt , lapack_intldpt , double*c , lapack_intldc );
lapack_int LAPACKE_cgbbrd ( intmatrix_layout , charvect , lapack_intm , lapack_intn , lapack_intncc , lapack_intkl , lapack_intku , lapack_complex_float*ab , lapack_intldab , float*d , float*e , lapack_complex_float*q , lapack_intldq , lapack_complex_float*pt , lapack_intldpt , lapack_complex_float*c , lapack_intldc );
lapack_int LAPACKE_zgbbrd ( intmatrix_layout , charvect , lapack_intm , lapack_intn , lapack_intncc , lapack_intkl , lapack_intku , lapack_complex_double*ab , lapack_intldab , double*d , double*e , lapack_complex_double*q , lapack_intldq , lapack_complex_double*pt , lapack_intldpt , lapack_complex_double*c , lapack_intldc );
Include Files
mkl.h
Description
The routine reduces an m -by- n band matrix A to upper bidiagonal matrix B : A = Q*B*P^{H} . Here the matrices Q and P are orthogonal (for real A ) or unitary (for complex A ). They are determined as products of Givens rotation matrices, and may be formed explicitly by the routine if required. The routine can also update a matrix C as follows: C = Q^{H}*C .
Input Parameters
- matrix_layout
-
Specifies whether matrix storage layout is row major ( LAPACK_ROW_MAJOR ) or column major ( LAPACK_COL_MAJOR ).
vect
Must be ‘N’ or ‘Q’ or ‘P’ or ‘B’ .
If vect = 'N' , neither Q nor P:code:`H` is generated. If vect = 'Q' , the routine generates the matrix Q . If vect = 'P' , the routine generates the matrix P:code:`H` . If vect = 'B' , the routine generates both Q and P:code:`H` .
m
The number of rows in the matrix A ( m≥ 0 ).
n
The number of columns in A ( n≥ 0 ).
ncc
The number of columns in C ( ncc≥ 0 ).
kl
The number of sub-diagonals within the band of A ( kl≥ 0 ).
ku
The number of super-diagonals within the band of A ( ku≥ 0 ).
- ab , c , work
-
REAL for sgbbrd DOUBLE PRECISION for dgbbrd COMPLEX for cgbbrd DOUBLE COMPLEX for zgbbrd . Arrays:
ab (size max(1, ldab * n ) for column major layout and max(1, ldab * m ) for row major layout) contains the matrix A in band storage (see Matrix Storage Schemes ).
The second dimension of a must be at least max(1, n ).
c (size max(1, ldc * ncc ) for column major layout and max(1, ldc * m ) for row major layout) contains an m -by- ncc matrix C .
If ncc = 0 , the array c is not referenced. The second dimension of c must be at least max(1, ncc ). work (*) is a workspace array. The dimension of work must be at least 2*max( m , n ) for real flavors, or max( m , n ) for complex flavors.
ldab
The leading dimension of the array ab ( ldab≥kl + ku + 1 ).
ldq
The leading dimension of the output array q .
ldq≥ max(1, m) if vect = 'Q' or ‘B’ , ldq≥ 1 otherwise.
ldpt
The leading dimension of the output array pt .
ldpt≥ max(1, n) if vect = 'P' or ‘B’ , ldpt≥ 1 otherwise.
ldc
The leading dimension of the array c .
ldc≥ max(1, m) if ncc > 0 ; ldc≥ 1 if ncc = 0 .
- rwork
-
REAL for cgbbrd DOUBLE PRECISION for zgbbrd . A workspace array, size at least max( m , n ).
Output Parameters
- ab
-
Overwritten by values generated during the reduction.
- d
-
REAL for single-precision flavors DOUBLE PRECISION for double-precision flavors. Array, size at least max(1, min( m , n )). Contains the diagonal elements of the matrix B .
- e
-
REAL for single-precision flavors DOUBLE PRECISION for double-precision flavors. Array, size at least max(1, min(m, n) - 1) . Contains the off-diagonal elements of B .
- q , pt
-
REAL for sgebrd DOUBLE PRECISION for dgebrd COMPLEX for cgebrd DOUBLE COMPLEX for zgebrd . Arrays:
q size max(1, ldq * m ) contains the output m -by- m matrix Q .
The second dimension of q must be at least max(1, m ).
p size max(1, ldpt * n ) contains the output n -by- n matrix P:code:`T` .
The second dimension of pt must be at least max(1, n ).
- c
-
Overwritten by the product Q^{H}*C . c is not referenced if ncc = 0.
Return Values
This function returns a value info .
If info=0 , the execution is successful.
If info = -i , the i -th parameter had an illegal value.
LAPACK 95 Interface Notes
There exist FORTRAN 77 and FORTRAN 95 interfaces for this routine. See the Intel® oneMKL Fortran Developer Reference for details.
Application Notes
The computed matrices \(Q\) , \(B\) , and \(P\) satisfy \(Q B P^{H} = A + E\) , where \(||E||_{2} = c(n)\varepsilon ||A||_{2}, c(n)\) is a modestly increasing function of n , and \(\varepsilon\) is the machine precision.
If m = n , the total number of floating-point operations for real flavors is approximately the sum of:
\(6 n^{2} (kl + ku)\) if vect = 'N' and ncc = 0 ,
\(3 n^{2} ncc (kl + ku - 1)/(kl + ku)\) if \(C\) is updated, and
\(3 n^{3} (kl + ku - 1)/(kl + ku)\) if either \(Q\) or \(P^{H}\) is generated (double this if both).
To estimate the number of operations for complex flavors, use the same formulas with the coefficients 20 and 10 (instead of 6 and 3).