Visible to Intel only — GUID: GUID-BE0A97C9-5EF6-411F-B9CC-1477B612542D
Visible to Intel only — GUID: GUID-BE0A97C9-5EF6-411F-B9CC-1477B612542D
?ormbr
Multiplies an arbitrary real matrix by the real orthogonal matrix Q or PT 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, QT*C, C*Q, C*QT, P*C, PT*C, C*P, C*PT, 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 PT:
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 QT is applied to C.
If vect = 'P', then P or PT 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 QT or PT 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, QT*C, C*Q, C*Q,T, P*C, PT*C, C*P, or C*PT, 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*m2*n if side = 'L' and m < k;
2*n2*m if side = 'R' and n < k.
The complex counterpart of this routine is unmbr.