Um pacote Julia que coleta uma série de algoritmos baseados em Krylov para problemas lineares, problemas de valores singulares e autovalores e a aplicação de funções de mapas lineares ou operadores a vetores.
Documentação | Status de construção | Identificador de Objeto Digital | Licença |
---|---|---|---|
Esta versão agora depende e usa VectorInterface.jl para definir o comportamento vetorial dos vetores de entrada, em vez de algum conjunto mínimo de métodos de Base
e LinearAlgebra
. A vantagem é que muitos outros tipos do Julia padrão agora são suportados imediatamente, como vetores aninhados ou objetos imutáveis, como tuplas. Para tipos de usuário personalizados para os quais o antigo conjunto de métodos necessários foi implementado, há definições de fallback dos métodos em VectorInferace.jl de modo que esses tipos ainda devem ser suportados, mas isso pode resultar na impressão de avisos. Recomenda-se implementar suporte total para pelo menos os métodos em VectorInterface sem bang ou com double bang, onde o último conjunto de métodos pode usar mutação no local se o seu tipo suportar esse comportamento.
Em particular, agora há suporte para tuplas:
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 aceita funções gerais ou objetos que podem ser chamados como mapas lineares, e objetos Julia gerais com comportamento semelhante a um vetor (conforme definido na documentação) como vetores.
A interface de alto nível do KrylovKit é fornecida pelas seguintes funções:
linsolve
: resolver sistemas lineareseigsolve
: encontre alguns autovalores e autovetores correspondentesgeneigsolve
: encontre alguns autovalores generalizados e vetores correspondentessvdsolve
: encontre alguns valores singulares e os vetores singulares correspondentes à esquerda e à direitaexponentiate
: aplica a exponencial de um mapa linear a um vetorexpintegrator
: integrador exponencial para uma EDO linear não homogênea, calcula uma combinação linear das funções ϕⱼ
que generalizam ϕ₀(z) = exp(z)
. KrylovKit.jl
pode ser instalado com o gerenciador de pacotes Julia. No Julia REPL, digite ]
para entrar no modo Pkg REPL e execute:
pkg> add KrylovKit
Ou, de forma equivalente, através da API Pkg
:
julia > import Pkg; Pkg . add ( " KrylovKit.jl " )
O pacote é testado em Julia 1.0
, o atual estável e as compilações noturnas do branch master
Julia em Linux, macOS e Windows, arquitetura de 32 e 64 bits e com 1
e 4
threads.
Contribuições são muito bem-vindas, assim como solicitações e sugestões de recursos. Abra um problema se encontrar algum problema.