Visible to Intel only — GUID: GUID-DBD590BD-86E0-4A78-927F-C8D85B7BC388
Visible to Intel only — GUID: GUID-DBD590BD-86E0-4A78-927F-C8D85B7BC388
?unmbr
Multiplies an arbitrary complex matrix by the unitary matrix Q or P determined by ?gebrd.
lapack_int LAPACKE_cunmbr (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float* a, lapack_int lda, const lapack_complex_float* tau, lapack_complex_float* c, lapack_int ldc);
lapack_int LAPACKE_zunmbr (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double* a, lapack_int lda, const lapack_complex_double* tau, lapack_complex_double* c, lapack_int ldc);
- mkl.h
Given an arbitrary complex matrix C, this routine forms one of the matrix products Q*C, QH*C, C*Q, C*QH, P*C, PH*C, C*P, or C*PH, where Q and P are unitary matrices computed by a call to gebrd/gebrd. The routine overwrites the product on C.
In the descriptions below, r denotes the order of Q or PH:
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 QH is applied to C.
If vect = 'P', then P or PH 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 QH or PH 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).
- 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.
- c
-
Overwritten by the product Q*C, QH*C, C*Q, C*QH, P*C, PH*C, C*P, or C*PH, 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
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*m2*n if side = 'L' and m < k;
8*n2*m if side = 'R' and n < k.
The real counterpart of this routine is ormbr.