Ein Julia-Paket, das eine Reihe von Krylov-basierten Algorithmen für lineare Probleme, Singularwert- und Eigenwertprobleme und die Anwendung von Funktionen linearer Abbildungen oder Operatoren auf Vektoren sammelt.
Dokumentation | Build-Status | Digitaler Objektbezeichner | Lizenz |
---|---|---|---|
Diese Version hängt jetzt von VectorInterface.jl ab und verwendet es, um das vektorähnliche Verhalten der Eingabevektoren zu definieren, und nicht von einigen minimalen Methoden aus Base
und LinearAlgebra
. Der Vorteil besteht darin, dass jetzt viele weitere Typen von Standard-Julia standardmäßig unterstützt werden, beispielsweise verschachtelte Vektoren oder unveränderliche Objekte wie Tupel. Für benutzerdefinierte Benutzertypen, für die der alte Satz erforderlicher Methoden implementiert wurde, gibt es Fallbackdefinitionen der Methoden in VectorInferace.jl, sodass diese Typen weiterhin unterstützt werden sollten, dies kann jedoch zur Ausgabe von Warnungen führen. Es wird empfohlen, die vollständige Unterstützung zumindest für die Methoden in VectorInterface ohne Bang oder mit Double Bang zu implementieren, wobei letzterer Methodensatz In-Place-Mutation verwenden kann, wenn Ihr Typ dieses Verhalten unterstützt.
Insbesondere werden jetzt Tupel unterstützt:
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 akzeptiert allgemeine Funktionen oder aufrufbare Objekte als lineare Karten und allgemeine Julia-Objekte mit vektorähnlichem Verhalten (wie in den Dokumenten definiert) als Vektoren.
Die High-Level-Schnittstelle von KrylovKit wird durch die folgenden Funktionen bereitgestellt:
linsolve
: Lineare Systeme löseneigsolve
: Finden Sie einige Eigenwerte und entsprechende Eigenvektorengeneigsolve
: Finden Sie einige verallgemeinerte Eigenwerte und entsprechende Vektorensvdsolve
: Finden Sie einige singuläre Werte und entsprechende linke und rechte singuläre Vektorenexponentiate
: Wenden Sie die Exponentialfunktion einer linearen Karte auf einen Vektor anexpintegrator
: Exponentialintegrator für eine lineare inhomogene ODE, berechnet eine lineare Kombination der ϕⱼ
-Funktionen, die ϕ₀(z) = exp(z)
verallgemeinern. KrylovKit.jl
kann mit dem Julia-Paketmanager installiert werden. Geben Sie im Julia REPL ]
ein, um den Pkg REPL-Modus aufzurufen, und führen Sie Folgendes aus:
pkg> add KrylovKit
Oder äquivalent über die Pkg
-API:
julia > import Pkg; Pkg . add ( " KrylovKit.jl " )
Das Paket wird gegen Julia 1.0
, den aktuellen Stable und die Nightly-Builds des Julia master
Zweigs auf Linux, macOS und Windows, 32- und 64-Bit-Architektur und mit 1
und 4
Threads getestet.
Beiträge sind herzlich willkommen, ebenso Funktionswünsche und Vorschläge. Bitte öffnen Sie ein Problem, wenn Sie auf Probleme stoßen.