Intel® oneAPI Math Kernel Library Developer Reference - Fortran
Reduces the first nb rows and columns of a general matrix to a bidiagonal form.
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 )
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.
INTEGER. The number of rows in the matrix A (m≥ 0).
INTEGER. The number of columns in A (n≥ 0).
INTEGER. The number of leading rows and columns of A to be reduced.
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).
INTEGER. The leading dimension of a; at least max(1, m).
INTEGER. The leading dimension of the output array x; must beat least max(1, m).
INTEGER. The leading dimension of the output array y; must beat least max(1, n).
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.
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.
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.
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.
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).