J'essaie d'implémenter la méthode Runge-Kutta de quatrième ordre pour résoudre un ODE de premier ordre en Python ie . Je comprends comment fonctionne la méthode, mais j'essaie d'écrire un algorithme efficace qui minimise le nombre de fois oùf(x,y)est calculé car cela coûte assez cher. On m'a dit qu'il était possible de réutiliser des points de données qui avaient été précédemment calculés en incrémentant au cours des étapes, mais je ne vois pas comment. Est-ce que quelqu'un sait comment faire cela ou n'est-ce pas possible?
ode
python
explicit-methods
joshlk
la source
la source
f(x,y)
afin que les résultats soient mémorisés.Réponses:
Si vous allez de
yp_1 = f(x_1, y_1)
àyp_2 = f(x_1+h, y_2)
vous allez avoir besoin des points intermédiaires:En général, aucun des points intermédiaires n'est utile à l'étape suivante. Parce que
K1
<>K2
etK3
<>yp_2
.la source
Si vous souhaitez réutiliser les évaluations de fonctions antérieures, vous devez utiliser une méthode en plusieurs étapes comme Adams-Bashforth.
Dans tous les cas, vous payez pour chaque stratégie. Les méthodes en une seule étape nécessitent le plus grand nombre d'évaluations de fonctions, mais les méthodes en plusieurs étapes ont le plus grand besoin de mémoire.
Modifier: correction. Ma déclaration n'est vraie que pour les méthodes explicites. La situation est moins claire pour les méthodes implicites car le nombre d'étapes ne se traduit pas directement en nombre d'évaluations de fonctions.
la source
Je sais que vous utilisez les méthodes Runge-Kutta pour résoudre votre ODE, mais si vous souhaitez réutiliser les anciennes valeurs calculées de votre f (x, y), vous voudrez peut-être envisager des méthodes à plusieurs étapes, comme Adams-Bashforth ou Adams-Moulton méthodes. Bien sûr, l'inconvénient de ces méthodes est que vous ne pouvez pas utiliser le pas de temps adaptatif très facilement.
la source
Veuillez vérifier les méthodes "intégrées": le but de ce type de méthodes RK est d'avoir deux méthodes avec des ordres différents, où la méthode de haut niveau utilise les mêmes évaluations de fonction que la méthode de bas niveau. Cela permet une estimation d'erreur très efficace. Voir p.165 et plus loin de "Résolution des équations différentielles ordinaires I: problèmes non raides" par Hairer, Norsett et Wanner. Des exemples typiques sont les méthodes Fehlberg d'ordre 7 (8).
De plus, si vous cherchez à résoudre les ODE dans PYTHON, consultez assimulo . Je joue avec ce package depuis quelques semaines et je suis très content.
la source