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 RealMatrixCached value of Q.private RealMatrixCached value of Qt.private RealMatrixCached 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 voidTransform 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
-
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.
-