?gbbrd
?gbbrd
Reduces a general band matrix to bidiagonal form.
Syntax
lapack_int LAPACKE_sgbbrd
(
int
matrix_layout
,
char
vect
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ncc
,
lapack_int
kl
,
lapack_int
ku
,
float*
ab
,
lapack_int
ldab
,
float*
d
,
float*
e
,
float*
q
,
lapack_int
ldq
,
float*
pt
,
lapack_int
ldpt
,
float*
c
,
lapack_int
ldc
);
lapack_int LAPACKE_dgbbrd
(
int
matrix_layout
,
char
vect
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ncc
,
lapack_int
kl
,
lapack_int
ku
,
double*
ab
,
lapack_int
ldab
,
double*
d
,
double*
e
,
double*
q
,
lapack_int
ldq
,
double*
pt
,
lapack_int
ldpt
,
double*
c
,
lapack_int
ldc
);
lapack_int LAPACKE_cgbbrd
(
int
matrix_layout
,
char
vect
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ncc
,
lapack_int
kl
,
lapack_int
ku
,
lapack_complex_float*
ab
,
lapack_int
ldab
,
float*
d
,
float*
e
,
lapack_complex_float*
q
,
lapack_int
ldq
,
lapack_complex_float*
pt
,
lapack_int
ldpt
,
lapack_complex_float*
c
,
lapack_int
ldc
);
lapack_int LAPACKE_zgbbrd
(
int
matrix_layout
,
char
vect
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ncc
,
lapack_int
kl
,
lapack_int
ku
,
lapack_complex_double*
ab
,
lapack_int
ldab
,
double*
d
,
double*
e
,
lapack_complex_double*
q
,
lapack_int
ldq
,
lapack_complex_double*
pt
,
lapack_int
ldpt
,
lapack_complex_double*
c
,
lapack_int
ldc
);
Include Files
- mkl.h
Description
The routine reduces an . Here the matrices .
m
-by-n
band matrix A
to upper bidiagonal matrix B
: A
= Q*B*P
H
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, neithervect='N'QnorPis generated.HIf, the routine generates the matrixvect='Q'Q.If, the routine generates the matrixvect='P'P.HIf, the routine generates bothvect='B'QandP.H
- m
- The number of rows in the matrixA().m≥0
- n
- The number of columns inA().n≥0
- ncc
- The number of columns inC().ncc≥0
- kl
- The number of sub-diagonals within the band ofA().kl≥0
- ku
- The number of super-diagonals within the band ofA().ku≥0
- ab,c
- Arrays:ab(size max(1,contains the matrixldab*n) for column major layout and max(1,ldab*m) for row major layout)Ain band storage (see Matrix Storage Schemes).c(size max(1,contains anldc*ncc) for column major layout and max(1,ldc*m) for row major layout)m-by-nccmatrixC.If, the arrayncc= 0cis not referenced.
- ldab
- The leading dimension of the arrayab().ldab≥kl+ku+ 1
- ldpt
- The leading dimension of the output arraypt.ifldpt≥max(1,n)orvect='P''B',otherwise.ldpt≥1
- ldc
- The leading dimension of the arrayc.ifldc≥max(1,m);ncc> 0ifldc≥1.ncc= 0
Output Parameters
- ab
- Overwritten by values generated during the reduction.
- d
- Array, size at least max(1, min(m,n)). Contains the diagonal elements of the matrixB.
- e
- Array, size at leastmax(1, min(.m,n) - 1)Contains the off-diagonal elements ofB.
- q,pt
- Arrays:qsize max(1,contains the outputldq*m)m-by-mmatrixQ.psize max(1,contains the outputldpt*n)n-by-nmatrixP.T
- c
- Overwritten by the product.Q*HCcis not referenced ifncc= 0.
Return Values
This function returns a value
info
.If , the execution is successful.
info
=0If , the
info
= -i
i
-th parameter had an illegal value.Application Notes
The computed matrices = , where
Q
, B
, and P
satisfy Q*B*P
H
A
+ E
||
is a modestly increasing function of E
||2
= c
(n
)ε
||A
||2
, c
(n
)n
, and ε
is the machine precision.If , the total number of floating-point operations for real flavors is approximately the sum of:
m
= n
6*
if n
2
*(kl
+ ku
)vect
= 'N'
ncc
= 03*
if n
2
*ncc
*(kl
+ ku
- 1)/(kl
+ ku
)C
is updated, and 3*
if either n
3
*(kl
+ ku
- 1)/(kl
+ ku
)Q
or P
H
To estimate the number of operations for complex flavors, use the same formulas with the coefficients 20 and 10 (instead of 6 and 3).