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()
template<typename Scalar_, int Rows_, int Cols_>
template<typename ColDerived, typename RowDerived>
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.