numerics
Loading...
Searching...
No Matches
expv.hpp
Go to the documentation of this file.
1/// @file expv.hpp
2/// @brief Krylov subspace matrix exponential-vector product: compute exp(t*A)*v
3///
4/// Uses the Arnoldi process to build a Krylov basis, then applies a dense
5/// Padé [6/6] matrix exponential on the projected (small) problem.
6#pragma once
7
8#include "core/types.hpp"
9#include "core/vector.hpp"
11#include "linalg/solvers/cg.hpp"
12#include <functional>
13
14namespace num {
15
16/// @brief Compute exp(t*A)*v via Krylov-Padé approximation (matrix-free)
17///
18/// @param t Scalar multiplier on A
19/// @param matvec Callable y = A*x
20/// @param n Dimension of the state space (size of v)
21/// @param v Input vector
22/// @param m_max Maximum Krylov dimension (default 30)
23/// @param tol Breakdown tolerance for Arnoldi (default 1e-8)
24/// @return Approximation of exp(t*A)*v
25Vector expv(real t, const MatVecFn& matvec, idx n, const Vector& v,
26 int m_max = 30, real tol = 1e-8);
27
28/// @brief Compute exp(t*A)*v via Krylov-Padé approximation (sparse matrix)
29///
30/// @param t Scalar multiplier on A
31/// @param A Sparse matrix in CSR format
32/// @param v Input vector
33/// @param m_max Maximum Krylov dimension (default 30)
34/// @param tol Breakdown tolerance for Arnoldi (default 1e-8)
35/// @return Approximation of exp(t*A)*v
36Vector expv(real t, const SparseMatrix& A, const Vector& v,
37 int m_max = 30, real tol = 1e-8);
38
39} // namespace num
Conjugate gradient solvers (dense and matrix-free)
Core type definitions.
double real
Definition types.hpp:10
constexpr T ipow(T x) noexcept
Compute x^N at compile time via repeated squaring.
std::size_t idx
Definition types.hpp:11
void matvec(const Matrix &A, const Vector &x, Vector &y, Backend b=default_backend)
y = A * x
Definition matrix.cpp:94
constexpr real e
Definition math.hpp:41
BasicVector< real > Vector
Real-valued dense vector with full backend dispatch (CPU + GPU)
Definition vector.hpp:122
Vector expv(real t, const MatVecFn &matvec, idx n, const Vector &v, int m_max=30, real tol=1e-8)
Compute exp(t*A)*v via Krylov-Padé approximation (matrix-free)
Definition expv.cpp:110
std::function< void(const Vector &, Vector &)> MatVecFn
Callable type for matrix-free matvec: computes y = A*x.
Definition cg.hpp:13
Compressed Sparse Row (CSR) matrix and operations.
Vector operations.