Homepage -Dokumentation
Numerische Methoden zur Lösung gewöhnlicher Differentialgleichungen (ODES) in Rost.
Um die Kiste in einem Projekt zu verwenden, muss die folgende Abhängigkeit in die Frachtdatei des Projekts hinzugefügt werden:
[ dependencies ]
ode_solvers = "0.5.0"
Dann in der Hauptdatei hinzufügen
use ode_solvers :: * ;
Die in den Kisten implementierten numerischen Integrationsmethoden unterstützen mehrdimensionale Systeme. Um die Dimension des Systems zu definieren, deklarieren Sie einen Typ -Alias für den Zustandsvektor. Zum Beispiel
type State = Vector3 < f64 > ;
Die Zustandsdarstellung des Systems basiert auf der in der Nalgebra -Kiste definierten SVector <t, d> Struktur. Für den Einfachheit halber exportiert ODE-Solver sechs Typen, um mit Systemen der Dimension 1 bis 6 zu arbeiten: Vector1 <t>, ..., Vector6 <t>. Bei höheren Dimensionen sollte der Benutzer die Nalgebra -Kiste importieren und einen SVector <t, d> definieren, wobei der zweite Typ -Parameter von SVector eine Dimension ist. Zum Beispiel hätte man für ein 9-dimensionales System:
type State = SVector < f64 , 9 > ;
Alternativ, kann man auch die DVektor -Struktur aus der Nalgebra -Kiste als Zustandsdarstellung verwenden. Bei Verwendung eines DVector <T> definiert die Anzahl der Zeilen im DVector <T> die Dimension des Systems.
type State = DVector < f64 > ;
Das System der ODES erster Ordnung muss in der system
des System<T, V>
definiert werden. Typischerweise ist dieses Merkmal für eine Struktur definiert, die einige Parameter des Modells enthält. Die Signatur des System<T, V>
Merkmal ist:
pub trait System < T , V > {
fn system ( & self , x : T , y : & V , dy : & mut V ) ;
fn solout ( & self , _x : T , _y : & V , _dy : & V ) -> bool {
false
}
}
Wenn system
die ODES enthalten muss: Das zweite Argument ist die unabhängige Variable (normalerweise Zeit), das dritte ist ein Vektor, der die abhängigen Variablen (en) enthält, und der vierte enthält die Ableitung (n) von y in Bezug auf x. Die Methode solout
wird nach jedem erfolgreichen Integrationsschritt aufgerufen und stoppt die Integration, wenn sie als wahr bewertet wird. Die Implementierung dieser Methode ist optional. In den Beispielen für Implementierungsdetails.
Die folgenden explizite RUNGE-KUTTA-Methoden werden in der aktuellen Version der Kiste implementiert:
Verfahren | Name | Befehl | Fehlerschätzungsreihenfolge | Dichte Ausgangsreihenfolge |
---|---|---|---|---|
RUNGE-KUTTA 4 | RK4 | 4 | N / A | N / A |
Dormand-Prinz | Dopri5 | 5 | 4 | 4 |
Dormand-Prinz | DOP853 | 8 | (5, 3) | 7 |
Diese Methoden sind in den Modulen RK4, DOPRI5 und DOP853 definiert. Der erste Schritt besteht darin, das gewünschte Modul in den Umfang zu bringen:
use ode_solvers :: dopri5 :: * ;
Anschließend wird eine Struktur unter Verwendung der new
oder der von der entsprechenden Struktur from_param
Methode erstellt. In der API -Dokumentation finden Sie eine Beschreibung der Eingabeargumente.
let mut stepper = Dopri5 :: new ( system , x0 , x_end , dx , y0 , rtol , atol ) ;
Das System wird mit integriert
let res = stepper . integrate ( ) ;
und die Ergebnisse werden mit abgerufen
let x_out = stepper . x_out ( ) ;
let y_out = stepper . y_out ( ) ;
Weitere Informationen finden Sie auf der Homepage.