Que signifie «symplectique» en référence aux intégrateurs numériques, et l'odeint de SciPy les utilise-t-il?


25

Dans ce commentaire, j'ai écrit:

... intégrateur SciPy par défaut, qui, je suppose, utilise uniquement des méthodes symplectiques.

dans lequel je me réfère à SciPy's odeint, qui utilise soit une "méthode non rigide (Adams)" ou une "méthode rigide (BDF)". Selon la source :

def odeint(func, y0, t, args=(), Dfun=None, col_deriv=0, full_output=0,
           ml=None, mu=None, rtol=None, atol=None, tcrit=None, h0=0.0,
           hmax=0.0, hmin=0.0, ixpr=0, mxstep=0, mxhnil=0, mxordn=12,
           mxords=5, printmessg=0):
    """
    Integrate a system of ordinary differential equations.

    Solve a system of ordinary differential equations using lsoda from the
    FORTRAN library odepack.

    Solves the initial value problem for stiff or non-stiff systems
    of first order ode-s::
        dy/dt = func(y, t0, ...)
    where y can be a vector.
    """

Voici un exemple où je propage l'orbite d'un satellite autour de la terre pendant trois mois juste pour montrer qu'il se précède comme prévu.

Je crois que les intégrateurs non symplectiques ont la propriété indésirable qu'ils auront tendance à ne pas conserver l'énergie (ou d'autres quantités) et sont donc indésirables en mécanique orbitale par exemple. Mais je ne sais pas exactement ce qui fait qu'un intégrateur symplectique est symplectique.

Est-il possible d'expliquer ce qu'est la propriété (qui rend un intégrateur symplectique symplectique) d'une manière simple et (assez) facile à comprendre mais pas inexacte? Je demande du point de vue de la façon dont l'intégrateur fonctionne en interne , plutôt que de ses performances lors des tests.

Et ma suspicion est-elle correcte qui odeintn'utilise que des intégrateurs symplectiques?


4
En règle générale, vous ne devriez espérer qu'un intégrateur de boîte noire est symplectique que s'il vous oblige à séparer les équations de position et d'élan.
origimbo

@origimbo Merci. Ceux-ci le font, et il ressemble à odeintun wrappoer Python pour des codes source assez anciens, établis et bien référencés (question éditée, références ODEPACK et LSODA) bien que j'admette certainement l'utiliser en mode boîte noire. Mon exemple lié montre que le vecteur d'état 6D se compose de trois positions et de trois vitesses.
uhoh

11
Les intégrateurs ODE dans ODEPACK et LSODA ne sont pas des intégrateurs symplectiques.
Brian Borchers

2
Voici un exemple pratique comparant deux solveurs très simples: Euler et Symplectic Euler: idontgetoutmuch.wordpress.com/2013/08/06/… .
idontgetoutmuch

2
Le livre de Hairer, Nørsett et Wanner donne une bonne explication des méthodes symplectiques. Regardez la figure 16.1 en particulier, et les figures ici .
JM

Réponses:


47

Permettez-moi de commencer par des corrections. Non, odeintn'a pas d'intégrateurs symplectiques. Non, l'intégration symplectique ne signifie pas la conservation de l'énergie.

Que signifie symplectique et quand devez-vous l'utiliser?

Tout d'abord, que signifie symplectique? Symplectique signifie que la solution existe sur une variété symplectique. Une variété symplectique est un ensemble de solutions qui est défini par une forme à 2. Les détails des variétés symplectiques sonnent probablement comme un non-sens mathématique, donc l'essentiel est qu'il existe une relation directe entre deux ensembles de variables sur une telle variété. La raison pour laquelle cela est important pour la physique est que les équations de l'hamiltonien ont naturellement que les solutions résident sur un collecteur symplectique dans l'espace des phases, le fractionnement naturel étant les composants de position et de quantité de mouvement. Pour la vraie solution hamiltonienne, ce chemin d'espace de phase est une énergie constante.

O(Δtn)n

Cela signifie que les intégrateurs symplectiques ont tendance à mieux capturer les modèles à long terme que les intégrateurs normaux en raison de ce manque de dérive et de cette garantie quasi-périodique de périodicité. Ce portable affiche bien ces propriétés sur le problème Kepler . La première image montre de quoi je parle avec la nature périodique de la solution.

entrez la description de l'image ici

Cela a été résolu en utilisant l' intégrateur symplectique du 6ème ordre de Kahan et Li de DifferentialEquations.jl . Vous pouvez voir que l'énergie n'est pas exactement conservée, mais sa variation dépend de la distance entre le collecteur de solution perturbé et le collecteur réel. Mais puisque la solution numérique elle-même réside sur une variété symplectique, elle a tendance à être presque exactement périodique (avec une dérive numérique linéaire que vous pouvez voir), ce qui la rend très bien pour une intégration à long terme. Si vous faites de même avec RK4, vous pouvez obtenir un désastre:

entrez la description de l'image ici

Vous pouvez voir que le problème est qu'il n'y a pas de véritable périodicité dans la solution numérique et donc que les heures supplémentaires ont tendance à dériver.

Cela met en évidence la vraie raison de choisir les intégrateurs symplectiques: les intégrateurs symplectiques sont bons sur les intégrations à long terme sur des problèmes qui ont la propriété symplectique (systèmes hamiltoniens) . Passons donc en revue quelques éléments. Notez que vous n'avez pas toujours besoin d'intégrateurs symplectiques même sur un problème symplectique. Dans ce cas, une méthode Runge-Kutta adaptative du 5e ordre peut faire l'affaire. Voici Tsit5:

entrez la description de l'image ici

Remarquez deux choses. Premièrement, il obtient une précision suffisamment bonne pour que vous ne puissiez pas voir la dérive réelle dans le tracé de l'espace de phase. Cependant, sur le côté droit, vous pouvez voir qu'il y a cette dérive d'énergie, et donc si vous faites une intégration assez longue, cette méthode ne fonctionnera pas aussi bien que la méthode de solution avec les propriétés périodiques. Mais cela soulève la question: comment se comporte-t-il en termes d'efficacité par rapport à une intégration extrêmement précise? Eh bien, c'est un peu moins certain. Dans DiffEqBenchmarks.jl, vous pouvez trouver des repères explorant cette question. Par exemple, ce cahierexamine l'erreur d'énergie par rapport à l'exécution sur un système d'équation hamiltonien à partir d'un modèle quadruple Boson et montre que si vous voulez une très grande précision, même pour des temps d'intégration assez longs, il est plus efficace d'utiliser simplement un RK d'ordre élevé ou Runge-Kutta Nystrom ( RKN). Cela a du sens car pour satisfaire la propriété symplectique, les intégrateurs abandonnent une certaine efficacité et doivent à peu près être un pas de temps fixe (il y a des recherches qui progressent dans ce dernier mais ce n'est pas très loin).

De plus, notez dans ces deux blocs-notes que vous pouvez également prendre une méthode standard et la projeter à nouveau dans le collecteur de solutions à chaque étape (ou toutes les quelques étapes). C'est ce que font les exemples utilisant le rappel DifferentialEquations.jl ManifoldProjection . Vous voyez que les lois de conservation des garanties sont respectées mais avec un coût supplémentaire de résolution d'un système implicite à chaque étape. Vous pouvez également utiliser un solveur ODE entièrement implicite ou des matrices de masse singulières pour ajouter des équations de conservation, mais le résultat final est que ces méthodes sont plus coûteuses en termes de calcul comme compromis.

Donc, pour résumer, la classe de problèmes que vous souhaitez atteindre pour un intégrateur symplectique sont ceux qui ont une solution sur une variété symplectique (systèmes hamiltoniens) où vous ne voulez pas investir les ressources de calcul pour avoir une très exacte (tolérance <1e-12) solution et n'ont pas besoin d'énergie exacte / etc. préservation. Cela met en évidence qu'il s'agit de propriétés d'intégration à long terme, vous ne devriez donc pas vous contenter de toutes les veuilles comme le suggère la littérature. Mais ils sont toujours un outil très important dans de nombreux domaines comme l'astrophysique où vous avez des intégrations à long terme que vous devez résoudre suffisamment rapidement sans avoir une précision absurde.

Où puis-je trouver des intégrateurs symplectiques? Quels types d'intégrateurs symplectiques existent?

Il existe généralement deux classes d'intégrateurs symplectiques. Il y a les intégrateurs symplectiques de Runge-Kutta (qui sont ceux montrés dans les exemples ci-dessus) et il existe des méthodes implicites de Runge-Kutta qui ont la propriété symplectique. Comme le mentionne @origimbo, les intégrateurs symplectiques de Runge-Kutta exigent que vous leur fournissiez une structure partitionnée afin qu'ils puissent gérer séparément la position et la quantité de mouvement. Cependant, contrairement au commentaire, les méthodes implicites de Runge-Kutta sont symplectiques sans nécessiter cela, mais nécessitent plutôt la résolution d'un système non linéaire. Ce n'est pas trop mal car si le système n'est pas rigide, ce système non linéaire peut être résolu avec une itération fonctionnelle ou une accélération d'Anderson, mais les méthodes RK symplectiques devraient toujours être préférées pour l'efficacité (c'est ''

Cela dit, odeint n'a pas de méthodes de l'une ou l'autre de ces familles , donc ce n'est pas un bon choix si vous recherchez des intégrateurs symplectiques. À Fortran, le site de Hairer a un petit ensemble que vous pouvez utiliser . Mathematica en a intégré quelques-uns . Les solveurs GSL ODE ont des intégrateurs de points gaussiens RK implicites dont l'IIRC est symplectique, mais c'est à peu près la seule raison d'utiliser les méthodes GSL.

Mais l'ensemble d'intégrateurs symplectiques le plus complet se trouve dans DifferentialEquations.jl dans Julia (rappelez-vous que cela a été utilisé pour les cahiers ci-dessus). La liste des méthodes Runge-Kutta symplectiques disponibles se trouve sur cette page et vous remarquerez que la méthode implicite midpoint est également symplectique (la méthode implicite Runge-Kutta Trapezoid est considérée comme "presque symplectique" car elle est réversible). Non seulement il possède le plus grand ensemble de méthodes, mais il est également open-source (vous pouvez voir le code et ses tests dans un langage de haut niveau) et a beaucoup de repères . Un bon cahier d'introduction pour l'utiliser pour résoudre des problèmes physiques est ce cahier de tutoriel. Mais bien sûr, il est recommandé de commencer avec le package via le premier didacticiel ODE .

En général, vous pouvez trouver une analyse détaillée des suites d'équations différentielles numériques dans ce billet de blog . C'est assez détaillé, mais comme il doit couvrir beaucoup de sujets, il le fait chacun avec moins de détails que cela, alors n'hésitez pas à demander qu'il soit développé de quelque manière que ce soit.


10
Avec cette réponse, il me semble que j'ai atteint le jackpot Stack Exchange! C'est la réponse parfaite pour moi, car j'en comprends une partie immédiatement et les parties que je ne me laisse pas impatient de lire plus loin. J'apprécie vraiment le temps que vous avez pris pour trouver à fond cette réponse ainsi que pour inclure d'autres liens utiles et instructifs.
uhoh

Avant d'entrer dans les détails mathématiques, nous pourrions dire en gros que symplectique signifie conservation du volume , n'est-ce pas?
Miguel

2
FTR, la raison pour laquelle le Runge-Kutta adaptatif du 5ème ordre fonctionne beaucoup mieux que RK4 ici n'est pas qu'il a un ordre plus élevé mais qu'il choisit des tailles de pas plus appropriées. La raison pour laquelle RK4 fonctionne si mal est principalement que la taille du pas est trop élevée au périgée; le même solveur avec la moitié de la taille du pas donnerait une bien meilleure solution. (Juste, cela perdrait beaucoup de temps à résoudre l'orbite finement autour de l'apogée, où cela n'est pas du tout nécessaire.)
leftaroundabout

1
excellente exposition. En guise de question secondaire: l'OP commence par une référence à Python - y a-t-il des tutoriels / packages Python recommandés dans le sens des exemples Julia liés?
Quetzalcoatl

1
Le seul package Python que je connaisse pour ces types d'intégrateurs est diffeqpy , où il n'est pas documenté sur le fichier README, mais vous pouvez accéder à toutes ces mêmes méthodes et réécrire ceci en Python à l'aide de ce package.
Chris Rackauckas

14

pqH(p,q)

dqdt=+Hp
dpdt=Hq.
H
p(t),q(t)=ϕt(p(t0),q(t0))
dpdqpqsont unidimensionnels, vous pouvez penser que cela signifie que la zone à l'intérieur des courbes fermées sur l'espace des phases est conservée. Cela garantit toutes sortes de bonnes propriétés de stabilité, car les "boules" de trajectoires doivent rester "proches" les unes des autres.

En termes numériques, un intégrateur symplectique agit de la même manière, conservant également cette forme zone / deux. À son tour, cela signifie qu'il existe un «hamiltonien numérique» conservé (qui peut ne pas être [lu «n'est pas»] identique à l'exact). Notez que la stabilité n'est pas la même chose que la précision, de sorte que la plupart des avantages des méthodes symplectiques viennent lors de l'intégration pendant de très longues périodes (par exemple, votre méthode peut rapidement placer un satellite du mauvais côté de la Terre, sans jamais lui permettre de se désintégrer). il).


Merci pour ça! Je vais maintenant utiliser des mots au-dessus de mon niveau de rémunération. Les n-boules de trajectoires sont plus à risque lorsqu'elles sont proches de bifurcations comme celles des simulations à 3 corps. cf. Doedel et al. 2007, Int. J. Bifurcation et Chaos, v 17, no. 8 (2007) 2625–2677 Comment ai-je fait? Aussi ieec.cat/hosted/web-libpoint/papers/…
uhoh

2
À moins que le lecteur ne soit au courant des détails mathématiques, la mention de la stabilité est trompeuse, car la conservation du volume ne signifie pas que les trajectoires individuelles restent proches.
Miguel

1
@Miguel Je pense que c'est une de ces situations où le lecteur qui ne suit pas les détails mathématiques est damné de toute façon, mais en termes de troïka habituelle du numératicien de précision, de stabilité et d'efficacité de calcul, je dirais que souligner la stabilité les avantages sont utiles. Je suis heureux d'accepter des suggestions de réécriture si vous pouvez penser à quelque chose de mieux qui n'est pas délibérément inexact.
origimbo

22

1
@Miguel: Mais la goutte de particules peut se diviser en deux ou plusieurs parties. Son volume total n'a qu'à rester constant.
Wolfgang Bangerth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.