Developer Reference

  • 2021.1
  • 12/04/2020
  • Public Content
Contents

?ormbr

Multiplies an arbitrary real matrix by the real orthogonal matrix
Q
or
P
T
determined by
?gebrd
.

Syntax

lapack_int
LAPACKE_sormbr
(
int
matrix_layout
,
char
vect
,
char
side
,
char
trans
,
lapack_int
m
,
lapack_int
n
,
lapack_int
k
,
const
float
*
a
,
lapack_int
lda
,
const
float
*
tau
,
float
*
c
,
lapack_int
ldc
);
lapack_int
LAPACKE_dormbr
(
int
matrix_layout
,
char
vect
,
char
side
,
char
trans
,
lapack_int
m
,
lapack_int
n
,
lapack_int
k
,
const
double
*
a
,
lapack_int
lda
,
const
double
*
tau
,
double
*
c
,
lapack_int
ldc
);
Include Files
  • mkl.h
Description
Given an arbitrary real matrix
C
, this routine forms one of the matrix products
Q
*
C
,
Q
T
*
C
,
C
*
Q
,
C
*
Q
T
,
P
*
C
,
P
T
*
C
,
C
*
P
,
C
*
P
T
, where
Q
and
P
are orthogonal matrices computed by a call to gebrd. The routine overwrites the product on
C
.
Input Parameters
In the descriptions below,
r
denotes the order of
Q
or
P
T
:
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
T
is applied to
C
.
If
vect
=
'P'
, then
P
or
P
T
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
'T'
.
If
trans
=
'N'
, then
Q
or
P
is applied to
C
.
If
trans
=
'T'
, then
Q
T
or
P
T
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
The leading dimension of
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
The leading dimension of
c
;
ldc
max(1,
m
)
for column major layout and
ldc
max(1,
n
) for row major layout
.
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
T
*
C
,
C
*
Q
,
C
*
Q,
T
,
P
*
C
,
P
T
*
C
,
C
*
P
, or
C
*
P
T
, 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
2*
n
*
k
(2*
m
-
k
)
if
side
=
'L'
and
m
k
;
2*
m
*
k
(2*
n
-
k
)
if
side
=
'R'
and
n
k
;
2*
m
2
*
n
if
side
=
'L'
and
m
<
k
;
2*
n
2
*
m
if
side
=
'R'
and
n
<
k
.
The complex counterpart of this routine is unmbr.

Product and Performance Information

1

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