Arnoldi Iteration
ExponentialUtilities.arnoldi — Functionarnoldi(A,b[;m,tol,opnorm,iop]) -> KsPerforms m arnoldi iterations to obtain the Krylov subspace K_m(A,b).
The n x (m + 1) basis vectors getV(Ks) and the (m + 1) x m upper Hessenberg matrix getH(Ks) are related by the recurrence formula
v_1=b,\quad Av_j = \sum_{i=1}^{j+1}h_{ij}v_i\quad(j = 1,2,\ldots,m)iop determines the length of the incomplete orthogonalization procedure [1]. The default value of 0 indicates full Arnoldi. For symmetric/Hermitian A, iop will be ignored and the Lanczos algorithm will be used instead.
Refer to KrylovSubspace for more information regarding the output.
Happy-breakdown occurs whenever norm(v_j) < tol * opnorm, in this case, the dimension of Ks is smaller than m.
ExponentialUtilities.arnoldi! — Functionarnoldi!(Ks,A,b[;tol,m,opnorm,iop,init]) -> KsNon-allocating version of arnoldi.
ExponentialUtilities.lanczos! — Functionlanczos!(Ks,A,b[;tol,m,opnorm]) -> KsA variation of arnoldi! that uses the Lanczos algorithm for Hermitian matrices.
API
ExponentialUtilities.KrylovSubspace — TypeKrylovSubspace{T}(n,[maxiter=30]) -> Ks
KrylovSubspace{T, U, VType}(n,[maxiter=30]) -> KsConstructs an uninitialized Krylov subspace, which can be filled by arnoldi!.
The dimension of the subspace, Ks.m, can be dynamically altered but should be smaller than maxiter, the maximum allowed arnoldi iterations.
The type of the (extended) orthonormal basis vector matrix V may be specified as VType. This is required e. g. for GPUArrays.
U determines eltype(H).
getV(Ks) -> V
getH(Ks) -> HAccess methods for the (extended) orthonormal basis V and the (extended) Gram-Schmidt coefficients H. Both methods return a view into the storage arrays and has the correct dimensions as indicated by Ks.m.
resize!(Ks, maxiter) -> KsResize Ks to a different maxiter, destroying its contents.
This is an expensive operation and should be used scarcely.
ExponentialUtilities.firststep! — Functionfirststep!(Ks, V, H, b) -> nothingCompute the first step of Arnoldi or Lanczos iteration.
firststep!(Ks, V, H, b, b_aug, t, mu, l) -> nothingCompute the first step of Arnoldi or Lanczos iteration of augmented system.
ExponentialUtilities.arnoldi_step! — Functionarnoldi_step!(j, iop, n, A, V, H)Take the j 'th step of the Lanczos iteration.
ExponentialUtilities.lanczos_step! — Functionlanczos_step!(j, m, n, A, V, H)Take the j'th step of the Lanczos iteration.
ExponentialUtilities.coeff — Functioncoeff(::Type,α)Helper functions that returns the real part if that is what is required (for Hermitian matrices), otherwise returns the value as-is.
- 1Koskela, A. (2015). Approximating the matrix exponential of an advection-diffusion operator using the incomplete orthogonalization method. In Numerical Mathematics and Advanced Applications-ENUMATH 2013 (pp. 345-353). Springer, Cham.