Class BiDiagonalTransformer

java.lang.Object
org.apache.commons.math3.linear.BiDiagonalTransformer

class BiDiagonalTransformer extends Object
Class transforming any matrix to bi-diagonal shape.

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.

Since:
2.0
  • Field Details

    • householderVectors

      private final double[][] householderVectors
      Householder vectors.
    • main

      private final double[] main
      Main diagonal.
    • secondary

      private final double[] secondary
      Secondary diagonal.
    • cachedU

      private RealMatrix cachedU
      Cached value of U.
    • cachedB

      private RealMatrix cachedB
      Cached value of B.
    • cachedV

      private RealMatrix cachedV
      Cached value of V.
  • Constructor Details

    • BiDiagonalTransformer

      BiDiagonalTransformer(RealMatrix matrix)
      Build the transformation to bi-diagonal shape of a matrix.
      Parameters:
      matrix - the matrix to transform.
  • Method Details

    • getU

      public RealMatrix getU()
      Returns the matrix U of the transform.

      U is an orthogonal matrix, i.e. its transpose is also its inverse.

      Returns:
      the U matrix
    • getB

      public RealMatrix getB()
      Returns the bi-diagonal matrix B of the transform.
      Returns:
      the B matrix
    • getV

      public RealMatrix getV()
      Returns the matrix V of the transform.

      V is an orthogonal matrix, i.e. its transpose is also its inverse.

      Returns:
      the V 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 B 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
    • getSecondaryDiagonalRef

      double[] getSecondaryDiagonalRef()
      Get the secondary diagonal elements of the matrix B 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 B matrix
    • isUpperBiDiagonal

      boolean isUpperBiDiagonal()
      Check if the matrix is transformed to upper bi-diagonal.
      Returns:
      true if the matrix is transformed to upper bi-diagonal
    • transformToUpperBiDiagonal

      private void transformToUpperBiDiagonal()
      Transform original matrix to upper bi-diagonal form.

      Transformation is done using alternate Householder transforms on columns and rows.

    • transformToLowerBiDiagonal

      private void transformToLowerBiDiagonal()
      Transform original matrix to lower bi-diagonal form.

      Transformation is done using alternate Householder transforms on rows and columns.