Eigen-Contrib  5.0.1
 
Loading...
Searching...
No Matches
Eigen::Toeplitz< Scalar_, Rows_, Cols_ > Class Template Reference

#include <contrib/Eigen/src/StructuredMatrices/Toeplitz.h>

Detailed Description

template<typename Scalar_, int Rows_, int Cols_>
class Eigen::Toeplitz< Scalar_, Rows_, Cols_ >

An m x n Toeplitz matrix represented by its first column and row.

For first column \(c\) and first row \(r\),

\[ T_{ij}=\begin{cases}c_{i-j},&i\ge j,\\r_{j-i},&i<j.\end{cases} \]

The diagonal is taken from \(c\), so \(r_0\) is ignored.

The matrix-vector product (operator*) is evaluated in O(n log n) by embedding the Toeplitz matrix in a larger circulant matrix, whose DFT symbol is computed once at construction. As with Circulant, operator* returns an Eigen product expression, so a Toeplitz also plugs into the matrix-free iterative solvers, and it can be assigned to a dense matrix when an explicit representation is needed. As with any matrix-free operator, the iterative solvers must be instantiated with IdentityPreconditioner (e.g. LeastSquaresConjugateGradient<Toeplitz<double>,IdentityPreconditioner>): the default preconditioners read individual coefficients through col() or InnerIterator, which the structured operators do not expose.

Template Parameters
Scalar_the scalar type, real or complex.
Rows_the number of rows at compile time, or Dynamic (the default).
Cols_the number of columns at compile time, or Dynamic (the default).
See also
class Circulant, makeToeplitz()
+ Inheritance diagram for Eigen::Toeplitz< Scalar_, Rows_, Cols_ >:

Public Member Functions

Toeplitz< Scalar, Cols_, Rows_ > adjoint () const
 
Scalar coeff (Index row, Index col) const
 
const ColGeneratorType & column () const
 
Toeplitz conjugate () const
 
template<typename Rhs>
Product< Toeplitz, Rhs > operator* (const MatrixBase< Rhs > &x) const
 
const RowGeneratorType & row () const
 
ComplexVector symbol () const
 
template<typename ColDerived, typename RowDerived>
 Toeplitz (const MatrixBase< ColDerived > &col, const MatrixBase< RowDerived > &row)
 
Toeplitz< Scalar, Cols_, Rows_ > transpose () const
 

Constructor & Destructor Documentation

◆ Toeplitz()

template<typename Scalar_, int Rows_, int Cols_>
template<typename ColDerived, typename RowDerived>
Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::Toeplitz ( const MatrixBase< ColDerived > & col,
const MatrixBase< RowDerived > & row )
inline

Builds a Toeplitz matrix from its first column col and first row row. The diagonal is taken from col, hence row[0] is ignored.

Unless the matrix is small enough for products to always take the direct path, it is embedded into a circulant matrix of 5-smooth size p >= m+n-1 whose first column is [c; 0...0; r[n-1], ..., r[1]]; multiplying that circulant by [x; 0] reproduces the Toeplitz product in its leading m entries. The circulant's DFT symbol is computed here, once, and reused by every subsequent product.

Member Function Documentation

◆ adjoint()

template<typename Scalar_, int Rows_, int Cols_>
Toeplitz< Scalar, Cols_, Rows_ > Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::adjoint ( ) const
inline
Returns
the adjoint of *this, itself a Toeplitz operator (the conjugated transpose). The cached embedding symbol, when present, is reused: the symbol of the adjoint is the elementwise conjugate of the symbol.

◆ coeff()

template<typename Scalar_, int Rows_, int Cols_>
Scalar Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::coeff ( Index row,
Index col ) const
inline
Returns
the coefficient at row row and column col.

◆ column()

template<typename Scalar_, int Rows_, int Cols_>
const ColGeneratorType & Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::column ( ) const
inline
Returns
the generating first column.

◆ conjugate()

template<typename Scalar_, int Rows_, int Cols_>
Toeplitz Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::conjugate ( ) const
inline
Returns
the complex conjugate of *this, itself a Toeplitz operator. The cached embedding symbol, when present, is reused: the symbol of the conjugate is the conjugated index reversal of the symbol.

◆ operator*()

template<typename Scalar_, int Rows_, int Cols_>
template<typename Rhs>
Product< Toeplitz, Rhs > Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::operator* ( const MatrixBase< Rhs > & x) const
inline
Returns
the product expression (*this) * x, evaluated through a fast FFT-based matrix-vector product (circulant embedding). The expression carries the default product tag, so assigning it behaves like any dense product: a temporary resolves aliasing between the destination and x, and .noalias() skips it.

◆ row()

template<typename Scalar_, int Rows_, int Cols_>
const RowGeneratorType & Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::row ( ) const
inline
Returns
the generating first row.

◆ symbol()

template<typename Scalar_, int Rows_, int Cols_>
ComplexVector Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::symbol ( ) const
inline
Returns
the symbol of the circulant embedding, i.e. the DFT of the first column of the size-p circulant matrix the operator is embedded in. Cached when the operator is large enough for products to take the FFT path, computed on the fly for small operators.

◆ transpose()

template<typename Scalar_, int Rows_, int Cols_>
Toeplitz< Scalar, Cols_, Rows_ > Eigen::Toeplitz< Scalar_, Rows_, Cols_ >::transpose ( ) const
inline
Returns
the transpose of *this, itself a Toeplitz operator with the generators swapped (the new first column is the old first row, with its leading entry set to the diagonal value column()[0]). The cached embedding symbol, when present, is reused – the symbol of the transpose is the index reversal of the symbol – so no FFT is recomputed.

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