org.ejml.alg.dense.decomposition.qr
Class QRDecompositionHouseholderTran

java.lang.Object
  extended by org.ejml.alg.dense.decomposition.qr.QRDecompositionHouseholderTran
All Implemented Interfaces:
DecompositionInterface<DenseMatrix64F>, QRDecomposition<DenseMatrix64F>

public class QRDecompositionHouseholderTran
extends Object
implements QRDecomposition<DenseMatrix64F>

Householder QR decomposition is rich in operations along the columns of the matrix. This can be taken advantage of by solving for the Q matrix in a column major format to reduce the number of CPU cache misses and the number of copies that are performed.

Author:
Peter Abeles
See Also:
QRDecompositionHouseholder

Field Summary
protected  boolean error
           
protected  double gamma
           
protected  double[] gammas
           
protected  int minLength
           
protected  int numCols
           
protected  int numRows
           
protected  DenseMatrix64F QR
          Where the Q and R matrices are stored.
protected  double tau
           
protected  double[] v
           
 
Constructor Summary
QRDecompositionHouseholderTran()
           
 
Method Summary
 void applyQ(DenseMatrix64F A)
          A = Q*A
 void applyTranQ(DenseMatrix64F A)
          A = QT*A
 boolean decompose(DenseMatrix64F A)
           To decompose the matrix 'A' it must have full rank.
 double[] getGammas()
           
 DenseMatrix64F getQ(DenseMatrix64F Q, boolean compact)
          Computes the Q matrix from the information stored in the QR matrix.
 DenseMatrix64F getQR()
          Inner matrix that stores the decomposition
 DenseMatrix64F getR(DenseMatrix64F 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.Matrix64F) is modified during the decomposition process.
 void setExpectedMaxSize(int numRows, int numCols)
           
protected  void updateA(int w)
           Takes the results from the householder computation and updates the 'A' matrix.

A = (I - γ*u*uT)A
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

QR

protected DenseMatrix64F QR
Where the Q and R matrices are stored. For speed reasons this is transposed


v

protected double[] v

numCols

protected int numCols

numRows

protected int numRows

minLength

protected int minLength

gammas

protected double[] gammas

gamma

protected double gamma

tau

protected double tau

error

protected boolean error
Constructor Detail

QRDecompositionHouseholderTran

public QRDecompositionHouseholderTran()
Method Detail

setExpectedMaxSize

public void setExpectedMaxSize(int numRows,
                               int numCols)

getQR

public DenseMatrix64F getQR()
Inner matrix that stores the decomposition


getQ

public DenseMatrix64F getQ(DenseMatrix64F Q,
                           boolean compact)
Computes the Q matrix from the information stored in the QR matrix. This operation requires about 4(mn-mn2+n3/3) flops.

Specified by:
getQ in interface QRDecomposition<DenseMatrix64F>
Parameters:
Q - The orthogonal Q matrix.
compact - If true an m by n matrix is created, otherwise n by n.
Returns:
The Q matrix.

applyQ

public void applyQ(DenseMatrix64F A)
A = Q*A

Parameters:
A - Matrix that is being multiplied by Q. Is modified.

applyTranQ

public void applyTranQ(DenseMatrix64F A)
A = QT*A

Parameters:
A - Matrix that is being multiplied by QT. Is modified.

getR

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

Specified by:
getR in interface QRDecomposition<DenseMatrix64F>
Parameters:
R - An upper triangular matrix.
compact -
Returns:
The R matrix.

decompose

public boolean decompose(DenseMatrix64F A)

To decompose the matrix 'A' it must have full rank. 'A' is a 'm' by 'n' matrix. It requires about 2n*m2-2m2/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.

Specified by:
decompose in interface DecompositionInterface<DenseMatrix64F>
Parameters:
A - The matrix which is being decomposed. Modification is implementation dependent.
Returns:
Returns if it was able to decompose the matrix.

inputModified

public boolean inputModified()
Description copied from interface: DecompositionInterface
Is the input matrix to DecompositionInterface.decompose(org.ejml.data.Matrix64F) is modified during the decomposition process.

Specified by:
inputModified in interface DecompositionInterface<DenseMatrix64F>
Returns:
true if the input matrix to decompose() is modified.

householder

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 - γuuT

This function finds the values of 'u' and 'γ'.

Parameters:
j - Which submatrix to work off of.

updateA

protected void updateA(int w)

Takes the results from the householder computation and updates the 'A' matrix.

A = (I - γ*u*uT)A

Parameters:
w - The submatrix.

getGammas

public double[] getGammas()


Copyright © 2012. All Rights Reserved.