template<typename Scalar_, int Rows_, int Cols_>
class Eigen::Hankel< Scalar_, Rows_, Cols_ >
An m x n Hankel matrix represented by its first column and last row.
A Hankel matrix has constant anti-diagonals: entry (i,j) equals h[i+j], where h is the length m+n-1 sequence formed by the first column followed by the tail of the last row. The overlap entry h[m-1] is taken from the column, so row[0] is ignored. Every column of the matrix is a contiguous slice of h. A real square Hankel matrix is symmetric.
The matrix-vector product (operator*) is evaluated in O(n log n): a Hankel matrix is a column-reversed Toeplitz matrix, so the product is a circulant convolution of h with the reversed input, evaluated through a DFT symbol computed once at construction. (Small operators, and single-row or single-column ones – whose products cost O(n) directly – skip the FFT for a direct evaluation.) As with Toeplitz, operator* returns an Eigen product expression, so a Hankel plugs into the matrix-free iterative solvers (including the least-squares solvers, through adjoint), 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<Hankel<double>,IdentityPreconditioner>): the default preconditioners read individual coefficients through col() or InnerIterator, which the structured operators do not expose.
The class is closed under transpose, conjugate and adjoint. The transpose is the Hankel matrix of the same sequence with the dimensions swapped, and its symbol is obtained from the cached one by a diagonal phase multiplication instead of a new FFT.
Square linear systems are solved directly in O(n^2) through the column-reversed Toeplitz equivalent (toToeplitz) and the LookAheadLevinson solver, see solve.
- 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 Toeplitz, class Circulant, makeHankel()
template<typename Scalar_, int Rows_, int Cols_>
template<typename ColDerived, typename RowDerived>
Builds a Hankel matrix from its first column col and last row row. The anti-diagonal overlap entry is taken from col, hence row[0] is ignored.
Unless the matrix is small, or a single row or column (whose products are always evaluated directly, in linear time), the DFT symbol of the underlying circulant convolution is computed here, once, and reused by every subsequent product.