org.apache.commons.math3.linear

## Class TriDiagonalTransformer

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

     class TriDiagonalTransformer
    extends java.lang.Object

Class transforming a symmetrical matrix to tridiagonal shape.

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

### Field Summary

Fields
`private RealMatrix` `cachedQ` Cached value of Q.
`private RealMatrix` `cachedQt` Cached value of Qt.
`private RealMatrix` `cachedT` Cached value of T.
`private double[][]` `householderVectors` Householder vectors.
`private double[]` `main` Main diagonal.
`private double[]` `secondary` Secondary diagonal.

### Constructor Summary

Constructors
Constructor and Description
`TriDiagonalTransformer(RealMatrix matrix)` Build the transformation to tridiagonal shape of a symmetrical matrix.

### Method Summary

Methods
`(package private) double[][]` `getHouseholderVectorsRef()` Get the Householder vectors of the transform.
`(package private) double[]` `getMainDiagonalRef()` Get the main diagonal elements of the matrix T of the transform.
`RealMatrix` `getQ()` Returns the matrix Q of the transform.
`RealMatrix` `getQT()` Returns the transpose of the matrix Q of the transform.
`(package private) double[]` `getSecondaryDiagonalRef()` Get the secondary diagonal elements of the matrix T of the transform.
`RealMatrix` `getT()` Returns the tridiagonal matrix T of the transform.
`private void` `transform()` Transform original matrix to tridiagonal 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.

#### cachedQ

    private RealMatrix cachedQ

Cached value of Q.

#### cachedQt

    private RealMatrix cachedQt

Cached value of Qt.

#### cachedT

    private RealMatrix cachedT

Cached value of T.

### Constructor Detail

#### TriDiagonalTransformer

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

#### getQ

    public RealMatrix 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

    public RealMatrix 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

    public RealMatrix 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.