Objectif de la fiche : exploiter les positions successives de l'étoile S2 en orbite autour du trou noir supermassif Sagittaire A*, pour en tracer les vecteurs vitesse puis les vecteurs variation de vitesse, et enfin estimer la masse du trou noir grâce à la loi de Kepler.
Cette fiche est autonome : tu n'as besoin d'aucun autre document, les données sont recopiées directement dans le script. Elle est présentée comme un petit projet, avec moins de scripts tout prêts que les fiches précédentes : à toi de réutiliser ce que tu as appris jusqu'ici (boucle for, plt.arrow, np.polyfit) pour avancer. Chaque étape reste néanmoins guidée par une consigne précise, à compléter puis à copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page).
L'étoile S2 et Sagittaire A*
- Un trou noir supermassif est un trou noir dont la masse dépasse le million de masses solaires. On pense aujourd'hui que la plupart des grandes galaxies en abritent un en leur centre.
- Celui de notre galaxie, la Voie lactée, correspond à la source radio Sagittaire A* (Sgr A*). Une équipe internationale d'astronomes, notamment de l'Institut Max-Planck, a suivi pendant plus de dix ans une étoile appelée S2 en orbite très rapprochée autour de cet objet invisible.
- La trajectoire observée est une ellipse quasiment complète en un peu plus de 15 ans : une durée extrêmement courte à l'échelle astronomique, qui a permis de mesurer cette orbite avec une précision remarquable.
Caractéristiques de l'orbite (mesurées)
| grandeur | Période | Inclinaison | Excentricité | Demi-grand axe |
|---|---|---|---|---|
| valeur | 15,2 an | 46° | 0,87 | 0,119″ |
Le demi-grand axe est ici donné en secondes d'arc (″), l'unité angulaire utilisée pour mesurer de très petites distances apparentes dans le ciel — l'étoile S2 est bien trop loin pour qu'on exprime directement sa position en mètres.
Positions successives de l'étoile S2 (valeurs approchées)
Les astronomes pointent la position de l'étoile sur des images du ciel, année après année, exactement comme tu as pointé les positions d'une bille sur une chronophotographie dans les premières fiches. Le tableau ci-dessous reprend, sous une forme simplifiée à but pédagogique, l'allure de la trajectoire réellement publiée : une ellipse presque bouclée, avec un passage très rapproché du trou noir (le périastre) autour de l'année 2002.
| année | 1992,23 | 1994,32 | 1995,53 | 1996,25 | 1997,54 | 1998,36 | 1999,47 | 2000,47 | 2001,50 | 2002,25 | 2002,50 | 2002,66 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| x (″) | 0,045 | 0,010 | −0,010 | −0,025 | −0,048 | −0,055 | −0,058 | −0,052 | −0,040 | −0,010 | 0,005 | 0,012 |
| y (″) | 0,148 | 0,160 | 0,163 | 0,158 | 0,132 | 0,110 | 0,082 | 0,050 | 0,024 | 0,004 | 0,001 | 0,003 |
Remarque : contrairement aux fiches précédentes, les intervalles de temps entre deux mesures ne sont pas constants (parfois plus de 2 ans, parfois quelques mois) : c'est une contrainte réelle de l'observation astronomique, dont il faudra tenir compte dans le calcul des vitesses.
import numpy as np
import matplotlib.pyplot as plt
# Dates des observations (années, au centième près)
t = np.array([1992.23, 1994.32, 1995.53, 1996.25, 1997.54, 1998.36,
1999.47, 2000.47, 2001.50, 2002.25, 2002.50, 2002.66])
# Position de l'étoile S2 (secondes d'arc)
x = np.array([0.045, 0.010, -0.010, -0.025, -0.048, -0.055,
-0.058, -0.052, -0.040, -0.010, 0.005, 0.012])
y = np.array([0.148, 0.160, 0.163, 0.158, 0.132, 0.110,
0.082, 0.050, 0.024, 0.004, 0.001, 0.003])
Tracer la trajectoire de S2
- Trace
yen fonction dex, en ronds noirs ('ko'), reliés par une ligne fine pour mieux voir l'ordre chronologique : ajoute'-'au style, soit'ko-'. - Ajoute les étiquettes
"ascension droite (\")"et"déclinaison (\")", la grille et le titre"Trajectoire de l'étoile S2".
# TODO : trace y en fonction de x, points noirs reliés
plt.plot(__, __, '____')
plt.xlabel("____________________")
plt.ylabel("________________")
plt.grid()
plt.title("________________________")
plt.show()
Une courbe qui se referme presque sur elle-même, en forme de boucle allongée : le début de l'ellipse décrite par S2 autour de Sagittaire A*, avec les points les plus rapprochés (2002) concentrés près de l'origine.
Calculer et tracer les vecteurs vitesse
- Comme les intervalles de temps ne sont pas constants ici, calcule les composantes de la vitesse avec
np.diffdivisé parnp.diff(t)(et non par une durée fixe comme dans les fiches précédentes) :vx = np.diff(x) / np.diff(t), et de même pourvy. - Dans une boucle
for i in np.arange(len(vx)) :, trace chaque vecteur vitesse avecplt.arrow(x[i], y[i], vx[i], vy[i], head_width=0.005): la flèche part de la positioniet représente la vitesse à cet instant.
# TODO : composantes de la vitesse, en tenant compte des durées variables
vx = np.diff(__) / np.diff(__)
vy = np.diff(__) / np.diff(__)
# TODO : trace chaque vecteur vitesse depuis la position correspondante
for i in np.arange(len(__)) :
plt.arrow(x[__], y[__], vx[__], vy[__], head_width=0.005)
plt.grid()
plt.title("______________")
plt.show()
Indice
vx et vy contiennent chacun 11 valeurs (une de moins que x, y et t, qui en ont 12) : la boucle doit donc parcourir les indices de vx, pas ceux de x.
Des flèches courtes au début et à la fin de la trajectoire (l'étoile va lentement, loin du trou noir) et des flèches nettement plus longues autour de 2002 (l'étoile va très vite, tout près du trou noir) : c'est la signature d'une orbite très excentrique, comme l'indiquait l'excentricité de 0,87.
Vecteurs « variation de vitesse »
- De la même façon que tu viens de calculer
vxetvyà partir dexety, calcule maintenantdvxetdvy, les variations de vitesse, à partir devxetvy:dvx = np.diff(vx)(pas besoin de diviser par le temps ici, on veut juste la direction de la variation). - Trace ces vecteurs depuis les positions intermédiaires
x[1:-1],y[1:-1](qui excluent le tout premier et le tout dernier point), avec un facteur d'échelle de5pour que les flèches restent visibles :plt.arrow(x[1:-1][i], y[1:-1][i], 5*dvx[i], 5*dvy[i], head_width=0.005, fc="r", ec="r").
# TODO : variations de vitesse successives
dvx = np.diff(__)
dvy = np.diff(__)
xm = x[1:-1]
ym = y[1:-1]
# TODO : trace chaque vecteur variation de vitesse (en rouge, facteur 5)
for i in np.arange(len(___)) :
plt.arrow(xm[i], ym[i], _*dvx[i], _*dvy[i], head_width=0.005, fc="r", ec="r")
plt.grid()
plt.show()
Des flèches rouges qui pointent globalement vers l'origine du graphe, c'est-à-dire vers Sagittaire A* : la variation de vitesse indique la direction de la force subie par l'étoile, ici la force gravitationnelle exercée par le trou noir. Retrouver cette direction confirme que S2 est bien en orbite autour d'un objet massif situé à cet endroit précis — même si cet objet est invisible.
Peser Sagittaire A*
- Comme dans la fiche « Loi de la gravitation », la troisième loi de Kepler donne
M = 4π²a³ / (G T²), avec iciT = 15,2ans eta = 0,119″(voir le tableau de l'étape 0). - Il faut d'abord convertir le demi-grand axe, exprimé en secondes d'arc, en une distance réelle en mètres. Pour un petit angle, la formule est :
a (m) = a (″) / 206265 × distance, où206265est le nombre de secondes d'arc dans un radian, etdistancela distance qui nous sépare du centre de la Voie lactée, environ8000 parsecs(1 parsec ≈3,086×10¹⁶ m). - Convertis aussi la période en secondes (
15.2*365*24*3600), puis calcule la masse avec la même formule qu'à l'étape 4 de la fiche « Loi de la gravitation ». - Termine en exprimant cette masse en masses solaires, en la divisant par
1.989e30kg.
G = 6.67e-11
distance = 8000 * 3.086e16 # distance au centre de la Voie lactée, en m
# TODO : conversion du demi-grand axe (secondes d'arc -> mètres)
a_m = (0.119 / ______) * ________
# TODO : conversion de la période (années -> secondes)
T_s = ____ * 365 * 24 * 3600
# TODO : masse de Sagittaire A*, avec la même relation de Kepler
Mtrounoir = 4 * np.pi**_ * a_m**_ / (G * T_s**_)
print('Masse de Sagittaire A* (kg) :', Mtrounoir)
# TODO : la même masse, exprimée en masses solaires
print('Masse de Sagittaire A* (masses solaires) :', Mtrounoir / ________)
Indice
Le calcul de a_m suit exactement le principe rappelé dans la consigne : diviser l'angle en secondes d'arc par 206265 donne l'angle en radians, puis multiplier par la distance donne une vraie longueur, en mètres.
Une masse de l'ordre de quelques millions de masses solaires concentrées dans un volume minuscule à l'échelle astronomique : c'est précisément la signature attendue d'un trou noir supermassif, et un résultat cohérent avec les valeurs publiées pour Sagittaire A*.
Pense-bête — durées variables et petits angles
| np.diff(x)/np.diff(t) | vitesse quand Δt n'est pas constant |
| x[1:-1] | tous les éléments sauf le premier et le dernier |
| len(vx) | une valeur de moins que len(x) |
| 1 rad | ≈ 206 265 secondes d'arc (″) |
| 1 parsec | ≈ 3,086×10¹⁶ m |
| Msoleil | ≈ 1,989×10³⁰ kg |
Pas de Thonny sous la main ? Utilise Basthon
Ouvrir dans un nouvel onglet ↗Ctrl+V ou Cmd+V) le code copié avec les boutons « Copier le code » ci-dessus, puis appuie sur Entrée pour l'exécuter.