Allgemeine Relativitätstheorie in Python: Einführung

In diesem Artikel wird unter Verwendung von Python beschrieben, was in der allgemeinen Relativitätstheorie benötigt wird ・ ** Berechnung verschiedener Tensoren einschließlich des Wiegens von $ g_ {\ mu \ nu} $ ** ・ ** Einfache Berechnung der Einstein-Gleichung ** Stellen Sie vor, wie es geht.

** [Referenz] ** Für die Berechnung der Tensoranalyse und der algebraischen Berechnung in der Allgemeinen Relativitätstheorie  Heinicke, C., et.al.- Computer Algebra in Gravity  Korolkova, A., et.al.- Tensor computations in computer algebra systems Es gibt einige erschwingliche Übersichtsartikel wie, also beziehen Sie sich bitte auf diese. Für eine ähnliche Studie mit SageMath  Gourgoulhon, E., et.al. - Symbolic tensor calculus on manifolds Usw. sind bekannt.

Einführung in das GraviPy-Modul

GraviPy ist ein Modul zur Tensorberechnung, das unter Python3 ausgeführt wird.

Durch die Zusammenarbeit mit SymPy, das auf die Symbolverarbeitung algebraischer Berechnungen spezialisiert ist, wird eine stressfreie Tensorberechnungsumgebung in Python realisiert.

Laden Sie das GraviPy-Modul einschließlich SymPy wie folgt herunter GraviPy, Tensor Calculus Package for General Relativity (Version 0.1.0) (2014) (Zugriffsdatum: 26. November 2019)

Sie können tatsächlich pip verwenden,

python


$ pip install GraviPy

Wenn es kein Problem gibt, wird es installiert. SymPy sollte gleichzeitig installiert werden, wenn die Python-Umgebung Version 3.7 oder höher ist.

Ich habe die Schwarzschild-Metrik berechnet

Ableitung der Schwarzschild-Lösung aus der Schwarzschild-Metrik mit GraviPy.

Einführung des Schwarzschild-Wiegens

Das Vorzeichen der Metrik ist $ (+, -, -, -) $ gemäß MTW, und das Drahtelement wird wie folgt bestimmt. $ds^2=g_{\mu\nu}dx^\mu dx^\nu .$ Wenn für die Gravitationskonstante und die Lichtgeschwindigkeit $ G = c = 1 $ ist, wird die Schwarzschild-Metrik wie folgt geschrieben.

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]. 

Hier wurde die vierdimensionale Koordinate $ (t, r, \ theta, \ phi) $ als Koordinatensystem und $ M $ als Masse des Schwarzen Lochs genommen. Die Schwarzschild-Metrik zeigt eine Singularität bei $ r = 2M $ in radialer Richtung, die als sogenannter "Ereignishorizont" bekannt ist.

Ableiten mit GraviPy

Lassen Sie uns die Schwarzschild-Lösung aus dem obigen $ g_ {\ mu \ nu} $ ableiten. Verwenden Sie GraviPy, um nach dem folgenden Verfahren zu berechnen.

  1. Definition von Raum und Zeit (Bestimmung der Messung): $ g_ {\ mu \ nu} $
  2. Berechnung des Christophel-Symbols: $ \ Gamma {} ^ \ mu {} _ {\ nu \ rho} $
  3. Rich-Tensor-Berechnung: $ R_ {\ mu \ nu} $
  4. Einstein-Tensol-Berechnung: $ G_ {\ mu \ nu} $

Definition von Raum und Zeit

Definieren wir zunächst Raum und Zeit. Nehmen Sie $ x = x ^ \ mu = (t, r, \ theta, \ phi) $ als vierdimensionale Raum-Zeit-Koordinaten. In GraviPy ist es wie folgt definiert.

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])

Hier gibt das erste Argument "\ chi" von "ten.Coordinates ()" an, dass das zweite Argument ein quaternärer Vektor ist. Der Grund, warum es auf "zehn" gesetzt ist, ist, dass dieses "Coordinates ()" nicht funktioniert, es sei denn, es bezieht sich ausdrücklich auf das "Tensorial".

Danach werden alle erscheinenden Tensoren mit "zehn" bezeichnet.

Definition der Schwarzschild-Metrik

Als nächstes definieren wir die Metrik $ g_ {\ mu \ nu} $. Die oben erwähnte Schwarzschild-Metrik kann wie folgt beschrieben werden.

GR.py


#Fortsetzung
# 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 )

Hier ist das Ausgabeergebnis von "g = ten.MetricTensor (" g ", x, Metric)"

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

Es kann mit angezeigt werden und wird wie folgt.

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] 

Obwohl es einige Unterschiede in der Formel gibt, wird die vorherige Definition genau wiedergegeben. Wenn Sie sich beispielsweise auf die Radialkomponente $ g_ {rr} = g_ {11} $ beziehen

g(1,1)

Dann kann es für jedes Element wie folgt erhalten werden.

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

Christophels Berechnung

Als nächstes berechnen wir das Christophel-Symbol $ \ Gamma ^ \ mu {} _ {\ nu \ rho} $ basierend auf $ g_ {\ mu \ nu} $.

GR.py


#Fortsetzung
# Christoffel symbol
Ga = ten.Christoffel('Ga', g )

Ga ist das Christophel-Symbol für $ g_ {\ mu \ nu} $. Christophel ist ein Tensor im 3. Stock. Wenn Sie ihn also auf $ \ mu = 0 $ beschränken, erhalten Sie den folgenden Tensor im 2. Stock.

\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]

Um alle Zutaten zu bekommen

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

Sie können es als tun

\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]

Wird sein. Da es sich um einen Tensor dritter Ordnung handelt, kann er formal als "eindimensionales Array zweidimensionaler Arrays" erhalten werden (= eine Form, in der die Elemente des eindimensionalen Arrays zweidimensionale Arrays sind).

Reiche Tensorberechnung

Berechnen Sie als nächstes den fetten Tensor. (Dieser Name stammt vom Mathematiker Ricci.)

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

Der Ricci-Tensor in der Schwarzschild-Metrik lässt alle Komponenten auf Null fallen.

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]

Dies ist natürlich eine besondere Sache in der Schwarzschild-Metrikformel. $r \longrightarrow r^{3.5}$ Wenn Sie versuchen, den fetten Tensor durch Ersetzen durch usw. zu berechnen, ist der Wert völlig anders, daher sollten Sie experimentieren.

Berechnung von Einstein Tensol

Lassen Sie uns abschließend den Einstein-Tensor mit dem Rich-Tensor ausgeben.

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

Ergebnis ist,

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]

Es ist geworden. Dieses Ergebnis ist die Annahme der Schwarzschild-Lösung, ** Vakuumbedingung ** $T_{\mu\nu}=0$ Entspricht auch der Einstein-Gleichung $G_{\mu\nu}=8\pi T_{\mu\nu}$ Treffen.

Verweise

Das GraviPy-Tutorial wurde veröffentlicht, und ich habe auf Folgendes verwiesen.

https://github.com/wojciechczaja/GraviPy

Die Support-Seite von SymPy finden Sie weiter unten.

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

Recommended Posts

Allgemeine Relativitätstheorie in Python: Einführung
Einführung von Python
Betreiben Sie mongoDB von Python in einer Ubuntu-Umgebung. ① Einführung von mongoDB
Objektäquivalenzbeurteilung in Python
Einführung in Aktivitäten mit Python
Entwurfsmuster in Python: Einführung
Übungswahrscheinlichkeit (Messökonomie in Python)
Implementierung der schnellen Sortierung in Python
Erläuterung zum NoReverseMatch-Fehler in "Python Django Super Introduction"
Bildpixel-Manipulation in Python
Zeitdelta in Python 2.7-Serie teilen
MySQL-automatische Escape-Funktion von Parametern in Python
Umgang mit JSON-Dateien in Python
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
Allgemeines Gaußsches Zustandsraummodell in Python
Einführung des Python-Zeichenpakets Pygal
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Reversibles Verwürfeln von Ganzzahlen in Python
[Einführung] Fügen Sie Zeilenumbrüche in Python 3 ein
Aufzeichnung der Python-Einführung für Neulinge
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Überprüfen Sie das Verhalten des Zerstörers in Python
Übung, dies in Python zu verwenden (schlecht)
Ausgabebaumstruktur von Dateien in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Zusammenfassung verschiedener for-Anweisungen in Python
Einfache Einführung der Spracherkennung mit Python
Das Ergebnis der Installation von Python auf Anaconda
Gang of Four (GoF) -Muster in Python
Grundlagen zum Ausführen von NoxPlayer in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Einfache Einführung in die Python3-Serie und OpenCV3
Praktisches Beispiel für hexagonale Architektur in Python
Projekt Euler # 17 "Anzahl der Zeichen" in Python
Doppelte Pendelbewegungsgleichung in Python
Einführung in Vektoren: Lineare Algebra in Python <1>
Entfernen Sie DICOM-Bilder in Python
Einführung in die Überprüfung der Wirksamkeit Kapitel 1 in Python geschrieben
Status jedes Python-Verarbeitungssystems im Jahr 2020
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
[Einführung in Data Scientist] Grundlagen von Python ♬
[Einführung in Python] Eine ausführliche Erklärung der in Python verwendeten Zeichenkettentypen!
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Geben Sie die Anzahl der CPU-Kerne in Python aus
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Geokodierung in Python
SendKeys in Python