blob: 3cb6abbee48e4ecde4abf3aad87603226a62d31f [file]
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
// SPDX-FileCopyrightText: The Eigen Authors
// SPDX-License-Identifier: MPL-2.0
#ifndef EIGEN_STRUCTURED_MATRICES_MODULE_H
#define EIGEN_STRUCTURED_MATRICES_MODULE_H
#include "../../Eigen/Core"
#include "../../Eigen/Eigenvalues"
#include "../../Eigen/LU"
#include "../../Eigen/SVD"
#include "../../Eigen/IterativeLinearSolvers"
#include "FFT"
namespace Eigen {
/**
* \defgroup StructuredMatrices_Module StructuredMatrices module
*
* This module provides lightweight operator types for displacement-structured
* matrices together with fast matrix-vector products and direct solvers:
* - \c Circulant : a circulant matrix, diagonalized by the DFT;
* - \c Toeplitz : a (possibly rectangular) Toeplitz matrix, multiplied in
* O(n log n) via circulant embedding;
* - \c Hankel : a (possibly rectangular) Hankel matrix -- a column-reversed
* Toeplitz matrix -- with the same O(n log n) products, and square solves
* through the Toeplitz equivalent;
* - \c KroneckerOperator : the Kronecker product of two dense or diagonal
* matrices as an implicit operator; products, solves, least squares,
* eigendecomposition, SVD, inverse and determinant all factor through the
* operands, and diagonal (in particular identity) factors are stored and
* applied in diagonal form;
* - \c DiagonalPlusLowRank : a diagonal matrix plus a rank-k correction, with
* O(nk) products and O(nk^2) Woodbury solves, closed under inversion;
* - \c Vandermonde : a Vandermonde matrix stored as its nodes, with Horner
* products and O(n^2) Björck-Pereyra primal/dual solves
* (\c BjorckPereyra).
*
* The operator types derive from \c EigenBase and store only compact generators
* or factors. The FFT-backed operators (\c Circulant, \c Toeplitz and \c Hankel)
* also keep a precomputed DFT symbol that every product reuses.
* The operator types derive from \c EigenBase and store only their generating
* vectors; the FFT-backed operators (\c Circulant, \c Toeplitz, \c Bccb) also
* keep a precomputed DFT symbol that every product reuses.
* Because they expose \c operator* returning an Eigen product expression, they
* also plug directly into the matrix-free iterative solvers
* (\c ConjugateGradient, \c GMRES, \c MINRES, ...) without forming the dense
* matrix; and since they hook into the evaluator system, they can be assigned
* to a dense matrix when an explicit representation is needed. Like every
* matrix-free operator, they carry no coefficient storage the default
* preconditioners could read, so the iterative solvers must be instantiated
* with \c IdentityPreconditioner.
*
* All operator types are closed under transposition (\c transpose(),
* \c conjugate(), \c adjoint() return operators of the same kind, the FFT-based
* ones reusing the cached symbol), which in particular feeds the least-squares
* solvers \c LSMR and \c LeastSquaresConjugateGradient (again with
* \c IdentityPreconditioner).
* The \c Circulant, \c Toeplitz and \c Hankel operators are closed under
* transposition (\c transpose(),
* \c conjugate(), \c adjoint() return operators of the same kind, reusing the
* cached symbol), which in particular feeds the least-squares solvers \c LSMR
* and \c LeastSquaresConjugateGradient (again with \c IdentityPreconditioner).
* \c Circulant additionally exposes its closed-form eigendecomposition and SVD
* in the Fourier basis, a pseudo-inverse (minimum-norm least-squares) solve,
* \c rank(), \c inverse() and \c determinant().
*
* \code
* #include <contrib/Eigen/StructuredMatrices>
* \endcode
*/
} // namespace Eigen
#include "../../Eigen/src/Core/util/DisableStupidWarnings.h"
// IWYU pragma: begin_exports
#include "src/StructuredMatrices/StructuredMatrixUtils.h"
#include "src/StructuredMatrices/Circulant.h"
#include "src/StructuredMatrices/Toeplitz.h"
#include "src/StructuredMatrices/LookAheadLevinson.h"
#include "src/StructuredMatrices/Hankel.h"
#include "src/StructuredMatrices/KroneckerOperator.h"
#include "src/StructuredMatrices/DiagonalPlusLowRank.h"
#include "src/StructuredMatrices/Vandermonde.h"
// IWYU pragma: end_exports
#include "../../Eigen/src/Core/util/ReenableStupidWarnings.h"
#endif // EIGEN_STRUCTURED_MATRICES_MODULE_H