lsp::bidiagonal_transform< T > Class Template Reference

A functor for the transformation matrix into the bidiagonal form using Householder transformations. More...

#include <bidiagonal_transform.h>

List of all members.

Public Types

typedef T matrix_type
 The type of the matrix object to be trasformed.
typedef matrix_type::value_type value_type
 The type of the elements stored in the matrix_type.
typedef matrix_type::size_type size_type
 The type for seeking in the matrix object.

Public Member Functions

 bidiagonal_transform (matrix_type &matrix)
 An object constructor.
template<class M1 , class M2 >
void apply (M1 &left, M2 &right) const
 Transformation operaton.
value_type left_error () const
 Rounding error for the left matrix.
value_type right_error () const
 Rounding error for the right matrix.
value_type matrix_error () const
 Rounding error for the result matrix.


Detailed Description

template<class T>
class lsp::bidiagonal_transform< T >

A functor for the transformation matrix into the bidiagonal form using Householder transformations.

Any matrix can be transformed into the bidiagonal form by the $ 2 \cdot n - 1 $ Householder transformations.

\[ B = Q A H \quad \mbox{where} \quad B = \left| \begin{array}{ccccc} q_1 & e_2 & & & \\ & q_2 & e_3 & & \\ & &\ddots &\ddots & \\ & & &q_{n-1}& e_n \\ & & & & q_n \\ \end{array} \right|,\quad A \quad \mbox{is initial matrix} \quad Q,H \quad \mbox{are unitary matrixes} \]


Constructor & Destructor Documentation

template<class T>
lsp::bidiagonal_transform< T >::bidiagonal_transform ( matrix_type matrix  )  [inline]

An object constructor.

Parameters:
[in,out] matrix The reference to matrix object to be transformed
Actual transformation will be performed as soon as apply(M1& left, M2& right) will be called.


Member Function Documentation

template<class T>
template<class M1 , class M2 >
void lsp::bidiagonal_transform< T >::apply ( M1 &  left,
M2 &  right 
) const [inline]

Transformation operaton.

Parameters:
[out] left The left matrix
[out] right The right matrix
The routine calculates and makes transformation. Intrinsic assumption is that the all matrix are size-suitable.

$ M_{left} := Q M_{left} $

$ M_{right} := M_{right} H $

$ M_{matrix} := Q M_{matrix} H \equiv B $

Referenced by lsp::singular_decomposition< matrix_type >::apply().

template<class T>
value_type lsp::bidiagonal_transform< T >::left_error (  )  const [inline]

Rounding error for the left matrix.

$ \|Q\|_{F} \le \epsilon \|I\|_{F} \quad \mbox{where} \quad \epsilon \equiv \left| ( 4 m + 32 ) ( 2 \min\{m,n\} - 1 ) \epsilon_0 \right|, \quad I \quad \mbox{is identity matrix} $

template<class T>
value_type lsp::bidiagonal_transform< T >::matrix_error (  )  const [inline]

Rounding error for the result matrix.

$ \|B\|_{F} \le \epsilon \|A\|_{F} \quad \mbox{where} \quad \epsilon \equiv \left| ( 3 (\max\{m,n\}-\min\{m,n\}) + 40 ) ( 2 \min\{m,n\} - 1 ) \epsilon_0 \right| $

Referenced by lsp::singular_decomposition< matrix_type >::apply().

template<class T>
value_type lsp::bidiagonal_transform< T >::right_error (  )  const [inline]

Rounding error for the right matrix.

$ \|H\|_{F} \le \epsilon \|I\|_{F} \quad \mbox{where} \quad \epsilon \equiv \left| ( 4 n + 32 ) ( 2 \min\{m,n\} - 1 ) \epsilon_0 \right|, \quad I \quad \mbox{is identity matrix} $


The documentation for this class was generated from the following file:

doxygen