Intel® oneAPI Math Kernel Library Developer Reference - C
Multiplies an arbitrary real matrix by the real orthogonal matrix Q or PT determined by ?gebrd.
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);
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.
In the descriptions below, r denotes the order of Q or PT:
If side = 'L', r = m; if side = 'R', r = n.
Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).
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.
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.
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.
The number of rows in C.
The number of columns in C.
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.
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.
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'.
The leading dimension of c; ldc≥ max(1, m) for column major layout and ldc≥ max(1, n) for row major layout .
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.
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.
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 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.