org.apache.commons.math.linear
Class TriDiagonalTransformer

java.lang.Object
  extended by org.apache.commons.math.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:
$Revision: 811685 $ $Date: 2009-09-05 13:36:48 -0400 (Sat, 05 Sep 2009) $

Field Summary
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
TriDiagonalTransformer(RealMatrix matrix)
          Build the transformation to tridiagonal shape of a symmetrical matrix.
 
Method Summary
(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)
                       throws InvalidMatrixException
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 - the symmetrical matrix to transform.
Throws:
InvalidMatrixException - if 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.



Copyright (c) 2003-2010 Apache Software Foundation