|
|
◆ zhbtrd()
| void zhbtrd |
( |
char |
vect, |
|
|
char |
uplo, |
|
|
int |
n, |
|
|
int |
kd, |
|
|
int |
ldab, |
|
|
doublecomplex |
ab[], |
|
|
double |
d[], |
|
|
double |
e[], |
|
|
int |
ldq, |
|
|
doublecomplex |
q[], |
|
|
doublecomplex |
work[], |
|
|
int * |
info |
|
) |
| |
Reduces a complex Hermitian band matrix to tridiagonal form
- Purpose
- This routine reduces a complex Hermitian band matrix A to real symmetric tridiagonal form T by a unitary similarity transformation: Q^H * A * Q = T.
- Parameters
-
| [in] | vect | = 'N': Do not form Q.
= 'V': Form Q.
= 'U': Update a matrix X, by forming X*Q. |
| [in] | uplo | = 'U': Upper triangle of A is stored.
= 'L': Lower triangle of A is stored. |
| [in] | n | Order of the matrix A. (n >= 0) (If n = 0, returns without computation) |
| [in] | kd | Number of superdiagonals of the matrix A if uplo = 'U' or number of subdiagonals if uplo = 'L'. (kd >= 0) |
| [in] | ldab | Leading dimension of the two dimensional array ab[][]. (ldab >= kd + 1) |
| [in,out] | ab[][] | Array ab[lab][ldab] (lab >= n)
[in] The upper or lower triangle of the Hermitian band matrix A, stored in the first kd+1 columns of the array. The j-th column of A is stored in the j-th row of the array ab as follows.
uplo = 'U': ab[j][kd + i - j] = A(i, j) for max(0, j - kd - 1) <= i <= j <= n - 1.
uplo = 'L': ab[j][i - j] = A(i, j) for 0 <= j <= i <= min(n - 1, j + kd - 1).
[out] The diagonal elements of ab are overwritten by the diagonal elements of the tridiagonal matrix T. If kd > 0, the elements on the first superdiagonal (if uplo = 'U') or the first subdiagonal (if uplo = 'L') are overwritten by the off-diagonal elements of T. The rest of ab is overwritten by values generated during the reduction. |
| [out] | d[] | Array d[ld] (ld >= n)
The diagonal elements of the tridiagonal matrix T: d[i] = a[i][i]. |
| [out] | e[] | Array e[le] (le >= n - 1)
The off-diagonal elements of the tridiagonal matrix T: e[i] = a[i+1][i] if uplo = 'U', e[i] = a[i][i+1] if uplo = 'L'. |
| [in] | ldq | Leading dimension of the two dimensional array q[][]. (ldq >= 1 if vect = 'N'. ldq >= n if vect = 'V' or 'U'.) |
| [in,out] | q[][] | Array q[lq][ldq] (lq >= n)
[in] If vect = 'U', then q must contain an n x n matrix X. If vect = 'N' or 'V', then q need not be set.
[out] If vect = 'V', q contains the n x n unitary matrix Q. If vect = 'U', q contains the product X*Q. If vect = 'N', the array q is not referenced. |
| [out] | work[] | Array work[lwork] (lwork >= n)
Work array. |
| [out] | info | = 0: Successful exit.
= -1: The argument vect had an illegal value. (vect != 'N', 'V' nor 'U')
= -2: The argument uplo had an illegal value. (uplo != 'U' nor 'L')
= -3: The argument n had an illegal value. (n < 0) = -4: The argument kd had an illegal value. (kd < 0) = -5: The argument ldab had an illegal value (ldab < kd + 1)
= -9: The argument ldz had an illegal value (ldq too small)
|
- Reference
- LAPACK
|