Generates the complex unitary matrix Q determined by ?gehrd.
lapack_int LAPACKE_cunghr (int matrix_layout, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_float* a, lapack_int lda, const lapack_complex_float* tau);
lapack_int LAPACKE_zunghr (int matrix_layout, lapack_int n, lapack_int ilo, lapack_int ihi, lapack_complex_double* a, lapack_int lda, const lapack_complex_double* tau);
The routine is intended to be used following a call to cgehrd/zgehrd, which reduces a complex matrix A to upper Hessenberg form H by a unitary similarity transformation: A = Q*H*QH. ?gehrd represents the matrix Q as a product of ihi-iloelementary reflectors. Here ilo and ihi are values determined by cgebal/zgebal when balancing the matrix; if the matrix has not been balanced, ilo = 1 and ihi = n.
Use the routine unghr to generate Q explicitly as a square matrix. The matrix Q has the structure:
where Q22 occupies rows and columns ilo to ihi.
Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
The order of the matrix Q (n≥ 0).
- ilo, ihi
These must be the same parameters ilo and ihi, respectively, as supplied to ?gehrd . (If n > 0, then 1 ≤ilo≤ihi≤n. If n = 0, then ilo = 1 and ihi = 0.)
- a, tau
a (size max(1, lda*n)) contains details of the vectors which define the elementary reflectors, as returned by ?gehrd.
tau contains further details of the elementary reflectors, as returned by ?gehrd .
The dimension of tau must be at least max (1, n-1).
The leading dimension of a; at least max(1, n).
Overwritten by the n-by-n unitary matrix Q.
This function returns a value info.
If info=0, the execution is successful.
If info = -i, the i-th parameter had an illegal value.
The computed matrix Q differs from the exact result by a matrix E such that ||E||2 = O(ε), where ε is the machine precision.
The approximate number of real floating-point operations is (16/3)(ihi-ilo)3.
The real counterpart of this routine is orghr.