org.apache.commons.math.linear
Class BiDiagonalTransformer

java.lang.Object
  extended by org.apache.commons.math.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:
$Revision: 799857 $ $Date: 2009-08-01 09:07:12 -0400 (Sat, 01 Aug 2009) $

Field Summary
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
BiDiagonalTransformer(RealMatrix matrix)
          Build the transformation to bi-diagonal shape of a matrix.
 
Method Summary
 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.



Copyright (c) 2003-2009 Apache Software Foundation