Théorie générale de la relativité en Python: Introduction

Dans cet article, en utilisant Python, ce qui est nécessaire dans la théorie de la relativité générale ・ ** Calcul de divers tenseurs dont le pesage $ g_ {\ mu \ nu} $ ** ・ ** Calcul simple de l'équation d'Einstein ** Présentez comment faire.

** [Référence] ** Pour le calcul lié à l'analyse tenseur et au calcul algébrique en relativité générale,  Heinicke, C., et.al.- Computer Algebra in Gravity  Korolkova, A., et.al.- Tensor computations in computer algebra systems Il existe des articles de revue abordables tels que, veuillez donc vous y référer le cas échéant. De plus, pour une étude similaire utilisant SageMath,  Gourgoulhon, E., et.al. - Symbolic tensor calculus on manifolds Etc. sont connus.

Présentation du module GraviPy

GraviPy est un module de calcul tensoriel qui s'exécute sur Python3.

En collaborant avec SymPy, spécialisé dans le traitement des symboles des calculs algébriques, un environnement de calcul tensoriel sans contrainte peut être réalisé sur Python.

Téléchargez le module GraviPy, y compris SymPy, comme suit GraviPy, Tensor Calculus Package for General Relativity (Version 0.1.0) (2014) (Date d'accès: 26 novembre 2019)

Vous pouvez réellement utiliser pip,

python


$ pip install GraviPy

S'il n'y a pas de problème, il sera installé. SymPy doit être installé en même temps si l'environnement Python est ver.3.7 ou supérieur.

J'ai calculé la métrique de Schwarzschild

Dérivation de la solution Schwarzschild à partir de la métrique Schwarzschild à l'aide de GraviPy.

Introduction du pesage Schwarzschild

Le signe de la métrique est $ (+, -, -, -) $ selon MTW, et l'élément filaire est déterminé comme suit. $ds^2=g_{\mu\nu}dx^\mu dx^\nu .$ Si $ G = c = 1 $ pour la constante gravitationnelle et la vitesse de la lumière, la métrique de Schwarzschild s'écrit comme suit.

g_{\mu\nu}=\left[\begin{array}{cccc}
\Big( 1- \frac{2M}{r} \Big) & 0 & 0 & 0	\\
0 & -\Big( 1- \frac{2M}{r} \Big)^{-1} & 0 & 0	\\
0 & 0 & -r^2 & 0	\\
0 & 0 & 0 & -r^2sin^2\theta
\end{array}\right]. 

Ici, la coordonnée à quatre dimensions $ (t, r, \ theta, \ phi) $ a été prise comme système de coordonnées, et $ M $ a été prise comme masse du trou noir. La métrique de Schwarzschild montre une singularité à $ r = 2M $ dans la direction radiale, qui est connue sous le nom de "Event Horizon".

Comment dériver à l'aide de GraviPy

Dérivons la solution de Schwarzschild à partir de $ g_ {\ mu \ nu} $ ci-dessus. Utilisez GraviPy pour calculer selon le processus suivant.

  1. Définition de l'espace-temps (détermination de la mesure): $ g_ {\ mu \ nu} $
  2. Calcul du symbole Christophel: $ \ Gamma {} ^ \ mu {} _ {\ nu \ rho} $
  3. Calcul du tenseur riche: $ R_ {\ mu \ nu} $
  4. Calcul d'Einstein Tensol: $ G_ {\ mu \ nu} $

Définition de l'espace et du temps

Tout d'abord, définissons l'espace et le temps. Prenez $ x = x ^ \ mu = (t, r, \ theta, \ phi) $ comme coordonnées spatio-temporelles à quatre dimensions. Dans GraviPy, il est défini comme suit.

GR.py


#!/usr/bin/env python3
from gravipy import *
from gravipy import tensorial as ten  
from sympy   import *
import inspect 

# Coordinates (\ chi is the four - vector of coordinates )
t, r, theta, phi, M = symbols('t , r , theta , phi , M ')
x = ten.Coordinates('\chi',[t, r, theta, phi])

Ici, le premier argument '\ chi' de dix.Coordinates () spécifie que le deuxième argument est un vecteur quaternaire. De plus, la raison pour laquelle il est réglé sur dix. ~ Est que ce Coordinates () ne fonctionne pas sauf s'il fait explicitement référence au tensoriel.

Après cela, tous les tenseurs qui apparaissent seront désignés par «dix. ~».

Définition de la métrique de Schwarzschild

Ensuite, définissons la métrique $ g_ {\ mu \ nu} $. La métrique de Schwarzschild mentionnée ci-dessus peut être décrite comme suit.

GR.py


#A continué
# Metric tensor
Metric = diag((1 -2* M / r ) , -1/(1 -2* M / r ) , -r **2 , -r **2* sin( theta ) **2)
g = ten.MetricTensor('g', x , Metric )

Ici, le résultat de sortie de g = dix.MetricTensor ('g', x, Metric) est

Metric
#Ou
g(ten.All,ten.All)

Il peut être affiché avec, et il devient comme suit.

g_{\mu\nu}=
\displaystyle \left[\begin{matrix}- 2M/r + 1 & 0 & 0 & 0\\0 & \displaystyle- \frac{1}{- 2M/r + 1} & 0 & 0\\0 & 0 & - r^{2} & 0\\0 & 0 & 0 & - r^{2} \sin^{2}{\left(\theta \right)}\end{matrix}\right] 

Bien qu'il existe certaines différences dans la formule, la définition précédente est reflétée avec précision. Par exemple, en se référant à la composante radiale $ g_ {rr} = g_ {11} $

g(1,1)

Ensuite, il peut être obtenu pour chaque élément comme suit.

g_{11}=- \frac{1}{\displaystyle- \frac{2M}{r} + 1} 

Le calcul de Christophel

Ensuite, calculons le symbole Christophel $ \ Gamma ^ \ mu {} _ {\ nu \ rho} $ basé sur $ g_ {\ mu \ nu} $.

GR.py


#A continué
# Christoffel symbol
Ga = ten.Christoffel('Ga', g )

Ga est le symbole Christophel pour $ g_ {\ mu \ nu} $. Christophel est un tenseur du 3e étage, donc si vous le limitez à $ \ mu = 0 $, vous obtiendrez le tenseur du 2e étage suivant.

\Gamma^{ 0}{}_{\nu\rho}=
\left[
\begin{matrix}
0 & \frac{M}{r^{2}} & 0 & 0 \\
\frac{M}{r^{2}} & 0 & 0 & 0 \\
0 & 0 & 0 & 0\\
0 & 0 & 0 & 0
\end{matrix}\right]

Pour obtenir tous les ingrédients

Ga(ten.All,ten.All,ten.All)

Vous pouvez le faire comme

\displaystyle
\Gamma^\mu{}_{\nu\rho}=
 \left[\begin{matrix}\left[\begin{matrix}0 & \frac{M}{r^{2}} & 0 & 0\\\frac{M}{r^{2}} & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\end{matrix}\right] & \left[\begin{matrix}- \frac{M}{r^{2}} & 0 & 0 & 0\\0 & \frac{M}{\left(2 M - r\right)^{2}} & 0 & 0\\0 & 0 & r & 0\\0 & 0 & 0 & r \sin^{2}{\left(\theta \right)}\end{matrix}\right] & \left[\begin{matrix}0 & 0 & 0 & 0\\0 & 0 & - r & 0\\0 & - r & 0 & 0\\0 & 0 & 0 & \frac{r^{2} \sin{\left(2 \theta \right)}}{2}\end{matrix}\right] & \left[\begin{matrix}0 & 0 & 0 & 0\\0 & 0 & 0 & - r \sin^{2}{\left(\theta \right)}\\0 & 0 & 0 & - \frac{r^{2} \sin{\left(2 \theta \right)}}{2}\\0 & - r \sin^{2}{\left(\theta \right)} & - \frac{r^{2} \sin{\left(2 \theta \right)}}{2} & 0\end{matrix}\right]\end{matrix}\right]

Sera. Puisqu'il s'agit d'un tenseur du troisième ordre, il peut être formellement obtenu sous la forme d'un "tableau unidimensionnel de tableaux à deux dimensions" (= une forme dans laquelle les éléments du tableau à une dimension sont des tableaux à deux dimensions).

Calcul tenseur riche

Ensuite, calculez le tenseur riche. (Ce nom vient du mathématicien Ricci.)

# Ricci tensor
Ri = ten.Ricci ('Ri ', g )
# Display all compon
Ri(ten.All,ten.All)

Le tenseur de Ricci dans la métrique de Schwarzschild réduit tous les composants à zéro.

R_{\mu\nu}=
\displaystyle \left[\begin{matrix}0 & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\end{matrix}\right]

Bien sûr, c'est une chose spéciale, dans la formule métrique de Schwarzschild. $r \longrightarrow r^{3.5}$ Si vous essayez de calculer le tenseur riche en le remplaçant par, etc., la valeur sera complètement différente, vous devriez donc expérimenter.

Calcul d'Einstein Tensol

Enfin, sortons le tenseur d'Einstein en utilisant le tenseur riche.

# Einstein tensor
G = ten.Einstein ('G', Ri )
G(ten.All,ten.All)

Le résultat est,

G_{\mu\nu}=
\displaystyle \left[\begin{matrix}0 & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\\0 & 0 & 0 & 0\end{matrix}\right]

Il est devenu. Ce résultat est l'hypothèse de la solution de Schwarzschild, ** condition de vide ** $T_{\mu\nu}=0$ Conforme également à l'équation d'Einstein $G_{\mu\nu}=8\pi T_{\mu\nu}$ Rencontrer.

Les références

Le didacticiel GraviPy a été publié et je me suis référé à ce qui suit.

https://github.com/wojciechczaja/GraviPy

De plus, la page d'assistance de SymPy est ci-dessous.

[https://docs.sympy.org/dev/index.html] (https://docs.sympy.org/dev/index.html)

Recommended Posts

Théorie générale de la relativité en Python: Introduction
Introduction de Python
Faire fonctionner mongoDB à partir de python dans l'environnement ubuntu ① Introduction de mongoDB
Jugement d'équivalence d'objet en Python
Introduction d'activités appliquant Python
Modèles de conception en Python: introduction
Exercice-Probabilité (économie de la mesure en Python)
Implémentation du tri rapide en Python
Explication sur l'erreur NoReverseMatch dans "python django super introduction"
Manipulation des pixels d'image en Python
Diviser timedelta dans la série Python 2.7
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
Modèle d'espace d'état gaussien général en Python
Introduction du package de dessin python pygal
La loi des nombres en python
Implémentation du tri original en Python
Brouillage réversible d'entiers en Python
[Introduction] Insérer des sauts de ligne dans Python 3
Enregistrement de l'introduction de Python pour les nouveaux arrivants
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Conversion de la chaîne <-> date (date, datetime) en Python
[Introduction à Python] Comment utiliser la classe en Python?
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Arborescence de sortie des fichiers en Python
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
Résumé de diverses instructions for en Python
Introduction facile de la reconnaissance vocale avec Python
Le résultat de l'installation de python sur Anaconda
Modèles Gang of Four (GoF) en Python
Principes de base pour exécuter NoxPlayer en Python
Remplacement en bloc des chaînes dans les tableaux Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Traffic Safety-kun: Reconnaissance des panneaux de signalisation en Python
Résumé des méthodes intégrées, etc. de la liste Python
Utilisation d'opérateurs non logiques de ou en python
À la recherche du FizzBuzz le plus rapide en Python
Introduction facile de la série python3 et d'OpenCV3
Exemple pratique d'architecture hexagonale en Python
Projet Euler # 17 "Nombre de caractères" en Python
Equation de mouvement à double pendule en python
Introduction aux vecteurs: Algèbre linéaire en Python <1>
Débarrassez-vous des images DICOM en Python
Introduction à la vérification de l'efficacité Chapitre 1 écrit en Python
Statut de chaque système de traitement Python en 2020
Projet Euler # 1 "Multiple de 3 et 5" en Python
[Introduction au Data Scientist] Bases de Python ♬
[Introduction à Python] Une explication approfondie des types de chaînes de caractères utilisés dans Python!
Quadtree en Python --2
Python en optimisation
CURL en Python
Sortie du nombre de cœurs de processeur en Python
Dessiner un graphique d'une fonction quadratique en Python
Géocodage en python
SendKeys en Python