12. Projets🔗
Table des matières
12.2. Astrophysique🔗
12.2.1. Relation masse/rayon d’une naine blanche🔗
D’après la théorie de l’évolution stellaire, les naines blanches sont l’un des états possibles d’une étoile (peu massive) à la fin de sa vie, lorsque les réactions de fusion thermonucléaire s’arrêtent.
En première approximation un corps astrophysique est essentiellement soumis à la force de gravitation (qui tend à le contracter) et une force interne de pression qui vient équilibrer la première. Ainsi on peut approcher le problème par un équilibre hydrostatique caractérisé par :
où G est la constante de gravitation, \(P(r)\), \(\rho(r)\) et \(M(r)\) respectivement la pression, la densité à la distance r du centre et la masse dans une sphère de rayon r.
Il s’agit d’étudier ici quelle force peut équilibrer la gravitation pour une naine blanche et mettre en évidence une masse limite en étudiant la relation rayon/masse.
Modélisation
La masse et le rayon d’équilibre de ce système sont entièrement déterminés par l’équation d’état thermodynamique \(P = P(\rho)\) et la densité centrale. En effet on montre facilement que :
Une fois que les réactions thermonucléaires s’arrêtent, la première des forces empêchant l’étoile de s’effondrer vient de la pression due aux électrons. Le modèle que nous utiliserons sera donc un simple gaz d’électrons (masse \(m_e\) et de nombre par unité de volume n) plongé dans un gaz de noyaux (on note \(Y_e\) le nombre d’électrons par nucléon et \(M_n\) la masse d’un nucléon) d’équation d’état :
Si tous les noyaux sont du \(^{12}C\), alors \(Y_e=1/2\).
Montrer que le système d’équations à résoudre est
\[\begin{split}\frac{d \rho}{dr} &= - { \left( \frac{3M_n G}{Y_e m_ec^2}\frac{\sqrt{1+x^2}}{x^2}\right) } \frac{M}{r^2} \rho \\ \frac{dM}{dr} &= 4\pi r^2\rho\end{split}\]En fixant la densité centrale \(\rho(r=0)=\rho_c\) tracer \(\rho(r)\) et en déduire une méthode pour calculer le rayon R de l’étoile et sa masse M.
En faisant varier la densité centrale tracer la relation \(M(R)\).
Discuter la validité numérique et physique des résultats par exemple en changeant la composition de l’étoile, la définition du rayon de l’étoile, etc.
12.2.2. Section de Poincaré🔗
Les équations du mouvement 1 \(\boldsymbol{r}(t) = (x(t),y(t))\) d’une particule de masse \(m\) plongée dans un potentiel \(\Phi(x,y)\) s’écrivent:
En coordonnées polaires :
Le système peut donc s’écrire :
ou en posant \(r_p=\dot{r}\) et \(\theta_p=\dot{\theta}\):
L’intégration – analytique ou numérique – de ces équations pour des conditions initiales \((\boldsymbol{r}(t=0),\dot{\boldsymbol{r}}(t=0))\) particulières caractérise une orbite. Le tracé de l’ensemble des points d’intersection de différentes orbites de même énergie avec le plan, p.ex., \((x,\dot{x})\) (avec \(y=0\) et \(\dot{y}>0\)) constitue une section de Poincaré.
Nous étudierons plus particulièrement le cas particulier \(m=1\) et les deux potentiels:
le potentiel intégrable de Sridhar & Touma (1997; MNRAS, 287, L1) 2, qui s’exprime naturellement dans les coordonnées polaires \((r,\theta)\):
\[\label{eq:spST} \Phi(r,\theta) = r^{\alpha}\, \left[(1+\cos\theta)^{1+\alpha} + (1-\cos\theta)^{1+\alpha}\right].\]avec p.ex. \(\alpha = 1/2\);
le potentiel de Hénon-Heiles:
\[\label{eq:spHH} \Phi(r,\theta) = \frac{1}{2}r^2 + \frac{1}{3}r^3\sin(3\theta).\]
Objectif
Écrire un intégrateur numérique permettant de résoudre les équations du mouvement pour un potentiel et des conditions initiales données.
Les performances de cet intégrateur seront testées sur des potentiels intégrables (p.ex. potentiel képlerien \(\Phi \propto 1/r\)), ou en vérifiant la stabilité des constantes du mouvement (l’énergie \(E = \frac{1}{2}\dot{\boldsymbol{r}}^{2} + \Phi\)).
Pour chacun des potentiels, intégrer et stocker une grande variété d’orbites de même énergie, en prenant soin de bien résoudre la zone d’intérêt autour de \((y=0,\dot{y}>0)\).
À l’aide de fonctions d’interpolation et de recherche de zéro, déterminer pour chacune des orbites les coordonnées \((x,\dot{x})\) de l’intersection avec le plan \((y=0,\dot{y}>0)\).
Pour chacun des potentiels, regrouper ces points par orbite pour construire la section de Poincaré de ce potentiel.
- 1
On se place dans toute la suite du problème dans un espace à deux dimensions.
- 2
Nous utiliserons toutefois les notations de l’appendice de Copin, Zhao & de Zeeuw (2000; MNRAS, 318, 781).
12.3. Divers🔗
12.3.1. Formation de pistes de fourmis sur un pont à 2 branches🔗
Si on propose à une colonie de fourmis de choisir entre 2 branches pour rejoindre une source de nourriture la branche finalement choisie est toujours la plus courte. Le projet consiste à modéliser et caractériser ce comportement.
Indication: on peut étudier ce système avec des EDOs. Cela peut aussi donner lieu à une simulation individu centré et éventuellement une comparaison entre les deux types de modèle.
12.3.2. Auto-organisation d’un banc de poisson🔗
Auteur de la section : Hanna Julienne <hanna.julienne@gmail.com>
La coordination d’un banc de poissons ou d’un vol d’oiseaux est tout à fait frappante: les milliers d’individus qui composent ces structures se meuvent comme un seul. On observe aussi, dans les bancs de poisson, d’impressionnants comportements d’évitement des prédateurs (flash expansion, fountain effect).
Pourtant ces mouvements harmonieusement coordonnés ne peuvent pas s’expliquer par l’existence d’un poisson leader. Comment pourrait-il être visible par tous ou diriger les flash expansion qui ont lieu à un endroit précis du banc de poisson? De la même manière on ne voit pas quelle contrainte extérieure pourrait expliquer le phénomène.
Une hypothèse plus vraisemblable pour rendre compte de ces phénomènes est que la cohérence de l’ensemble est due à la somme de comportements individuels. Chaque individu adapte son comportement par rapport à son environnement proche. C’est ce qu’on appelle auto-organisation. En effet, on a établi expérimentalement que les poissons se positionnent par rapport à leurs k plus proches voisins de la manière suivante:
ils s’éloignent de leurs voisins très proches (zone de répulsion en rouge sur la figure ci-dessous)
ils s’alignent avec des voisins qui sont à distance modérée (zone jaune)
ils s’approchent de leur voisins s’ils sont à la fois suffisamment proches et distants (zone verte)
Dans notre modèle, nous allons prendre en compte l’influence des k plus proches voisins. On calculera la contribution de chaque voisin selon la zone dans laquelle il se situe. Le déplacement du poisson sera la moyenne de ces contributions. Il est à noter qu’un voisin en dehors des trois zones d’influence n’a pas d’effet.
L’environnement proche d’un poisson est modélisé par des sphères imbriquées qui présentent une zone aveugle (voir figure).
Par ailleurs, si un individu n’a pas de voisins dans son environnement proche il adopte un comportment de recherche. Il explore aléatoirement les alentours jusqu’à ce qu’il repère le banc de poissons et finalement s’en rapproche.
Ce projet vise à :
Coder le comportement des poissons et à les faire évoluer dans un environnement 2D.
On essaiera d’obtenir un comportement collectif cohérent (similaire à un banc de poisson) et d’établir les conditions nécessaires à ce comportement.
On étudiera notamment l’influence du nombre d’individus pris en compte. Est-ce que le positionnement par rapport au plus proche voisin (k = 1) est suffisant?
On pourra se servir de la visualisation pour rendre compte de la cohérence du comportment et éventuellement inventer des mesures pour rendre compte de manière quantifier de cette cohérence.
Liens :
12.3.3. Évacuation d’une salle & déplacement d’une foule dans une rue🔗
Le comportement d’une foule est un problème aux applications multiples: évacuation d’une salle, couloir du métro aux heures de pointes, manifestations… On peut en imaginer des modèles simples. P. ex., on peut décrire chaque individu par sa position, sa vitesse, et comme étant soumis à des « forces »:
Une force qui spécifie la direction dans laquelle l’individu veut se déplacer, \(\textbf{f}_{dir} = (\textbf{v}_0 - \textbf{v}(t))/\tau\), où \(\textbf{v}_0\) est la direction et la vitesse que la personne veut atteindre, \(\textbf{v}\) sa vitesse actuelle, et \(\tau\) un temps caractéristique d’ajustement.
Une force qui l’oblige à éviter des obstacles qui peuvent être fixes (un mur, un massif de fleurs, …), ou qui peuvent être les autres individus eux-mêmes. On pourra essayer \(f_{obs}(d) = a \exp(-d/d_0)\), où \(d\) est la distance entre le piéton et l’obstacle, \(d_0\) la « portée » de la force, et \(a\) son amplitude.
On pourra varier les différents paramètres apparaissant ci-dessus, tout en leur donnant une interprétation physique réelle, et étudier leur influence dans des situations concrètes. P. ex., à quelle vitesse, en fonction de \(\textbf{v}_0\) et de la densité de piétons, se déplace une foule contrainte à avancer dans un couloir si chaque individu veut maintenir une vitesse \(\textbf{v}_0\) ? Comment s’organise l’évacuation d’une salle initialement uniformément peuplée, avec une ou plusieurs sorties, et en la présence éventuels d’obstacles ?
Il est également possible d’essayer d’autres expressions pour les forces.
Il existe une littérature conséquente sur le sujet, que l’on pourra explorer si besoin (p. ex: Décrypter le mouvement des piétons dans une foule).
12.3.4. Suivi de particule(s)🔗
Auteur de la section : Mathieu Leocmach <mathieu.leocmach@ens-lyon.fr>
Dans de nombreux domaines de recherche expérimentale, on a besoin de localiser des particles dans une image ou de reconstituer leurs trajectoires à partir d’une vidéo. Il peut s’agir de virus envahissant une cellule, de traceurs dans un écoulement, d’objets célestes fonçant vers la terre pour la détruire, etc.
Dans ce projet, on essayera d’abord de localiser une particule unique
dans une image à 2 dimensions (niveaux de gris) en utilisant
l’algorithme de Crocker & Grier décrit ici. On utilisera
sans retenue les fonctions de la bibliothèque scipy.ndimage
.
On essayera d’obtenir une localisation plus fine que la taille du pixel. On essayera ensuite de détecter plusieurs particules dans une image.
Afin de pouvoir traiter efficacement une séquence d’images de même
taille, on privilégiera une implémentation orientée objet. L’objet de
la classe Finder
sera construit une seule fois en début de séquence
et il contiendra les images intermédiaires nécessaire au
traitement. On nourrira ensuite cet objet avec chaque image de la
séquence pour obtenir les coordonnées des particules.
Enfin, on pourra essayer de relier les coordonnées dans des images successives pour constituer des trajectoires.
On contactera le créateur du sujet pour obtenir des séquences d’images expérimentales de particules Browniennes.
12.4. Mini-projets🔗
Ces mini-projets demande un investissement de développement et d’analyse moindre, et peuvent être traités (ou au moins initiés) en quelques heures comme des exercices ouverts.
12.4.1. Statistiques🔗
Tests statistiques du NIST/SEMATECH e-Handbook of Statistical Methods, p.ex. Comparisons based on data from two processes
Statistiques robustes, p.ex. Beers et al. (1990)
12.4.2. Visualisation🔗
L’objectif premier de ces projets est de développer des outils de visualisation sous Python/Matplotlib.
-
Sources éventuelles d’inspiration: Parallel Coordinates plot in Matplotlib, XDAT
Exemples de jeu de données multi-variables: Iris flower data set,
Cars
(source)
Andrew Curves (voir également Rip’s Applied Mathematics Blog). À appliquer sur les mêmes jeux de données que pour les coordonnées parallèles.
Stacked graphs (source éventuelle d’inspiration: Python recipe)
Hertzsprung-Russel diagram: l’objectif est de développer une classe permettant de tracer des diagrammes HR à partir de diverses quantités observationnelles (magnitudes apparentes ou absolues, couleurs) ou théoriques (luminosité, températures effectives), ainsi que des isochrones.
Source éventuelle d’inspiration: Stellar evolutionary tracks
Données photométriques: p.ex.
M55
(source: BVI photometry in M55)Données théoriques: p.ex. CMD
Treemap (source éventuelle d’inspiration: Treemaps under pylab)
De façon plus générale, l’ensemble des visualisations proposées sous:
12.4.3. Divers🔗
Jeu du Taquin ★★
Jeu du Mastermind ★★
Abelian_sandpile_model ★★★
Jeu 2048 (voir également Make your own 2048 in python) ★★★
12.4.4. Contribution à un projet Open Source🔗
Vous pouvez également contribuer, à la hauteur de vos capacités (connaissance, temps) à un projet Open Source, p.ex. identification et correction de bugs, ajout de nouvelles fonctionnalités, documentation, etc.
Ces projets sont souvent maintenus sur des plateformes de développement collaboratif telles que github. Les bugs sont souvent classés selon différentes catégories, p.ex. pour astropy, : documentation, good first issue, Package novice, etc.; le même genre de tags existe pour d’autres projets (p.ex. numpy, matplotlib, pandas).
Généralement, les plus gros projets ont des exigences de contribution plus fortes (voir p.ex. Contributing to Matplotlib), mais vous pouvez toujours contribuer aux discussions.