Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?labrd
Reduces the first nb rows and columns of a general matrix to a bidiagonal form.
Syntax
call slabrd ( m , n , nb , a , lda , d , e , tauq , taup , x , ldx , y , ldy )
call dlabrd ( m , n , nb , a , lda , d , e , tauq , taup , x , ldx , y , ldy )
call clabrd ( m , n , nb , a , lda , d , e , tauq , taup , x , ldx , y , ldy )
call zlabrd ( m , n , nb , a , lda , d , e , tauq , taup , x , ldx , y , ldy )
Include Files
mkl.fi
Description
slabrd dlabrd clabrd zlabrd
The routine reduces the first nb rows and columns of a general m -by- n matrix A to upper or lower bidiagonal form by an orthogonal/unitary transformation Q' * A * P , and returns the matrices X and Y which are needed to apply the transformation to the unreduced part of A .
if m≥n , A is reduced to upper bidiagonal form; if m < n , to lower bidiagonal form.
The matrices Q and P are represented as products of elementary reflectors: Q = H(1)*(2)* ...*H(nb), and P = G(1)*G(2)* ...*G(nb)
Each H (i) and G (i) has the form
H(i) = I - tauq*v*v' and G(i) = I - taup*u*u'
where tauq and taup are scalars, and v and u are vectors.
The elements of the vectors v and u together form the m -by- nb matrix V and the nb -by- n matrix U' which are needed, with X and Y , to apply the transformation to the unreduced part of the matrix, using a block update of the form: A := A - V*Y' - X*U' .
This is an auxiliary routine called by ?gebrd (Reduces a general matrix to bidiagonal form.) .
Input Parameters
- m
-
INTEGER . The number of rows in the matrix A ( m≥ 0 ).
- n
-
INTEGER . The number of columns in A ( n≥ 0 ).
- nb
-
INTEGER . The number of leading rows and columns of A to be reduced.
- a
-
REAL for slabrd DOUBLE PRECISION for dlabrd COMPLEX for clabrd DOUBLE COMPLEX for zlabrd . Array a ( lda ,*) contains the matrix A to be reduced. The second dimension of a must be at least max(1, n) .
- lda
-
INTEGER . The leading dimension of a ; at least max(1, m) .
- ldx
-
INTEGER . The leading dimension of the output array x ; must beat least max(1, m) .
- ldy
-
INTEGER . The leading dimension of the output array y ; must beat least max(1, n) .
Output Parameters
- a
-
On exit, the first nb rows and columns of the matrix are overwritten; the rest of the array is unchanged. if m≥n , elements on and below the diagonal in the first nb columns, with the array tauq , represent the orthogonal/unitary matrix Q as a product of elementary reflectors; and elements above the diagonal in the first nb rows, with the array taup , represent the orthogonal/unitary matrix p as a product of elementary reflectors. if m < n , elements below the diagonal in the first nb columns, with the array tauq , represent the orthogonal/unitary matrix Q as a product of elementary reflectors, and elements on and above the diagonal in the first nb rows, with the array taup , represent the orthogonal/unitary matrix p as a product of elementary reflectors.
- d , e
-
REAL for single-precision flavors DOUBLE PRECISION for double-precision flavors. Arrays, DIMENSION ( nb ) each. The array d contains the diagonal elements of the first nb rows and columns of the reduced matrix: d(i) = a(i,i) . The array e contains the off-diagonal elements of the first nb rows and columns of the reduced matrix.
- tauq , taup
-
REAL for slabrd DOUBLE PRECISION for dlabrd COMPLEX for clabrd DOUBLE COMPLEX for zlabrd . Arrays, DIMENSION ( nb ) each. Contain scalar factors of the elementary reflectors which represent the orthogonal/unitary matrices Q and P , respectively.
- x , y
-
REAL for slabrd DOUBLE PRECISION for dlabrd COMPLEX for clabrd DOUBLE COMPLEX for zlabrd . Arrays, dimension x ( ldx , nb ), y ( ldy , nb ). The array x contains the m -by- nb matrix X required to update the unreduced part of A . The array y contains the n -by- nb matrix Y required to update the unreduced part of A .
Application Notes
if m≥n , then for the elementary reflectors \(H\) (i) and \(G\) (i),
v(1:i-1) = 0 , v(i) = 1 , and v(i:m) is stored on exit in a(i:m, i) ; u(1:i) = 0 , u(i+1) = 1 , and u(i+1:n) is stored on exit in a(i, i+1:n) ;
tauq is stored in tauq (i) and taup in taup (i).
if m < n ,
v(1:i) = 0 , v(i+1) = 1 , and v(i+1:m) is stored on exit in a(i+2:m, i) ; u(1:i-1) = 0 , u(i) = 1 , and u(i:n) is stored on exit in a(i, i+1:n) ; tauq is stored in tauq (i) and taup in taup (i).
The contents of a on exit are illustrated by the following examples with nb = 2 :
where a denotes an element of the original matrix which is unchanged, vi denotes an element of the vector defining \(H\) (i), and ui an element of the vector defining \(G\) (i).