public class QRDecompositionHouseholder_ZDRM extends java.lang.Object implements QRDecomposition<ZMatrixRMaj>
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 double[] 
dataQR 
protected boolean 
error 
protected double[] 
gammas 
protected int 
minLength 
protected int 
numCols 
protected int 
numRows 
protected ZMatrixRMaj 
QR
Where the Q and R matrices are stored.

protected Complex_F64 
tau 
protected double[] 
u 
protected double[] 
v 
Constructor and Description 

QRDecompositionHouseholder_ZDRM() 
Modifier and Type  Method and Description 

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

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

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

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

ZMatrixRMaj 
getR(ZMatrixRMaj 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 ZMatrixRMaj QR
protected double[] u
protected double[] v
protected int numCols
protected int numRows
protected int minLength
protected double[] dataQR
protected double[] gammas
protected Complex_F64 tau
protected boolean error
public void setExpectedMaxSize(int numRows, int numCols)
public ZMatrixRMaj getQR()
public ZMatrixRMaj getQ(ZMatrixRMaj Q, boolean compact)
getQ
in interface QRDecomposition<ZMatrixRMaj>
Q
 The orthogonal Q matrix.compact
 If true an m by n matrix is created, otherwise n by n.public ZMatrixRMaj getR(ZMatrixRMaj R, boolean compact)
getR
in interface QRDecomposition<ZMatrixRMaj>
R
 An upper triangular matrix.compact
 public boolean decompose(ZMatrixRMaj 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<ZMatrixRMaj>
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<ZMatrixRMaj>
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(ZMatrixRMaj A)
A
 public double[] getGammas()
Copyright © 20092018 Peter Abeles