Пакет Julia, объединяющий ряд алгоритмов на основе Крылова для решения линейных задач, задач сингулярных и собственных значений, а также применения функций линейных отображений или операторов к векторам.
Документация | Статус сборки | Идентификатор цифрового объекта | Лицензия |
---|---|---|---|
Эта версия теперь зависит от VectorInterface.jl и использует его для определения векторного поведения входных векторов, а не некоторого минимального набора методов из Base
и LinearAlgebra
. Преимущество состоит в том, что теперь из коробки поддерживается гораздо больше типов из стандартного Julia, например вложенные векторы или неизменяемые объекты, такие как кортежи. Для пользовательских типов пользователей, для которых был реализован старый набор обязательных методов, в VectorInferace.jl существуют резервные определения методов, поэтому эти типы по-прежнему должны поддерживаться, но это может привести к выводу предупреждений. Рекомендуется реализовать полную поддержку, по крайней мере, для методов в VectorInterface без bang или с двойным bang, где последний набор методов может использовать мутацию на месте, если ваш тип поддерживает такое поведение.
В частности, теперь поддерживаются кортежи:
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 принимает общие функции или вызываемые объекты в качестве линейных карт, а общие объекты Julia с векторным поведением (как определено в документации) в качестве векторов.
Высокоуровневый интерфейс KrylovKit представлен следующими функциями:
linsolve
: решать линейные системыeigsolve
: найти несколько собственных значений и соответствующих собственных векторовgeneigsolve
: найти несколько обобщенных собственных значений и соответствующих векторовsvdsolve
: найти несколько сингулярных значений и соответствующие левые и правые сингулярные векторыexponentiate
: применять экспоненту линейной карты к векторуexpintegrator
: экспоненциальный интегратор для линейного неоднородного ОДУ, вычисляет линейную комбинацию функций ϕⱼ
, которые обобщают ϕ₀(z) = exp(z)
. KrylovKit.jl
можно установить с помощью менеджера пакетов Julia. В Julia REPL введите ]
, чтобы войти в режим Pkg REPL, и запустите:
pkg> add KrylovKit
Или, что то же самое, через Pkg
API:
julia > import Pkg; Pkg . add ( " KrylovKit.jl " )
Пакет протестирован на Julia 1.0
, текущей стабильной версии и ночных сборках master
ветки Julia на Linux, macOS и Windows, 32- и 64-битной архитектуре и с 1
и 4
потоками.
Вклад очень приветствуется, равно как и пожелания и предложения. Пожалуйста, откройте вопрос, если у вас возникнут какие-либо проблемы.