Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

?gemqrt

Multiplies a general matrix by the orthogonal/unitary matrix Q of the QR factorization formed by ?geqrt.

Syntax

lapack_int LAPACKE_sgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const float* v, lapack_int ldv, const float* t, lapack_int ldt, float* c, lapack_int ldc);

lapack_int LAPACKE_dgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const double* v, lapack_int ldv, const double* t, lapack_int ldt, double* c, lapack_int ldc);

lapack_int LAPACKE_cgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const lapack_complex_float* v, lapack_int ldv, const lapack_complex_float* t, lapack_int ldt, lapack_complex_float* c, lapack_int ldc);

lapack_int LAPACKE_zgemqrt (int matrix_layout, char side, char trans, lapack_int m, lapack_int n, lapack_int k, lapack_int nb, const lapack_complex_double* v, lapack_int ldv, const lapack_complex_double* t, lapack_int ldt, lapack_complex_double* c, lapack_int ldc);

Include Files

  • mkl.h

Description

The ?gemqrt routine overwrites the general real or complex m-by-n matrixC with

  side ='L' side ='R'
trans = 'N': Q*C C*Q
trans = 'T': QT*C C*QT
trans = 'C': QH*C C*QH

where Q is a real orthogonal (complex unitary) matrix defined as the product of k elementary reflectors

Q = H(1) H(2)... H(k) = I - V*T*VT for real flavors, and

Q = H(1) H(2)... H(k) = I - V*T*VH for complex flavors,

generated using the compact WY representation as returned by geqrt. Q is of order m if side = 'L' and of order n if side = 'R'.

Input Parameters

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

side

='L': apply Q, QT, or QH from the left.

='R': apply Q, QT, or QH from the right.

trans

='N', no transpose, apply Q.

='T', transpose, apply QT.

='C', transpose, apply QH.

m

The number of rows in the matrix C, (m ≥ 0).

n

The number of columns in the matrix C, (n ≥ 0).

k

The number of elementary reflectors whose product defines the matrix Q. Constraints:

If side = 'L', mk≥0

If side = 'R', nk≥0.

nb

The block size used for the storage of t, knb ≥ 1. This must be the same value of nb used to generate t in geqrt.

v

Array of size max(1, ldv*k) for column major layout, max(1, ldv*m) for row major layout and side = 'L', and max(1, ldv*n) for row major layout and side = 'R'.

The ith column must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by geqrt in the first k columns of its array argument a.

ldv

The leading dimension of the array v.

if side = 'L', ldv must be at least max(1,m) for column major layout and max(1, k) for row major layout;

if side = 'R', ldv must be at least max(1,n) for column major layout and max(1, k) for row major layout.

t

Array, size max(1, ldt*min(m, n)) for column major layout and max(1, ldt*nb) for row major layout.

The upper triangular factors of the block reflectors as returned by geqrt.

ldt

The leading dimension of the array t. ldt must be at least nb for column major layout and max(1, k) for row major layout.

c

The m-by-n matrix C.

ldc

The leadinng dimension of the array c. ldc must be at least max(1, m) for column major layout and max(1, n) for row major layout.

Output Parameters

c

Overwritten by the product Q*C, C*Q, QT*C, C*QT, QH*C, or C*QH as specified by 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.