Runge-Kutta et réutilisation des points de données

11

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?dydx=f(x,y)f(x,y)

joshlk
la source
Recherche "mémorisation". Vous pouvez facilement "envelopper" votre f(x,y)afin que les résultats soient mémorisés.
2
@ S.Lott: Le terme est "mémorisation", sans le "r".
1
@DietrichEpp: totalement correct. Mac OS X dispose d'un nouveau correcteur orthographique agressif sans aucune connaissance technique du tout.
S'agit-il d'un système de 2e ordre simulé avec une méthode de 4e ordre?
Voici une énorme liste de solutions alternatives: google.com/… N'importe laquelle d'entre elles sera probablement utile.

Réponses:

8

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:

K1 = f(x_1+h/2, y_1+h/2*yp_1)
K2 = f(x_1+h/2, y_1+h/2*K1)
K3 = f(x_1+h, y_1+h*K2)

x_2 = x_1 + h
y_2 = y_1 + h/6*(yp_1+2*K1+2*K2+K3)
yp_2 = f(x_2, y_2)

En général, aucun des points intermédiaires n'est utile à l'étape suivante. Parce que K1<> K2et K3<> yp_2.

ja72
la source
4

N NN=4N

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.

Reid.Atcheson
la source
Je devrais probablement être un peu plus précis. Voir Butcher pour plus de détails: Butcher, JC et J. Wiley. Méthodes numériques pour les équations différentielles ordinaires. Wiley Online Library, 2008. Excellente référence pour les solutions ODE, et fournit également de nombreuses preuves d'inexistence pour les méthodes RK (par exemple, il n'existe pas de méthode Runge-Kutta d'ordre 5 qui n'utilise que 4 évaluations de fonctions.)
Reid.Atcheson
1
Pour être complet: vos affirmations ne sont pas vraies pour les "méthodes Runge-Kutta générales" mais uniquement pour les méthodes Runge-Kutta explicites .
David Ketcheson
Oups! Vous avez raison, désolé.
Reid.Atcheson
1

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.

Paul
la source
0

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.

GertVdE
la source