class TriDiagonalTransformer extends Object
A symmetrical m × m matrix A can be written as the product of three matrices: A = Q × T × QT with Q an orthogonal matrix and T a symmetrical tridiagonal matrix. Both Q and T are m × m matrices.
This implementation only uses the upper part of the matrix, the part below the diagonal is not accessed at all.
Transformation to tridiagonal shape is often not a goal by itself, but it is
an intermediate step in more general decomposition algorithms like eigen decomposition
. This class is therefore intended for internal
use by the library and is not public. As a consequence of this explicitly limited scope,
many methods directly returns references to internal arrays, not copies.
Modifier and Type | Field and Description |
---|---|
private RealMatrix |
cachedQ
Cached value of Q.
|
private RealMatrix |
cachedQt
Cached value of Qt.
|
private RealMatrix |
cachedT
Cached value of T.
|
private double[][] |
householderVectors
Householder vectors.
|
private double[] |
main
Main diagonal.
|
private double[] |
secondary
Secondary diagonal.
|
Constructor and Description |
---|
TriDiagonalTransformer(RealMatrix matrix)
Build the transformation to tridiagonal shape of a symmetrical matrix.
|
Modifier and Type | Method and Description |
---|---|
(package private) double[][] |
getHouseholderVectorsRef()
Get the Householder vectors of the transform.
|
(package private) double[] |
getMainDiagonalRef()
Get the main diagonal elements of the matrix T of the transform.
|
RealMatrix |
getQ()
Returns the matrix Q of the transform.
|
RealMatrix |
getQT()
Returns the transpose of the matrix Q of the transform.
|
(package private) double[] |
getSecondaryDiagonalRef()
Get the secondary diagonal elements of the matrix T of the transform.
|
RealMatrix |
getT()
Returns the tridiagonal matrix T of the transform.
|
private void |
transform()
Transform original matrix to tridiagonal form.
|
private final double[][] householderVectors
private final double[] main
private final double[] secondary
private RealMatrix cachedQ
private RealMatrix cachedQt
private RealMatrix cachedT
public TriDiagonalTransformer(RealMatrix matrix) throws InvalidMatrixException
The specified matrix is assumed to be symmetrical without any check. Only the upper triangular part of the matrix is used.
matrix
- the symmetrical matrix to transform.InvalidMatrixException
- if matrix is not squarepublic RealMatrix getQ()
Q is an orthogonal matrix, i.e. its transpose is also its inverse.
public RealMatrix getQT()
Q is an orthogonal matrix, i.e. its transpose is also its inverse.
public RealMatrix getT()
double[][] getHouseholderVectorsRef()
Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
double[] getMainDiagonalRef()
Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
double[] getSecondaryDiagonalRef()
Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
private void transform()
Transformation is done using Householder transforms.
Copyright (c) 2003-2014 Apache Software Foundation