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!
Zuerst mal schreibe ich die Lorentztransformation mit folgenden Konventionen hin (https://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction):
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)
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.)
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 [ ]: