public class QRDecompositionHouseholder_CDRM extends java.lang.Object implements QRDecomposition<CMatrixRMaj>
This variation of complex QR decomposition uses reflections to compute the Q matrix. Each reflection uses a householder operations, hence its name. To provide a meaningful solution the original matrix must have full rank. This is intended for processing of small to medium matrices.
Both Q and R are stored in the same m by n matrix. Q is not stored directly, instead the u from Q_{k}=(Iγ*u*u^{H}) is stored. Decomposition requires about 2n*m^{2}2m^{2}/3 flops.
See the QR reflections algorithm described in:
David S. Watkins, "Fundamentals of Matrix Computations" 2nd Edition, 2002
For the most part this is a straight forward implementation. To improve performance on large matrices a column is written to an array and the order of some of the loops has been changed. This will degrade performance noticeably on small matrices. Since it is unlikely that the QR decomposition would be a bottle neck when small matrices are involved only one implementation is provided.
Modifier and Type  Field and Description 

protected float[] 
dataQR 
protected boolean 
error 
protected float[] 
gammas 
protected int 
minLength 
protected int 
numCols 
protected int 
numRows 
protected CMatrixRMaj 
QR
Where the Q and R matrices are stored.

protected Complex_F32 
tau 
protected float[] 
u 
protected float[] 
v 
Constructor and Description 

QRDecompositionHouseholder_CDRM() 
Modifier and Type  Method and Description 

protected void 
commonSetup(CMatrixRMaj A)
This function performs sanity check on the input for decompose and sets up the QR matrix.

boolean 
decompose(CMatrixRMaj A)
In order to decompose the matrix 'A' it must have full rank.

float[] 
getGammas() 
CMatrixRMaj 
getQ(CMatrixRMaj Q,
boolean compact)
Computes the Q matrix from the information stored in the QR matrix.

CMatrixRMaj 
getQR()
Returns a single matrix which contains the combined values of Q and R.

CMatrixRMaj 
getR(CMatrixRMaj R,
boolean compact)
Returns an upper triangular matrix which is the R in the QR decomposition.

protected void 
householder(int j)
Computes the householder vector "u" for the first column of submatrix j.

boolean 
inputModified()
Is the input matrix to
DecompositionInterface.decompose(org.ejml.data.Matrix) is modified during
the decomposition process. 
void 
setExpectedMaxSize(int numRows,
int numCols) 
protected CMatrixRMaj QR
protected float[] u
protected float[] v
protected int numCols
protected int numRows
protected int minLength
protected float[] dataQR
protected float[] gammas
protected Complex_F32 tau
protected boolean error
public void setExpectedMaxSize(int numRows, int numCols)
public CMatrixRMaj getQR()
public CMatrixRMaj getQ(CMatrixRMaj Q, boolean compact)
getQ
in interface QRDecomposition<CMatrixRMaj>
Q
 The orthogonal Q matrix.compact
 If true an m by n matrix is created, otherwise n by n.public CMatrixRMaj getR(CMatrixRMaj R, boolean compact)
getR
in interface QRDecomposition<CMatrixRMaj>
R
 An upper triangular matrix.compact
 public boolean decompose(CMatrixRMaj A)
In order to decompose the matrix 'A' it must have full rank. 'A' is a 'm' by 'n' matrix. It requires about 2n*m^{2}2m^{2}/3 flops.
The matrix provided here can be of different dimension than the one specified in the constructor. It just has to be smaller than or equal to it.
decompose
in interface DecompositionInterface<CMatrixRMaj>
A
 The matrix which is being decomposed. Modification is implementation dependent.public boolean inputModified()
DecompositionInterface
DecompositionInterface.decompose(org.ejml.data.Matrix)
is modified during
the decomposition process.inputModified
in interface DecompositionInterface<CMatrixRMaj>
protected void householder(int j)
Computes the householder vector "u" for the first column of submatrix j. Note this is a specialized householder for this problem. There is some protection against overflow and underflow.
Q = I  γuu^{H}
This function finds the values of 'u' and 'γ'.
j
 Which submatrix to work off of.protected void commonSetup(CMatrixRMaj A)
A
 public float[] getGammas()
Copyright © 20092018 Peter Abeles