Generates the complex unitary matrix Q of the LQ factorization formed by ?gelqf.

## Syntax

lapack_int LAPACKE_cunglq (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_float* a, lapack_int lda, const lapack_complex_float* tau);

lapack_int LAPACKE_zunglq (int matrix_layout, lapack_int m, lapack_int n, lapack_int k, lapack_complex_double* a, lapack_int lda, const lapack_complex_double* tau);

• mkl.h

## Description

The routine generates the whole or part of n-by-n unitary matrix Q of the LQ factorization formed by the routines gelqf. Use this routine after a call to cgelqf/zgelqf.

Usually Q is determined from the LQ factorization of an p-by-n matrix A with n < p. To compute the whole matrix Q, use:

`info = LAPACKE_?unglq(matrix_layout, n, n, p, a, lda, tau)`

To compute the leading p rows of Q, which form an orthonormal basis in the space spanned by the rows of A, use:

`info = LAPACKE_?unglq(matrix_layout, p, n, p, a, lda, tau)`

To compute the matrix Qk of the LQ factorization of the leading k rows of A, use:

`info = LAPACKE_?unglq(matrix_layout, n, n, k, a, lda, tau)`

To compute the leading k rows of Qk, which form an orthonormal basis in the space spanned by the leading k rows of A, use:

`info = LAPACKE_?ungqr(matrix_layout, k, n, k, a, lda, tau)`

## Input Parameters

matrix_layout

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

m

The number of rows of Q to be computed (0 mn).

n

The order of the unitary matrix Q (nm).

k

The number of elementary reflectors whose product defines the matrix Q (0 km).

a, tau

Arrays: a (size max(1, lda*n) for column major layout and max(1, lda*m) for row major layout) and tau are the arrays returned by cgelqf/zgelqf.

The dimension of tau must be at least max(1, k).

lda

The leading dimension of a; at least max(1, m)for column major layout and max(1, n) for row major layout.

## Output Parameters

a

Overwritten by m leading rows of the n-by-n unitary matrix Q.

## 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 Q differs from an exactly unitary matrix by a matrix E such that ||E||2 = O(ε)*||A||2, where ε is the machine precision.

The total number of floating-point operations is approximately 16*m*n*k - 8*(m + n)*k2 + (16/3)*k3.

If m = k, the number is approximately (8/3)*m2*(3n - m) .

The real counterpart of this routine is orglq.

Для получения подробной информации о возможностях оптимизации компилятора обратитесь к нашему Уведомлению об оптимизации.