You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -25,7 +22,7 @@ pour faire cette activité sur votre ordi localement, {download}`commencez par t
25
22
26
23
dans ce TP on vous invite à écrire un simulateur de la trajectoire de n corps qui interagissent entre eux au travers de leurs masses, pour produire des sorties de ce genre
Pour les curieux, vous avez sans doute observé qu'il y a plusieurs façons possibles d'écrire la fonction `simulate()`
486
+
487
+
dans ce qui suit, on note l'accélération $a$, la vitesse $s$ et la position $p$
488
+
489
+
````{admonition} Approche 1
490
+
:class: note
491
+
dans l'implémentation qui a servi à calculer l'illustration ci-dessus, on a écrit principalement ceci:
492
+
- on calcule l'accélération
493
+
- ce qui permet d'extrapoler les vitesses
494
+
$s = s + a.dt$
495
+
- et ensuite d'extrapoler les positions
496
+
$p = p + s.dt$
497
+
```{admonition} 1bis
498
+
:class: tip
499
+
une variante consiste à intervertir les deux, en arguant du fait que la vitesse à l'instant $t$ agit sur la position à l'instant $t$
500
+
- on extrapole d'abord les positions
501
+
- puis seulement on calcule l'accélération
502
+
- enfin on extrapole les vitesses
503
+
```
504
+
````
505
+
````{admonition} Approche 2
506
+
:class: tip
507
+
dans cette approche plus fine, on utiliserait deux versions de l'accélération (l'instant présent et l'instant suivant), et un dévelopmment du second ordre, ce qui conduirait à
508
+
- calculer la position comme $p = p + s.dt + \frac{a}{2}.dt^2$
509
+
- calculer les accélérations $a_+$ sur la base de cette nouvelle position
510
+
- estimer l'accélération sur l'intervalle comme la demie-somme entre les deux accélérations
511
+
$a_m = (a+a_+)/2$
512
+
- mettre à jour les vitesses
513
+
$s = s + a_m.dt$
514
+
- ranger $a_+$ dans $a$ pour le prochain instant
515
+
````
516
+
517
+
+++
518
+
519
+
Bref, vous voyez qu'il y a énormément de liberté sur la façon de s'y prendre
520
+
Ce qui peut expliquer pourquoi vous n'obtenez pas la même chose que les illustrations avec pourtant les mêmes données initiales
521
+
522
+
D'autant que, c'est bien connu, ce problème des n-corps est l'exemple le plus célèbre de problème instable, et donc la moindre divergence entre deux méthodes de calcul peut entrainer de très sérieux écarts sur les résultats obtenus
523
+
524
+
+++
525
+
526
+
Voici d'ailleurs les résultats obtenus avec ces deux approches alternatives, et vous pouvez constater qu'effectivement les résultats sont tous très différents !
Copy file name to clipboardExpand all lines: notebooks/numpy-tps/n-body/README-n-body-nb.md
+90-12Lines changed: 90 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,4 @@
1
1
---
2
-
authors:
3
-
- name: Aubin Geoffre
4
-
- name: Thierry Parmentelat
5
2
jupytext:
6
3
formats: md:myst
7
4
text_representation:
@@ -25,7 +22,7 @@ pour faire cette activité sur votre ordi localement, {download}`commencez par t
25
22
26
23
dans ce TP on vous invite à écrire un simulateur de la trajectoire de n corps qui interagissent entre eux au travers de leurs masses, pour produire des sorties de ce genre
27
24
28
-
```{image} media/init3.png
25
+
```{image} media/init3-1.png
29
26
:align: center
30
27
:width: 600px
31
28
```
@@ -258,8 +255,9 @@ pour commencer et tester, on se met dans l'état initial reproductible
Pour les curieux, vous avez sans doute observé qu'il y a plusieurs façons possibles d'écrire la fonction `simulate()`
367
+
368
+
dans ce qui suit, on note l'accélération $a$, la vitesse $s$ et la position $p$
369
+
370
+
````{admonition} Approche 1
371
+
:class: note
372
+
dans l'implémentation qui a servi à calculer l'illustration ci-dessus, on a écrit principalement ceci:
373
+
- on calcule l'accélération
374
+
- ce qui permet d'extrapoler les vitesses
375
+
$s = s + a.dt$
376
+
- et ensuite d'extrapoler les positions
377
+
$p = p + s.dt$
378
+
```{admonition} 1bis
379
+
:class: tip
380
+
une variante consiste à intervertir les deux, en arguant du fait que la vitesse à l'instant $t$ agit sur la position à l'instant $t$
381
+
- on extrapole d'abord les positions
382
+
- puis seulement on calcule l'accélération
383
+
- enfin on extrapole les vitesses
384
+
```
385
+
````
386
+
````{admonition} Approche 2
387
+
:class: tip
388
+
dans cette approche plus fine, on utiliserait deux versions de l'accélération (l'instant présent et l'instant suivant), et un dévelopmment du second ordre, ce qui conduirait à
389
+
- calculer la position comme $p = p + s.dt + \frac{a}{2}.dt^2$
390
+
- calculer les accélérations $a_+$ sur la base de cette nouvelle position
391
+
- estimer l'accélération sur l'intervalle comme la demie-somme entre les deux accélérations
392
+
$a_m = (a+a_+)/2$
393
+
- mettre à jour les vitesses
394
+
$s = s + a_m.dt$
395
+
- ranger $a_+$ dans $a$ pour le prochain instant
396
+
````
397
+
398
+
+++
399
+
400
+
Bref, vous voyez qu'il y a énormément de liberté sur la façon de s'y prendre
401
+
Ce qui peut expliquer pourquoi vous n'obtenez pas la même chose que les illustrations avec pourtant les mêmes données initiales
402
+
403
+
D'autant que, c'est bien connu, ce problème des n-corps est l'exemple le plus célèbre de problème instable, et donc la moindre divergence entre deux méthodes de calcul peut entrainer de très sérieux écarts sur les résultats obtenus
404
+
405
+
+++
406
+
407
+
Voici d'ailleurs les résultats obtenus avec ces deux approches alternatives, et vous pouvez constater qu'effectivement les résultats sont tous très différents !
0 commit comments