Un package Julia rassemblant un certain nombre d'algorithmes basés sur Krylov pour les problèmes linéaires, les problèmes de valeurs singulières et de valeurs propres et l'application de fonctions de cartes linéaires ou d'opérateurs aux vecteurs.
Documentation | Statut de construction | Identificateur d'objet numérique | Licence |
---|---|---|---|
Cette version dépend désormais de VectorInterface.jl et l'utilise pour définir le comportement de type vectoriel des vecteurs d'entrée, plutôt que d'un ensemble minimal de méthodes de Base
et LinearAlgebra
. L'avantage est que de nombreux autres types de Julia standard sont désormais pris en charge immédiatement, tels que les vecteurs imbriqués ou les objets immuables tels que les tuples. Pour les types d'utilisateurs personnalisés pour lesquels l'ancien ensemble de méthodes requises a été implémenté, il existe des définitions de secours des méthodes dans VectorInferace.jl telles que ces types doivent toujours être pris en charge, mais cela peut entraîner l'affichage d'avertissements. Il est recommandé d'implémenter une prise en charge complète au moins des méthodes dans VectorInterface sans bang ou avec double bang, où ce dernier ensemble de méthodes peut utiliser une mutation sur place si votre type prend en charge ce comportement.
En particulier, les tuples sont désormais pris en charge :
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 accepte les fonctions générales ou les objets appelables comme cartes linéaires, ainsi que les objets Julia généraux avec un comportement de type vectoriel (tel que défini dans la documentation) comme vecteurs.
L'interface de haut niveau de KrylovKit est assurée par les fonctions suivantes :
linsolve
: résoudre des systèmes linéaireseigsolve
: trouver quelques valeurs propres et les vecteurs propres correspondantsgeneigsolve
: trouver quelques valeurs propres généralisées et les vecteurs correspondantssvdsolve
: trouver quelques valeurs singulières et les vecteurs singuliers gauche et droit correspondantsexponentiate
: appliquer l'exponentielle d'une application linéaire à un vecteurexpintegrator
: intégrateur exponentiel pour une EDO linéaire non homogène, calcule une combinaison linéaire des fonctions ϕⱼ
qui généralisent ϕ₀(z) = exp(z)
. KrylovKit.jl
peut être installé avec le gestionnaire de packages Julia. Depuis Julia REPL, tapez ]
pour accéder au mode Pkg REPL et exécutez :
pkg> add KrylovKit
Ou, de manière équivalente, via l'API Pkg
:
julia > import Pkg; Pkg . add ( " KrylovKit.jl " )
Le package est testé par rapport à Julia 1.0
, la version stable actuelle et les versions nocturnes de la branche master
Julia sur Linux, macOS et Windows, architecture 32 et 64 bits et avec 1
et 4
threads.
Les contributions sont les bienvenues, tout comme les demandes et suggestions de fonctionnalités. Veuillez ouvrir un problème si vous rencontrez des problèmes.