Contents

# ?unmbr

Multiplies an arbitrary complex matrix by the unitary matrix
Q
or
P
determined by
?gebrd
.

## Syntax

Include Files
• mkl.h
Description
Given an arbitrary complex matrix
C
, this routine forms one of the matrix products
Q*C
,
Q
H
*C
,
C*Q
,
C*Q
H
,
P*C
,
P
H
*C
,
C*P
, or
C*P
H
, where
Q
and
P
are unitary matrices computed by a call to gebrd/gebrd. The routine overwrites the product on
C
.
Input Parameters
In the descriptions below,
r
denotes the order of
Q
or
P
H
:
If
side
=
'L'
,
r
=
m
; if
side
=
'R'
,
r
=
n
.
matrix_layout
Specifies whether matrix storage layout is row major (
LAPACK_ROW_MAJOR
) or column major (
LAPACK_COL_MAJOR
).
vect
Must be
'Q'
or
'P'
.
If
vect
=
'Q'
, then
Q
or
Q
H
is applied to
C
.
If
vect
=
'P'
, then
P
or
P
H
is applied to
C
.
side
Must be
'L'
or
'R'
.
If
side
=
'L'
, multipliers are applied to
C
from the left.
If
side
=
'R'
, they are applied to
C
from the right.
trans
Must be
'N'
or
'C'
.
If
trans
=
'N'
, then
Q
or
P
is applied to
C
.
If
trans
=
'C'
, then
Q
H
or
P
H
is applied to
C
.
m
The number of rows in
C
.
n
The number of columns in
C
.
k
One of the dimensions of
A
in
?gebrd
:
If
vect
=
'Q'
, the number of columns in
A
;
If
vect
=
'P'
, the number of rows in
A
.
Constraints:
m
0
,
n
0
,
k
0
.
a
,
c
Arrays:
a
is the array
a
as returned by
?gebrd
.
The size of
a
depends on the value of the
matrix_layout
,
vect
, and
side
parameters:
matrix_layout
vect
side
size
column major
'Q'
-
max(1,
lda
*
k
)
column major
'P'
'L'
max(1,
lda
*
m
)
column major
'P'
'R'
max(1,
lda
*
n
)
row major
'Q'
'L'
max(1,
lda
*
m
)
row major
'Q'
'R'
max(1,
lda
*
n
)
row major
'P'
-
max(1,
lda
*
k
)
c
(size max(1,
ldc
*
n
) for column major layout and max(1,
ldc
*
m
for row major layout)
holds the matrix
C
.
lda
a
. Constraints:
lda
max(1,
r
)
for column major layout and at least max(1,
k
) for row major layout
if
vect
=
'Q'
;
lda
max(1, min(
r
,
k
))
for column major layout and at least max(1,
r
) for row major layout
if
vect
=
'P'
.
ldc
c
;
ldc
max(1,
m
)
.
tau
Array, size at least max (1, min(
r
,
k
)).
For
vect
=
'Q'
, the array
tauq
as returned by
?gebrd
. For
vect
=
'P'
, the array
taup
as returned by
?gebrd
.
Output Parameters
c
Overwritten by the product
Q*C
,
Q
H
*C
,
C*Q
,
C*Q
H
,
P*C
,
P
H
*C
,
C*P
, or
C*P
H
, as specified by
vect
,
side
, and
trans
.
Return Values
This function returns a value
info
.
If
info
=0
, the execution is successful.
If
info
=
-i
, the
i
-th parameter had an illegal value.
Application Notes
The computed product differs from the exact product by a matrix
E
such that
||
E
||
2
=
O
(
ε
)*||
C
||
2
.
The total number of floating-point operations is approximately
8*
n
*
k
(2*
m
-
k
)
if
side
=
'L'
and
m
k
;
8*
m
*
k
(2*
n
-
k
)
if
side
=
'R'
and
n
k
;
8*
m
2
*
n
if
side
=
'L'
and
m
<
k
;
8*
n
2
*
m
if
side
=
'R'
and
n
<
k
.
The real counterpart of this routine is ormbr.

#### Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.