# CxQREx

Advanced Analysis Library Only

AnalysisLibErrType CxQREx (void *inputMatrix, int numberOfRows, int numberOfColumns, int pivot, int sizeOption, void *pivotInfo, void *qMatrix, void *rMatrix);

## Purpose

Performs the QR factorization for a complex matrix. CxQREx factorizes matrix A as AP = QR, where P is a permutation matrix, Q is a unitary matrix, and R is an upper triangular matrix. If numberOfRows > numberOfColumns, sizeOption is ECONOMY_SIZE and rMatrix is NULL or inputMatrix. On output, the leading numberOfColumns rows in inputMatrix are the upper triangular matrix R.

## Parameters

Input
Name | Type | Description
inputMatrix | numeric array | The matrix to be factorized.
numberOfRows | integer | The number of rows of inputMatrix.
numberOfColumns | integer | The number of columns of inputMatrix.
pivot | integer | Specifies how to pivot inputMatrix. pivot must be one of the following values: NOT_PIVOT (0): Do not pivot inputMatrix. That is, factorize inputMatrix as inputMatrix = QR. In this case, pivotInfo is not referenced. PIVOT_VECTOR (1): Pivot inputMatrix and record the pivoting information as a vector in pivotInfo. That is, factorize inputMatrix as AP = QR, where A is inputMatrix. The size of pivotInfo must be numberOfColumns. PIVOT_MATRIX (2): Pivot inputMatrix and record the pivoting information as a matrix in pivotInfo. That is, factorize inputMatrix as AP = QR, where A is inputMatrix. The size of pivotInfo must be numberOfColumns * numberOfColumns. With pivoting, inputMatrix is pivoted so that abs(diag(rMatrix)) are in descending order.
sizeOption | integer | The size of Q and rMatrix. sizeOption must one of the following values: FULL_SIZE (0): The size of Q is numberOfRows * numberOfRows, and the size of rMatrix is numberOfRows * numberOfColumns. ECONOMY_SIZE (1): The size of Q is numberOfRows * min(numberOfRows, numberOfColumns), and the size of R is min(numberOfRows, numberOfColumns) * numberOfColumns.
Output
Name | Type | Description
pivotInfo | numeric array | The pivoting information if pivot is PIVOT_VECTOR or PIVOT_MATRIX. If pivot = PIVOT_VECTOR, pivotInfo is a numberOfColumns element vector. The columns of AP are the columns of A in the following order: pivotInfo[0], pivotInfo[1], pivotInfo[2], . . . , pivotInfo[colA-1]. If pivot = PIVOT_MATRIX, pivotInfo is directly the permutation matrix P in AP = QR. If pivot is NOT_PIVOT, you can pass NULL to pivotInfo.
qMatrix | numeric array | The unitary matrix Q. If Q = NULL, qMatrix is not generated.
rMatrix | numeric array | The upper triangular matrix R. rMatrix can be NULL. This function supports in place operation. That is, you can call the function with rMatrix = inputMatrix.

## Return Value

Name | Type | Description
status | AnalysisLibErrType | A value that specifies the type of error that occurred. Refer to analysis.h for definitions of these constants.