Ein kurzes Beispiel von Transformationen in der Relativitatstheorie

In diesem IPython Notebook berechne ich mal ein par Zahlen und erstellen ein paar Diagramme fur meinen lieben Henrik, um dessen Fragen zu bewegten Raumschiffen endgultig und fertig zu beantworten.

Lieber Henrik, wenn du damit noch mehr spielen willst, dann empfehle ich die IPython auf deinem Rechner zu installieren, diese Notebook herunter zu laden und lokal die Zahlen zu verandern. Man braucht kein Programierguru zu sein, um Python zu verwenden. Und wenn doch, dann lohnt es sich auf jedne Fall - eine sehr nutzliche Sprache.

Gut, genug der Vorrede: Dieses Notebook Format enthalt Text (wie diesen), Code und Programmausgaben. In den ersten paar Zellen definiere ich die Lorentztransformationen und die Skripte, die die GRafiken erzeugen. Weiter unten setze ich dann die Zahlen ein und mache ein paar Plot fur dich. Du kannst also gern nach unten springen, wenn du willst!

Programm

Zuerst mal schreibe ich die Lorentztransformation mit folgenden Konventionen hin (https://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction):

  • Das ruhende System des Beobachters hat die Ortskoordinate $x_r$ und die Zeitkoordinate $t_r$.
  • Das dazu bewegte System hat $x_b$ und $t_b$.
  • Die Bewegung fundet in x-Richtung statt und beide Achasen luegen ubereinander.
  • In beiden System definieren wir den Nullpunkt der Zeit so, dass $t=0$ genau dann gilt, wenn $x_r=x_b=0$. (Das ist nur eine Konvention, die die Schreibweise vereinfacht. Naturlich konnen wir dne Zeitursprung irgendwo hin legen, aber warum sollten wir die Formel extra kompliziert machen, indem wur uberall immer noch irgendwelche Konstanten abziehen oder hinzu addieren? Du kannst das in deinem Beispiel so verstehen: Zeit 0 bedeutet: Der Bug des Raumschiff (Raumschiff km 0) passiert gerade den Nullpunkt des Zollstocks am Highway.

So, hier sind die Formeln: $$t_b = \gamma \left( t_r - \frac{v x_r}{c^2}\right)$$

$$x_b = \gamma (x_r - v t_r)$$

Dabei gilt:$\gamma = \frac{1}{\sqrt{1-\beta^2}}$ with $\beta = v/c$.

Um Einheiten nicht immer tippen zu mussen sage ich: Die Zeit wird in Sekunden gemessen, die Strecke in km.


In [8]:
import numpy as np

c = 299792.458

def beta(v):
    return v / c

def gamma(v):
    return 1./ np.sqrt(1.-beta(v)**2)

def tb(xr, tr, v):
    return gamma(v) * (tr - v*xr / c**2)

def xb(xr, tr, v):
    return gamma(v) * (xr - v * tr)

Jetzt der Code um das gut darzustellen


In [4]:
%matplotlib inline

import matplotlib.pyplot as plt
from functools import partial

In [71]:
def make_patch_spines_invisible(ax):
    ax.set_frame_on(True)
    ax.patch.set_visible(False)
    for sp in ax.spines.itervalues():
        sp.set_visible(False)


def plot_zollstocke(v, tr):
    fig = plt.figure()
    ax1 = fig.add_axes([.1,.4,.8,.2])  # ax1 is the observer rest frame
    axx = ax1.twiny()          # ax2 is the frame moving relative to observer AS SEEN FROM OBSERVER!
    axt = ax1.twiny()          # This is the TIME axis for the moving frame AS SEEN FROM THE OBSERVER!

    axt.spines["top"].set_position(("axes", 2.))
    make_patch_spines_invisible(axt)
    axt.spines["top"].set_visible(True)
    
    xbfunc = lambda x: xb(x, tr, v)
    tbfunc = lambda x: tb(x, tr, v)

    def update_ax2(ax1):
        x1, x2 = ax1.get_xlim()

        axt.set_xlim(tbfunc(x1), tbfunc(x2))
        axt.figure.canvas.draw()
        axx.set_xlim(xbfunc(x1), xbfunc(x2))
        axx.figure.canvas.draw()

        
    # automatically update ylim of ax2 when ylim of ax1 changes.
    ax1.callbacks.connect("xlim_changed", update_ax2)

    ax1.set_xlabel('Zollstock des Beobachters [km]')
    axx.set_xlabel('Zollstock im bewegeten System\n(vom Beobachter aus gesehen) [km]')
    axt.set_xlabel('Zeit im bewegeten System\n(vom Beobachter aus gesehen) [s]')
    ax1.yaxis.set_visible(False)
    ax1.spines['right'].set_color('none')
    ax1.spines['left'].set_color('none')
    ax1.plot([0, 1], [0, 0])
    ax1.set_xlim([0, 300000])
    ax1.text(0,-.05,'Im ruhenden System ist t = {0}\n(Im ruhenden System hangt die Zeit nicht von x ab.))'.format(tr))
    return fig, ax1, axx, axt

In [72]:
fig, ax1, axx, axt = plot_zollstocke(260000., 0)



In [73]:
fig, ax1, axx, axt = plot_zollstocke(260000., 0.5)



In [74]:
fig, ax1, axx, axt = plot_zollstocke(260000., 1.)


Ruhendes System = Raumschiff (jetzt auf der unteren Achse, Highway auf den oberen beiden Achsen)

Aus dem Raumschiff gesehen bewegt sich der Highway mit v = 260000 km, aber in die andere Richtung, deshalb negatives Vorzeichen.


In [75]:
fig, ax1, axx, axt = plot_zollstocke(-260000., 0)



In [76]:
fig, ax1, axx, axt = plot_zollstocke(-260000., 0.5)



In [77]:
fig, ax1, axx, axt = plot_zollstocke(-260000., 1.0)



In [ ]: