Documentation de la page d'accueil
Méthodes numériques pour résoudre les équations différentielles ordinaires (ODE) dans la rouille.
Pour commencer à utiliser la caisse dans un projet, la dépendance suivante doit être ajoutée dans le fichier cargo.toml du projet:
[ dependencies ]
ode_solvers = "0.5.0"
Ensuite, dans le fichier principal, ajouter
use ode_solvers :: * ;
Les méthodes d'intégration numériques implémentées dans les systèmes multidimensionnels de support en caisse. Afin de définir la dimension du système, déclarez un alias de type pour le vecteur d'état. Par exemple
type State = Vector3 < f64 > ;
La représentation de l'état du système est basée sur la structure SVector <T, D> définie dans la caisse nalgebra. Pour plus de commodité, Ode-Solvers réexporte six types pour fonctionner avec les systèmes de dimension 1 à 6: Vector1 <T>, ..., Vector6 <T>. Pour des dimensions plus élevées, l'utilisateur doit importer la caisse Nalgebra et définir un svector <t, d> où le deuxième type de paramètre de Svector est une dimension. Par exemple, pour un système en 9 dimensions, on aurait:
type State = SVector < f64 , 9 > ;
Alternativement, on peut également utiliser la structure Dvector <T> de la caisse Nalgebra comme représentation d'état. Lorsque vous utilisez un Dvector <T>, le nombre de lignes dans le Dvector <T> définit la dimension du système.
type State = DVector < f64 > ;
Le système d'ODE de premier ordre doit être défini dans la méthode du system
du trait System<T, V>
. En règle générale, ce trait est défini pour une structure contenant certains paramètres du modèle. La signature du trait System<T, V>
est:
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
}
}
Lorsque system
doit contenir les ODE: le deuxième argument est la variable indépendante (généralement le temps), le troisième est un vecteur contenant la ou les variables dépendantes, et la quatrième contient le ou les dérivés de Y par rapport à x. Le solout
de méthode est appelé après chaque étape d'intégration réussie et arrête l'intégration chaque fois qu'elle est évaluée comme vraie. L'implémentation de cette méthode est facultative. Voir les exemples pour les détails de mise en œuvre.
Les méthodes explicites Runge-Kutta suivantes sont implémentées dans la version actuelle de la caisse:
Méthode | Nom | Commande | Ordre d'estimation des erreurs | Ordre de sortie dense |
---|---|---|---|---|
Runge-Kutta 4 | RK4 | 4 | N / A | N / A |
Dormand-prince | Dopri5 | 5 | 4 | 4 |
Dormand-prince | DOP853 | 8 | (5, 3) | 7 |
Ces méthodes sont définies dans les modules RK4, DOPRI5 et DOP853. La première étape consiste à mettre la portée du module souhaité:
use ode_solvers :: dopri5 :: * ;
Ensuite, une structure est créée à l'aide de la méthode new
ou from_param
de la structure correspondante. Reportez-vous à la documentation de l'API pour une description des arguments d'entrée.
let mut stepper = Dopri5 :: new ( system , x0 , x_end , dx , y0 , rtol , atol ) ;
Le système est intégré en utilisant
let res = stepper . integrate ( ) ;
Et les résultats sont récupérés avec
let x_out = stepper . x_out ( ) ;
let y_out = stepper . y_out ( ) ;
Voir la page d'accueil pour plus de détails.