Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | Static Private Attributes
MatrixFunction< MatrixType, 1 > Class Template Reference

Partial specialization of MatrixFunction for complex matrices. More...

#include <MatrixFunction.h>

List of all members.

Public Member Functions

template<typename ResultType >
void compute (ResultType &result)
 Compute the matrix function.
 MatrixFunction (const MatrixType &A, StemFunction f)
 Constructor.

Private Types

typedef std::list< ScalarCluster
typedef Matrix< Index, Dynamic, 1 > DynamicIntVectorType
typedef Matrix< Scalar,
Dynamic, Dynamic, Options,
RowsAtCompileTime,
ColsAtCompileTime
DynMatrixType
typedef MatrixType::Index Index
typedef Matrix< Index,
Traits::RowsAtCompileTime, 1 > 
IntVectorType
typedef std::list< ClusterListOfClusters
typedef NumTraits< Scalar >::Real RealScalar
typedef MatrixType::Scalar Scalar
typedef
internal::stem_function
< Scalar >::type 
StemFunction
typedef internal::traits
< MatrixType
Traits
typedef Matrix< Scalar,
Traits::RowsAtCompileTime, 1 > 
VectorType

Private Member Functions

Block< MatrixTypeblock (MatrixType &A, Index i, Index j)
 Return block of matrix according to blocking given by m_blockStart.
void computeBlockAtomic ()
 Compute block diagonal part of m_fT.
void computeBlockStart ()
 Compute m_blockStart using m_clusterSize.
void computeClusterSize ()
 Compute m_clusterSize and m_eivalToCluster using m_clusters.
void computeOffDiagonal ()
 Compute part of m_fT above block diagonal.
void computeSchurDecomposition ()
 Store the Schur decomposition of m_A in m_T and m_U.
void constructPermutation ()
 Compute m_permutation using m_eivalToCluster and m_blockStart.
ListOfClusters::iterator findCluster (Scalar key)
 Find cluster in m_clusters containing some value.
MatrixFunctionoperator= (const MatrixFunction &)
void partitionEigenvalues ()
 Partition eigenvalues in clusters of ei'vals close to each other.
void permuteSchur ()
 Permute Schur decomposition in m_U and m_T according to m_permutation.
DynMatrixType solveTriangularSylvester (const DynMatrixType &A, const DynMatrixType &B, const DynMatrixType &C)
 Solve a triangular Sylvester equation AX + XB = C.
void swapEntriesInSchur (Index index)
 Swap rows index and index+1 in Schur decomposition in m_U and m_T.

Static Private Member Functions

static const RealScalar separation ()
 Maximum distance allowed between eigenvalues to be considered "close".

Private Attributes

internal::nested< MatrixType >
::type 
m_A
 Reference to argument of matrix function.
DynamicIntVectorType m_blockStart
 Row index at which block corresponding to i-th cluster starts.
ListOfClusters m_clusters
 Partition of eigenvalues into clusters of ei'vals "close" to each other.
DynamicIntVectorType m_clusterSize
 Number of eigenvalues in each clusters.
DynamicIntVectorType m_eivalToCluster
 m_eivalToCluster[i] = j means i-th ei'val is in j-th cluster
StemFunctionm_f
 Stem function for matrix function under consideration.
MatrixType m_fT
 Matrix function applied to m_T
IntVectorType m_permutation
 Permutation which groups ei'vals in the same cluster together.
MatrixType m_T
 Triangular part of Schur decomposition.
MatrixType m_U
 Unitary part of Schur decomposition.

Static Private Attributes

static const int ColsAtCompileTime = Traits::ColsAtCompileTime
static const int Options = MatrixType::Options
static const int RowsAtCompileTime = Traits::RowsAtCompileTime

Detailed Description

template<typename MatrixType>
class MatrixFunction< MatrixType, 1 >

Partial specialization of MatrixFunction for complex matrices.

Definition at line 131 of file MatrixFunction.h.


Member Typedef Documentation

template<typename MatrixType >
typedef std::list<Scalar> MatrixFunction< MatrixType, 1 >::Cluster [private]

Definition at line 146 of file MatrixFunction.h.

template<typename MatrixType >
typedef Matrix<Index, Dynamic, 1> MatrixFunction< MatrixType, 1 >::DynamicIntVectorType [private]

Definition at line 145 of file MatrixFunction.h.

template<typename MatrixType >
typedef Matrix<Scalar, Dynamic, Dynamic, Options, RowsAtCompileTime, ColsAtCompileTime> MatrixFunction< MatrixType, 1 >::DynMatrixType [private]

Definition at line 148 of file MatrixFunction.h.

template<typename MatrixType >
typedef MatrixType::Index MatrixFunction< MatrixType, 1 >::Index [private]

Definition at line 137 of file MatrixFunction.h.

template<typename MatrixType >
typedef Matrix<Index, Traits::RowsAtCompileTime, 1> MatrixFunction< MatrixType, 1 >::IntVectorType [private]

Definition at line 144 of file MatrixFunction.h.

template<typename MatrixType >
typedef std::list<Cluster> MatrixFunction< MatrixType, 1 >::ListOfClusters [private]

Definition at line 147 of file MatrixFunction.h.

template<typename MatrixType >
typedef NumTraits<Scalar>::Real MatrixFunction< MatrixType, 1 >::RealScalar [private]

Definition at line 141 of file MatrixFunction.h.

template<typename MatrixType >
typedef MatrixType::Scalar MatrixFunction< MatrixType, 1 >::Scalar [private]

Definition at line 136 of file MatrixFunction.h.

template<typename MatrixType >
typedef internal::stem_function<Scalar>::type MatrixFunction< MatrixType, 1 >::StemFunction [private]

Definition at line 142 of file MatrixFunction.h.

template<typename MatrixType >
typedef internal::traits<MatrixType> MatrixFunction< MatrixType, 1 >::Traits [private]

Definition at line 135 of file MatrixFunction.h.

template<typename MatrixType >
typedef Matrix<Scalar, Traits::RowsAtCompileTime, 1> MatrixFunction< MatrixType, 1 >::VectorType [private]

Definition at line 143 of file MatrixFunction.h.


Constructor & Destructor Documentation

template<typename MatrixType >
MatrixFunction< MatrixType, 1 >::MatrixFunction ( const MatrixType A,
StemFunction  f 
)

Constructor.

Parameters:
[in]Aargument of matrix function, should be a square matrix.
[in]fan entire function; f(x,n) should compute the n-th derivative of f at x.

Definition at line 198 of file MatrixFunction.h.


Member Function Documentation

template<typename MatrixType >
Block< MatrixType > MatrixFunction< MatrixType, 1 >::block ( MatrixType A,
Index  i,
Index  j 
) [private]

Return block of matrix according to blocking given by m_blockStart.

Definition at line 388 of file MatrixFunction.h.

template<typename MatrixType >
template<typename ResultType >
void MatrixFunction< MatrixType, 1 >::compute ( ResultType &  result)

Compute the matrix function.

Parameters:
[out]resultthe function f applied to A, as specified in the constructor.

Definition at line 211 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::computeBlockAtomic ( ) [private]

Compute block diagonal part of m_fT.

This routine computes the matrix function m_f applied to the block diagonal part of m_T, with the blocking given by m_blockStart. The result is stored in m_fT. The off-diagonal parts of m_fT are set to zero.

Definition at line 376 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::computeBlockStart ( ) [private]

Compute m_blockStart using m_clusterSize.

Definition at line 317 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::computeClusterSize ( ) [private]

Compute m_clusterSize and m_eivalToCluster using m_clusters.

Definition at line 295 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::computeOffDiagonal ( ) [private]

Compute part of m_fT above block diagonal.

This routine assumes that the block diagonal part of m_fT (which equals m_f applied to m_T) has already been computed and computes the part above the block diagonal. The part below the diagonal is zero, because m_T is upper triangular.

Definition at line 401 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::computeSchurDecomposition ( ) [private]

Store the Schur decomposition of m_A in m_T and m_U.

Definition at line 226 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::constructPermutation ( ) [private]

Compute m_permutation using m_eivalToCluster and m_blockStart.

Definition at line 328 of file MatrixFunction.h.

template<typename MatrixType >
MatrixFunction< MatrixType, 1 >::ListOfClusters::iterator MatrixFunction< MatrixType, 1 >::findCluster ( Scalar  key) [private]

Find cluster in m_clusters containing some value.

Parameters:
[in]keyValue to find
Returns:
Iterator to cluster containing key, or m_clusters.end() if no cluster in m_clusters contains key.

Definition at line 282 of file MatrixFunction.h.

template<typename MatrixType >
MatrixFunction& MatrixFunction< MatrixType, 1 >::operator= ( const MatrixFunction< MatrixType, 1 > &  ) [private]
template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::partitionEigenvalues ( ) [private]

Partition eigenvalues in clusters of ei'vals close to each other.

This function computes m_clusters. This is a partition of the eigenvalues of m_T in clusters, such that # Any eigenvalue in a certain cluster is at most separation() away from another eigenvalue in the same cluster. # The distance between two eigenvalues in different clusters is more than separation(). The implementation follows Algorithm 4.1 in the paper of Davies and Higham.

Definition at line 245 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::permuteSchur ( ) [private]

Permute Schur decomposition in m_U and m_T according to m_permutation.

Definition at line 341 of file MatrixFunction.h.

template<typename MatrixType >
static const RealScalar MatrixFunction< MatrixType, 1 >::separation ( ) [inline, static, private]

Maximum distance allowed between eigenvalues to be considered "close".

This is morally a static const Scalar, but only integers can be static constant class members in C++. The separation constant is set to 0.1, a value taken from the paper by Davies and Higham.

Definition at line 187 of file MatrixFunction.h.

template<typename MatrixType >
MatrixFunction< MatrixType, 1 >::DynMatrixType MatrixFunction< MatrixType, 1 >::solveTriangularSylvester ( const DynMatrixType A,
const DynMatrixType B,
const DynMatrixType C 
) [private]

Solve a triangular Sylvester equation AX + XB = C.

Parameters:
[in]Athe matrix A; should be square and upper triangular
[in]Bthe matrix B; should be square and upper triangular
[in]Cthe matrix C; should have correct size.
Returns:
the solution X.

If A is m-by-m and B is n-by-n, then both C and X are m-by-n. The (i,j)-th component of the Sylvester equation is

\[ \sum_{k=i}^m A_{ik} X_{kj} + \sum_{k=1}^j X_{ik} B_{kj} = C_{ij}. \]

This can be re-arranged to yield:

\[ X_{ij} = \frac{1}{A_{ii} + B_{jj}} \Bigl( C_{ij} - \sum_{k=i+1}^m A_{ik} X_{kj} - \sum_{k=1}^{j-1} X_{ik} B_{kj} \Bigr). \]

It is assumed that A and B are such that the numerator is never zero (otherwise the Sylvester equation does not have a unique solution). In that case, these equations can be evaluated in the order $ i=m,\ldots,1 $ and $ j=1,\ldots,n $.

Definition at line 443 of file MatrixFunction.h.

template<typename MatrixType >
void MatrixFunction< MatrixType, 1 >::swapEntriesInSchur ( Index  index) [private]

Swap rows index and index+1 in Schur decomposition in m_U and m_T.

Definition at line 359 of file MatrixFunction.h.


Member Data Documentation

template<typename MatrixType >
const int MatrixFunction< MatrixType, 1 >::ColsAtCompileTime = Traits::ColsAtCompileTime [static, private]

Definition at line 139 of file MatrixFunction.h.

template<typename MatrixType >
internal::nested<MatrixType>::type MatrixFunction< MatrixType, 1 >::m_A [private]

Reference to argument of matrix function.

Definition at line 170 of file MatrixFunction.h.

template<typename MatrixType >
DynamicIntVectorType MatrixFunction< MatrixType, 1 >::m_blockStart [private]

Row index at which block corresponding to i-th cluster starts.

Definition at line 178 of file MatrixFunction.h.

template<typename MatrixType >
ListOfClusters MatrixFunction< MatrixType, 1 >::m_clusters [private]

Partition of eigenvalues into clusters of ei'vals "close" to each other.

Definition at line 175 of file MatrixFunction.h.

template<typename MatrixType >
DynamicIntVectorType MatrixFunction< MatrixType, 1 >::m_clusterSize [private]

Number of eigenvalues in each clusters.

Definition at line 177 of file MatrixFunction.h.

template<typename MatrixType >
DynamicIntVectorType MatrixFunction< MatrixType, 1 >::m_eivalToCluster [private]

m_eivalToCluster[i] = j means i-th ei'val is in j-th cluster

Definition at line 176 of file MatrixFunction.h.

template<typename MatrixType >
StemFunction* MatrixFunction< MatrixType, 1 >::m_f [private]

Stem function for matrix function under consideration.

Definition at line 171 of file MatrixFunction.h.

template<typename MatrixType >
MatrixType MatrixFunction< MatrixType, 1 >::m_fT [private]

Matrix function applied to m_T

Definition at line 174 of file MatrixFunction.h.

template<typename MatrixType >
IntVectorType MatrixFunction< MatrixType, 1 >::m_permutation [private]

Permutation which groups ei'vals in the same cluster together.

Definition at line 179 of file MatrixFunction.h.

template<typename MatrixType >
MatrixType MatrixFunction< MatrixType, 1 >::m_T [private]

Triangular part of Schur decomposition.

Definition at line 172 of file MatrixFunction.h.

template<typename MatrixType >
MatrixType MatrixFunction< MatrixType, 1 >::m_U [private]

Unitary part of Schur decomposition.

Definition at line 173 of file MatrixFunction.h.

template<typename MatrixType >
const int MatrixFunction< MatrixType, 1 >::Options = MatrixType::Options [static, private]

Definition at line 140 of file MatrixFunction.h.

template<typename MatrixType >
const int MatrixFunction< MatrixType, 1 >::RowsAtCompileTime = Traits::RowsAtCompileTime [static, private]

Definition at line 138 of file MatrixFunction.h.


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


re_vision
Author(s): Dorian Galvez-Lopez
autogenerated on Sun Jan 5 2014 11:34:15