|
Metis 2.0.0
High-performance C++20 dual-mode numerical framework
|
Linear algebra operations (solve, inverse, determinant, eigendecomposition, norms). More...
#include "metis/core/MetisConcepts.hpp"#include "metis/core/MetisError.hpp"#include "metis/core/MetisTypes.hpp"#include "metis/math/Arithmetic.hpp"#include "metis/math/Logic.hpp"#include "metis/math/Trig.hpp"#include <Eigen/Dense>#include <Eigen/IterativeLinearSolvers>#include <Eigen/SparseCholesky>#include <Eigen/SparseLU>#include <Eigen/SparseQR>#include <algorithm>#include <array>#include <casadi/casadi.hpp>#include <cmath>#include <complex>#include <functional>#include <limits>#include <numeric>#include <string>#include <unsupported/Eigen/IterativeSolvers>#include <vector>

Go to the source code of this file.
Classes | |
| struct | metis::LinearSolvePolicy |
| Configuration for linear system solve backend and algorithm. More... | |
| class | metis::detail::FunctionalPreconditioner |
| struct | metis::EigenDecomposition< Scalar > |
| Result of eigendecomposition: eigenvalues and eigenvectors. More... | |
Namespaces | |
| namespace | metis |
| namespace | metis::detail |
| Smooth approximation of ReLU function: softplus(x) = (1/beta) * log(1 + exp(beta * x)). | |
Enumerations | |
| enum class | metis::LinearSolveBackend { metis::Dense , metis::SparseDirect , metis::IterativeKrylov } |
| Backend selection for linear system solves. More... | |
| enum class | metis::DenseLinearSolver { metis::ColPivHouseholderQR , metis::PartialPivLU , metis::FullPivLU , metis::LLT , metis::LDLT } |
| Dense linear solver algorithm. More... | |
| enum class | metis::SparseDirectLinearSolver { metis::SparseLU , metis::SparseQR , metis::SimplicialLLT , metis::SimplicialLDLT } |
| Sparse direct solver algorithm. More... | |
| enum class | metis::IterativeKrylovSolver { metis::BiCGSTAB , metis::GMRES } |
| Iterative Krylov solver algorithm. More... | |
| enum class | metis::IterativePreconditioner { metis::None , metis::Diagonal } |
| Preconditioner for iterative solvers. More... | |
| enum class | metis::NormType { metis::L1 , metis::L2 , metis::Inf , metis::Frobenius } |
| Norm type selection. More... | |
Functions | |
| void | metis::detail::validate_linear_solve_dims (Eigen::Index a_rows, Eigen::Index a_cols, Eigen::Index b_rows, const std::string &context) |
| void | metis::detail::validate_square_required (Eigen::Index rows, Eigen::Index cols, const std::string &context, const std::string &solver_name) |
| void | metis::detail::validate_iterative_policy (const LinearSolvePolicy &policy, const std::string &context) |
| std::function< NumericVector(const NumericVector &)> | metis::detail::make_preconditioner (const SparseMatrix &A, const LinearSolvePolicy &policy) |
| template<typename MatrixLike> | |
| SparseMatrix | metis::detail::dense_to_sparse (const MatrixLike &A) |
| template<typename DerivedB> | |
| auto | metis::detail::solve_sparse_direct_numeric (const SparseMatrix &A, const Eigen::MatrixBase< DerivedB > &b, const LinearSolvePolicy &policy) |
| template<typename Solver, typename DerivedB> | |
| auto | metis::detail::solve_iterative_with_solver (Solver &solver, const Eigen::MatrixBase< DerivedB > &b) |
| template<typename DerivedB> | |
| auto | metis::detail::solve_iterative_numeric (const SparseMatrix &A, const Eigen::MatrixBase< DerivedB > &b, const LinearSolvePolicy &policy) |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::detail::solve_dense_numeric (const Eigen::MatrixBase< DerivedA > &A, const Eigen::MatrixBase< DerivedB > &b, const LinearSolvePolicy &policy) |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::solve (const Eigen::MatrixBase< DerivedA > &A, const Eigen::MatrixBase< DerivedB > &b) |
| Solves linear system Ax = b using the default backend policy. | |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::solve (const Eigen::MatrixBase< DerivedA > &A, const Eigen::MatrixBase< DerivedB > &b, const LinearSolvePolicy &policy) |
| Solves linear system Ax = b using an explicit backend policy. | |
| template<typename DerivedB> | |
| auto | metis::solve (const SparseMatrix &A, const Eigen::MatrixBase< DerivedB > &b) |
| Solve a numeric sparse linear system with a sparse-aware default backend. | |
| template<typename DerivedB> | |
| auto | metis::solve (const SparseMatrix &A, const Eigen::MatrixBase< DerivedB > &b, const LinearSolvePolicy &policy) |
| Solve a numeric sparse linear system using an explicit backend policy. | |
| template<typename DerivedX, typename DerivedY> | |
| auto | metis::outer (const Eigen::MatrixBase< DerivedX > &x, const Eigen::MatrixBase< DerivedY > &y) |
| Computes outer product x * y^T. | |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::dot (const Eigen::MatrixBase< DerivedA > &a, const Eigen::MatrixBase< DerivedB > &b) |
| Computes dot product of two vectors. | |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::cross (const Eigen::MatrixBase< DerivedA > &a, const Eigen::MatrixBase< DerivedB > &b) |
| Computes 3D cross product. | |
| template<typename Derived> | |
| auto | metis::inv (const Eigen::MatrixBase< Derived > &A) |
| Computes matrix inverse. | |
| template<typename Derived> | |
| auto | metis::det (const Eigen::MatrixBase< Derived > &A) |
| Computes matrix determinant. | |
| template<typename DerivedA, typename DerivedB> | |
| auto | metis::inner (const Eigen::MatrixBase< DerivedA > &a, const Eigen::MatrixBase< DerivedB > &b) |
| Computes inner product of two vectors (dot product). | |
| template<typename Derived> | |
| auto | metis::pinv (const Eigen::MatrixBase< Derived > &A) |
| Computes Moore-Penrose pseudo-inverse. | |
| template<typename Derived> | |
| auto | metis::norm (const Eigen::MatrixBase< Derived > &x, NormType type=NormType::L2) |
| Computes vector/matrix norm. | |
| template<typename Scalar> | |
| MetisVector< Scalar > | metis::detail::normalize_vector (const MetisVector< Scalar > &v) |
| template<typename Scalar> | |
| MetisVector< Scalar > | metis::detail::best_eigenvector_candidate (const std::array< MetisVector< Scalar >, 3 > &cands) |
| template<typename Scalar> | |
| MetisVector< Scalar > | metis::detail::symmetric_eigenvector_2x2 (const MetisMatrix< Scalar > &A, const Scalar &lambda) |
| template<typename Scalar> | |
| MetisVector< Scalar > | metis::detail::symmetric_eigenvector_3x3 (const MetisMatrix< Scalar > &A, const Scalar &lambda) |
| template<typename Scalar> | |
| Scalar | metis::detail::determinant_3x3 (const MetisMatrix< Scalar > &A) |
| template<typename Scalar> | |
| void | metis::detail::sort_eigenpairs (MetisVector< Scalar > &eigenvalues, MetisMatrix< Scalar > &eigenvectors) |
| template<typename Scalar> | |
| EigenDecomposition< Scalar > | metis::detail::eig_symmetric_symbolic (const MetisMatrix< Scalar > &A) |
| template<typename Derived> | |
| auto | metis::eig (const Eigen::MatrixBase< Derived > &A) |
| Computes the eigendecomposition of a square matrix with a real spectrum. | |
| template<typename Derived> | |
| auto | metis::eig_symmetric (const Eigen::MatrixBase< Derived > &A) |
| Computes the eigendecomposition of a symmetric matrix. | |
| template<typename T> | |
| std::tuple< T, T, T, T, T, T > | metis::inv_symmetric_3x3_explicit (const T &m11, const T &m22, const T &m33, const T &m12, const T &m23, const T &m13) |
| Explicit inverse of a symmetric 3x3 matrix. | |
| SparseMatrix | metis::sparse_from_triplets (int rows, int cols, const std::vector< SparseTriplet > &triplets) |
| Create sparse matrix from triplets. | |
| SparseMatrix | metis::to_sparse (const NumericMatrix &dense, double tol=0.0) |
| Convert dense matrix to sparse. | |
| NumericMatrix | metis::to_dense (const SparseMatrix &sparse) |
| Convert sparse matrix to dense. | |
| SparseMatrix | metis::sparse_identity (int n) |
| Create identity sparse matrix. | |
Variables | |
| template<typename DerivedA> | |
| constexpr bool | metis::detail::dense_solver_square_compatible |
| template<typename Scalar> | |
| constexpr bool | metis::is_numeric_scalar_v = std::is_floating_point_v<Scalar> || std::is_integral_v<Scalar> |
| Compile-time check for numeric scalar types. | |
Linear algebra operations (solve, inverse, determinant, eigendecomposition, norms).