?unmhr
?unmhr
Multiplies an arbitrary complex matrix C by the complex unitary matrix Q determined by
?gehrd
.Syntax
lapack_int
LAPACKE_cunmhr
(
int
matrix_layout
,
char
side
,
char
trans
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ilo
,
lapack_int
ihi
,
const
lapack_complex_float
*
a
,
lapack_int
lda
,
const
lapack_complex_float
*
tau
,
lapack_complex_float
*
c
,
lapack_int
ldc
);
lapack_int
LAPACKE_zunmhr
(
int
matrix_layout
,
char
side
,
char
trans
,
lapack_int
m
,
lapack_int
n
,
lapack_int
ilo
,
lapack_int
ihi
,
const
lapack_complex_double
*
a
,
lapack_int
lda
,
const
lapack_complex_double
*
tau
,
lapack_complex_double
*
c
,
lapack_int
ldc
);
Include Files
- mkl.h
Description
The routine multiplies a matrix , and represents the matrix and .)
C
by the unitary matrix Q
that has been determined by a preceding call to cgehrd
/zgehrd
. (The routine ?gehrd
reduces a real general matrix A
to upper Hessenberg form H
by an orthogonal similarity transformation, A
= Q*H*Q
H
Q
as a product of ihi
-ilo
elementary reflectors. Here ilo
and ihi
are values determined by cgebal
/zgebal
when balancing the matrix; if the matrix has not been balanced, ilo
= 1ihi
= n
With , overwriting the result on
?unmhr
, you can form one of the matrix products Q*C
, Q
H
*C
, C*Q
, or C*Q
H
C
(which may be any complex rectangular matrix). A common application of this routine is to transform a matrix V
of eigenvectors of H
to the matrix QV
of
eigenvectors of A
.Input Parameters
- matrix_layout
- Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
- side
- Must be'L'or'R'.If, then the routine formsside='L'Q*CorQH*C.If, then the routine formsside='R'C*QorC*Q.H
- trans
- Must be'N'or'C'.If, thentrans='N'Qis applied toC.If, thentrans='T'Qis applied toHC.
- m
- The number of rows inC().m≥0
- n
- The number of columns inC().n≥0
- ilo,ihi
- These must be the same parametersiloandihi, respectively, as supplied to?gehrd.Ifandm> 0, thenside='L'1.≤ilo≤ihi≤mIfandm= 0, thenside='L'andilo= 1.ihi= 0Ifandn> 0, thenside='R'1.≤ilo≤ihi≤nIfandn= 0, thenside='R'andilo=1.ihi= 0
- a,tau,c
- Arrays:a(size max(1,contains details of the vectors which define the elementary reflectors, as returned bylda*n) forside='R' and size max(1,lda*m) forside='L')?gehrd.taucontains further details of the elementary reflectors, as returned by?gehrd.The dimension oftaumust be at least max (1,m-1)ifand at least max (1,side='L'n-1) if.side='R'c(size max(1,contains theldc*n) for column major layout and max(1,ldc*mfor row major layout)m-by-nmatrixC.
- lda
- The leading dimension ofa; at least max(1,m) ifand at least max (1,side='L'n) if.side='R'
- ldc
- The leading dimension ofc; at least max(1,m)for column major layout and at least max(1,.n) for row major layout
Output Parameters
- c
- Cis overwritten byQ*C, orQ*HC,orC*Q, orHC*Qas specified bysideandtrans.
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 matrix
Q
differs from the exact result by a matrix E
such that ||
, where E
||2
= O
(ε
)*||C
||2
ε
is the machine precision.The approximate number of floating-point operations is
8
if n
(ihi
-ilo
)2
side
= 'L'
8
if m
(ihi
-ilo
)2
side
= 'R'
The real counterpart of this routine is ormhr.