Class TriDiagonalTransformer
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.
- Since:
- 2.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate RealMatrix
Cached value of Q.private RealMatrix
Cached value of Qt.private RealMatrix
Cached value of T.private final double[][]
Householder vectors.private final double[]
Main diagonal.private final double[]
Secondary diagonal. -
Constructor Summary
ConstructorsConstructorDescriptionTriDiagonalTransformer
(RealMatrix matrix) Build the transformation to tridiagonal shape of a symmetrical matrix. -
Method Summary
Modifier and TypeMethodDescription(package private) double[][]
Get the Householder vectors of the transform.(package private) double[]
Get the main diagonal elements of the matrix T of the transform.getQ()
Returns the matrix Q of the transform.getQT()
Returns the transpose of the matrix Q of the transform.(package private) double[]
Get the secondary diagonal elements of the matrix T of the transform.getT()
Returns the tridiagonal matrix T of the transform.private void
Transform original matrix to tridiagonal form.
-
Field Details
-
householderVectors
private final double[][] householderVectorsHouseholder vectors. -
main
private final double[] mainMain diagonal. -
secondary
private final double[] secondarySecondary diagonal. -
cachedQ
Cached value of Q. -
cachedQt
Cached value of Qt. -
cachedT
Cached value of T.
-
-
Constructor Details
-
TriDiagonalTransformer
TriDiagonalTransformer(RealMatrix matrix) Build the transformation to tridiagonal shape of a symmetrical matrix.The specified matrix is assumed to be symmetrical without any check. Only the upper triangular part of the matrix is used.
- Parameters:
matrix
- Symmetrical matrix to transform.- Throws:
NonSquareMatrixException
- if the matrix is not square.
-
-
Method Details
-
getQ
Returns the matrix Q of the transform.Q is an orthogonal matrix, i.e. its transpose is also its inverse.
- Returns:
- the Q matrix
-
getQT
Returns the transpose of the matrix Q of the transform.Q is an orthogonal matrix, i.e. its transpose is also its inverse.
- Returns:
- the Q matrix
-
getT
Returns the tridiagonal matrix T of the transform.- Returns:
- the T matrix
-
getHouseholderVectorsRef
double[][] getHouseholderVectorsRef()Get the Householder vectors of the transform.Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
- Returns:
- the main diagonal elements of the B matrix
-
getMainDiagonalRef
double[] getMainDiagonalRef()Get the main diagonal elements of the matrix T of the transform.Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
- Returns:
- the main diagonal elements of the T matrix
-
getSecondaryDiagonalRef
double[] getSecondaryDiagonalRef()Get the secondary diagonal elements of the matrix T of the transform.Note that since this class is only intended for internal use, it returns directly a reference to its internal arrays, not a copy.
- Returns:
- the secondary diagonal elements of the T matrix
-
transform
private void transform()Transform original matrix to tridiagonal form.Transformation is done using Householder transforms.
-