Un paquete de Julia que recopila una serie de algoritmos basados en Krylov para problemas lineales, problemas de valores singulares y valores propios y la aplicación de funciones de mapas u operadores lineales a vectores.
Documentación | Estado de construcción | Identificador de objetos digitales | Licencia |
---|---|---|---|
Esta versión ahora depende y utiliza VectorInterface.jl para definir el comportamiento vectorial de los vectores de entrada, en lugar de un conjunto mínimo de métodos de Base
y LinearAlgebra
. La ventaja es que ahora se admiten muchos más tipos del estándar Julia, como vectores anidados u objetos inmutables como tuplas. Para los tipos de usuarios personalizados para los que se implementó el antiguo conjunto de métodos requeridos, existen definiciones alternativas de los métodos en VectorInferace.jl, de modo que estos tipos aún deberían ser compatibles, pero esto podría dar lugar a que se impriman advertencias. Se recomienda implementar soporte total para al menos los métodos en VectorInterface sin bang o con doble bang, donde el último conjunto de métodos puede usar mutación in situ si su tipo admite este comportamiento.
En particular, ahora se admiten 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 acepta funciones generales u objetos invocables como mapas lineales, y objetos generales de Julia con comportamiento vectorial (como se define en los documentos) como vectores.
La interfaz de alto nivel de KrylovKit se proporciona mediante las siguientes funciones:
linsolve
: resolver sistemas linealeseigsolve
: encuentra algunos valores propios y vectores propios correspondientesgeneigsolve
: encuentre algunos valores propios generalizados y los vectores correspondientessvdsolve
: encuentra algunos valores singulares y los vectores singulares izquierdo y derecho correspondientesexponentiate
: aplicar el exponencial de un mapa lineal a un vectorexpintegrator
: integrador exponencial para una EDO lineal no homogénea, calcula una combinación lineal de las funciones ϕⱼ
que generalizan ϕ₀(z) = exp(z)
. KrylovKit.jl
se puede instalar con el administrador de paquetes de Julia. Desde Julia REPL, escriba ]
para ingresar al modo Pkg REPL y ejecutar:
pkg> add KrylovKit
O, de manera equivalente, a través de la API Pkg
:
julia > import Pkg; Pkg . add ( " KrylovKit.jl " )
El paquete se prueba con Julia 1.0
, la versión estable actual y las compilaciones nocturnas de la rama master
de Julia en Linux, macOS y Windows, arquitectura de 32 y 64 bits y con 1
y 4
subprocesos.
Las contribuciones son bienvenidas, al igual que las solicitudes y sugerencias de funciones. Abra un problema si encuentra algún problema.