org.apache.commons.math3.linear

## Class BiDiagonalTransformer

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

     class BiDiagonalTransformer
    extends java.lang.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
Version:
  $Id: BiDiagonalTransformer.java 1416643 2012-12-03 19:37:14Z tn $

### Field Summary

Fields
`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 Summary

Constructors
Constructor and Description
`BiDiagonalTransformer(RealMatrix matrix)` Build the transformation to bi-diagonal shape of a matrix.

### Method Summary

Methods
`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.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### 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 Detail

#### BiDiagonalTransformer

    public BiDiagonalTransformer(RealMatrix matrix)

Build the transformation to bi-diagonal shape of a matrix.

Parameters:
  `matrix` - the matrix to transform.

### Method Detail

#### 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.