class BiDiagonalTransformer
extends java.lang.Object
Any m × n matrix A can be written as the product of three matrices: A = U × B × VT with U an m × m orthogonal matrix, B an m × n bi-diagonal matrix (lower diagonal if m < n, upper diagonal otherwise), and V an n × n orthogonal matrix.
Transformation to bi-diagonal shape is often not a goal by itself, but it is
an intermediate step in more general decomposition algorithms like Singular Value 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 |
cachedB
Cached value of B.
|
private RealMatrix |
cachedU
Cached value of U.
|
private RealMatrix |
cachedV
Cached value of V.
|
private double[][] |
householderVectors
Householder vectors.
|
private double[] |
main
Main diagonal.
|
private double[] |
secondary
Secondary diagonal.
|
Constructor and Description |
---|
BiDiagonalTransformer(RealMatrix matrix)
Build the transformation to bi-diagonal shape of a matrix.
|
Modifier and Type | Method and Description |
---|---|
RealMatrix |
getB()
Returns the bi-diagonal matrix B of the transform.
|
(package private) double[][] |
getHouseholderVectorsRef()
Get the Householder vectors of the transform.
|
(package private) double[] |
getMainDiagonalRef()
Get the main diagonal elements of the matrix B of the transform.
|
(package private) double[] |
getSecondaryDiagonalRef()
Get the secondary diagonal elements of the matrix B of the transform.
|
RealMatrix |
getU()
Returns the matrix U of the transform.
|
RealMatrix |
getV()
Returns the matrix V of the transform.
|
(package private) boolean |
isUpperBiDiagonal()
Check if the matrix is transformed to upper bi-diagonal.
|
private void |
transformToLowerBiDiagonal()
Transform original matrix to lower bi-diagonal form.
|
private void |
transformToUpperBiDiagonal()
Transform original matrix to upper bi-diagonal form.
|
private final double[][] householderVectors
private final double[] main
private final double[] secondary
private RealMatrix cachedU
private RealMatrix cachedB
private RealMatrix cachedV
public BiDiagonalTransformer(RealMatrix matrix)
matrix
- the matrix to transform.public RealMatrix getU()
U is an orthogonal matrix, i.e. its transpose is also its inverse.
public RealMatrix getB()
public RealMatrix getV()
V is an orthogonal matrix, i.e. its transpose is also its inverse.
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.
boolean isUpperBiDiagonal()
private void transformToUpperBiDiagonal()
Transformation is done using alternate Householder transforms on columns and rows.
private void transformToLowerBiDiagonal()
Transformation is done using alternate Householder transforms on rows and columns.