A Julia package collecting a number of Krylov-based algorithms for linear problems, singular value and eigenvalue problems and the application of functions of linear maps or operators to vectors.
Documentation | Build Status | Digital Object Idenitifier | License |
---|---|---|---|
This version now depends on and uses VectorInterface.jl
to define the vector-like behavior of the input vectors, rather than some minimal set of
methods from Base
and LinearAlgebra
. The advantage is that many more types from standard
Julia are now supported out of the box, such as nested vectors or immutable objects such as
tuples. For custom user types for which the old set of required methods was implemented, there
are fallback definitions of the methods in VectorInferace.jl such that these types should still
be supported, but this might result in warnings being printed. It is recommend to implement full
support for at least the methods in VectorInterface without bang or with double bang, where the
latter set of methods can use in-place mutation if your type supports this behavior.
In particular, tuples are now supported:
julia> values, vectors, info = eigsolve(t -> cumsum(t) .+ 0.5 .* reverse(t), (1,0,0,0));
julia> values
4-element Vector{ComplexF64}:
2.5298897746721303 + 0.0im
0.7181879189193713 + 0.4653321688070444im
0.7181879189193713 - 0.4653321688070444im
0.03373438748912972 + 0.0im
julia> vectors
4-element Vector{NTuple{4, ComplexF64}}:
(0.25302539267845964 + 0.0im, 0.322913174072047 + 0.0im, 0.48199234088257203 + 0.0im, 0.774201921982351 + 0.0im)
(0.08084058845575778 + 0.46550907490257704im, 0.16361072959559492 - 0.20526827902633993im, -0.06286027036719286 - 0.6630573167350086im, -0.47879640378455346 - 0.18713670961291684im)
(0.08084058845575778 - 0.46550907490257704im, 0.16361072959559492 + 0.20526827902633993im, -0.06286027036719286 + 0.6630573167350086im, -0.47879640378455346 + 0.18713670961291684im)
(0.22573986355213632 + 0.0im, -0.5730667760748933 + 0.0im, 0.655989711683001 + 0.0im, -0.4362493350466509 + 0.0im)
KrylovKit.jl accepts general functions or callable objects as linear maps, and general Julia objects with vector like behavior (as defined in the docs) as vectors.
The high level interface of KrylovKit is provided by the following functions:
linsolve
: solve linear systemseigsolve
: find a few eigenvalues and corresponding eigenvectorsgeneigsolve
: find a few generalized eigenvalues and corresponding vectorssvdsolve
: find a few singular values and corresponding left and right singular vectorsexponentiate
: apply the exponential of a linear map to a vectorexpintegrator
: exponential integrator
for a linear non-homogeneous ODE, computes a linear combination of the ϕⱼ
functions which generalize ϕ₀(z) = exp(z)
.KrylovKit.jl
can be installed with the Julia package manager.
From the Julia REPL, type ]
to enter the Pkg REPL mode and run:
pkg> add KrylovKit
Or, equivalently, via the Pkg
API:
julia> import Pkg; Pkg.add("KrylovKit.jl")
The package is tested against Julia 1.0
, the current stable and the nightly builds of the Julia master
branch on Linux, macOS, and Windows, 32- and 64-bit architecture and with 1
and 4
threads.
Contributions are very welcome, as are feature requests and suggestions. Please open an issue if you encounter any problems.