Modul 2 » Das Plancksche Strahlungsgesetz in Python

Auf dieser Bonus-Seite möchten wir das Plancksche Strahlungsgesetz mit Python und Matplotlib darstellen. Das ist doppelt interessant: so kannst du selber mit dem Strahlungsgesetz experimentieren, und wir schauen uns nochmal im Detail an, wie du mit Matplotlib beliebige Funktionen graphisch darstellen kannst.

Fangen wir mit einigen einleitenden Sätzen zur Physik an.

Das Plancksche Strahlungsgesetz

Ein schwarzer Körper sendet Photonen von verschiedenen Wellenlängen ab, genau gesagt strahlt er mit einem Kontinuum an Wellenlängen. Das Plancksche Strahlungsgesetz beschreibt, wie genau diese Wellenlängen verteilt sind. Es beschreibt also das Spektrum eines Schwarzen Körpers. Der Einzige freie Parameter, der dabei von schwarzem Körper zu schwarzem Körper unterschiedlich sein kann, ist die Temperatur: für jede Temperatur bekommen wir ein anderes Spektrum.

Schauen wir uns das Strahlungsgesetz nochmal an. Wir werden folgende Formulierung verwenden, in der λ\lambda die Wellenlänge und TT die Temperatur darstellt:

M(λ,T)=2πhc2λ51ehcλkT1M(\lambda,T)=\frac{2 \pi h c^2}{\lambda^5}\frac{1}{e^\frac{h c}{\lambda k T}-1}

Viele der Symbole dieses Gesetzes sind Konstanten: cc ist die Lichtgeschwindigkeit (die dir vielleicht schon mal begegnet ist), hh ist die sogenannte Planck-Konstante, und kk ist die Boltzmann-Konstante. Wir werden hier nicht in die Bedeutung dieser Konstanten einsteigen, sondern einfach nur anmerken, dass die Werte dieser Konstanten extrem gut bestimmt sind. Wir kommen später auf die Werte zurück.

Doch was ist dieses MM? MM gibt die Leistung an, mit der die Fläche des schwarzen Körpers bei dieser Wellenlänge λ\lambda strahlt. Die Bedeutung lässt sich vielleicht am einfachsten illustrieren, wenn wir ein konkretes Beispiel betrachten. Stellen wir uns einen großen schwarzen Körper vor. Jeder Quadratmeter der Oberfläche dieses Körpers strahlt zwischen der Wellenlänge λ\lambda und λ+1nm\lambda + 1 \mathrm{nm} mit einer Leistung (in Watt) von 109M(λ,T)10^{-9} \cdot M(\lambda,T). Der Faktor 10910^{-9} kommt daher, dass wir ein Wellenlängenintervall von 1 nm, also 10910^{-9} m, gewählt haben. Der sperrige Name für MM ist "Spektrale spezifische Ausstrahlung". Aber behalten wir einfach im Kopf, dass dieses MM eine Leistung ist, die der Schwarze Körper bei der bestimmten Wellenlänge λ\lambda pro Wellenlängeninterval abstrahlt.

Das Gesetz hat also tatsächlich nur zwei Parameter: die Wellenlänge λ\lambda und die Temperatur TT. Wenn wir die Temperatur festlegen, zum Beispiel auf den Wert der Oberflächentemperatur der Sonne (das sind 5778 Kelvin), können wir also für jede beliebige Wellenlänge den Wert von MM ausrechnen.

Und diese Werte von M(λ,T)M(\lambda, T) wollen wir nun als Funktion von λ\lambda darstellen, für ein gewähltes TT.

Umsetzung in Python

Erstelle ein neues Skript, und nenne es z.B. planck_spektrum.py. Am Anfang des Skriptes importieren wir wie immer die benötigten Python-Module:

import numpy as np
import matplotlib.pyplot as plt

Als erstes könnten wir nun die Konstanten definieren, die wir später nutzen werden. Wir möchten in SI-Einheiten rechnen, und drücken daher diese Konstanten auch in den Üblichen SI-Einheiten aus.

# Konstanten, können alle bei Wikipedia nachgeschlagen werden...
c = 299792458 # Lichtgeschwindigkeit, in m/s
h = 6.62607015e-34 # Planck-Konstante, in J s
k = 1.380649e-23 # Boltzmann-Konstante, J/K

Nun brauchen wir ein Array mit den Werten der x-Achse, für die wir die Funktion darstellen möchten. In unserem Fall sind das Wellenlängen, und wir möchten diese in Nanometer darstellen. Der sichtbare Teil des Spektrums geht in etwa von 400 bis 750 Nanometer, aber wir möchten unser Diagram gerne etwas breiter haben. Also erstellen wir ein Array mit z.B. 100 verschiedenen Werten die in regelmäßigen Abständen zwischen 200 und 950:

# Die Wellenlängen für die x-Achse, in nm
wl_nm = np.linspace(200, 950, 100)

Das eigentliche Rechnen möchten wir aber in SI-Basiseinheiten machen. Daher machen wir uns auch ein Array mit den entsprechenden Werten in Meter:

# Die gleichen Wellenlängen in m
wl = wl_nm * 1.0e-9

Jetzt brauchen wir noch die Temperatur des Schwarzen Körpers. Probieren wir es als erstes mal mit der Oberflächentemperatur der Sonne:

# Temperatur des Schwarzen Körpers, in K
t = 5778

Nun kommen wir zum Kern des Skriptes: wir wollen die "Spektrale spezifische Ausstrahlung" (also das MM des Gesetzes) für jede Wellenlänge des Arrays wl ausrechnen (und nicht wl_nm, da wir ja in SI-Einheiten arbeiten wollen). Versuche also, die Gleichung von oben in Python zu übersetzen. Hier eine Starthilfe:

# Spektrale spezifische Ausstrahlung
M = (2 * np.pi * h ...

Dazu einige Tipps:

  • Beachte die üblichen Prioritätsregeln der Mathematik (also "Punkt vor Strich" etc), die genau so auch in Python gelten. So ist zum Beispiel 4 * 1 + 1 / 3 nicht das gleiche wie (4 * (1 + 1))/3. Nutze möglichst wenig Klammern, aber lieber ein paar Klammern zu viel als zu wenig.
  • Das Potenzieren in Python schreibt man so: a**3 (entspricht a3a^3).
  • Die "Exponentialfunktion" exe^x schreibt man np.exp(x) in Python. Dafür braucht man natürlich Numpy, aber das haben wir ja schon mit import numpy as np importiert.

Nun solltest du also ein Array M haben. Bis hierhin haben wir in SI-Basiseinheiten gerechnet. Damit wir in unserem Plot MM in Watt pro Quadratmeter pro Nanometer (an Stelle von Watt pro Quadratmeter pro Meter) angeben können, multiplizieren wir die Werte noch mit 10910^{-9} bevor wir sie an plt.plot() übergeben:

plt.plot(wl_nm, M * 1e-9)

plt.xlabel("Wellenlänge [nm]")
plt.ylabel("Spektrale spezifische Ausstrahlung [W pro m2 pro nm]")

# So einfach könntest du eine logarithmische Skala für die Y-Achse bekommen:
#plt.yscale("log")

Jetzt könnten wir noch mit vertikale Strichen den sichtbaren Bereich des Lichts markieren (es gibt natürlich auch plt.axhline() für horizontale Striche):

plt.axvline(400, color="lightgray") # Grauer vertikaler Strich bei 400 nm
plt.axvline(750, color="lightgray")

Und zum Schluss möchten wir das Diagramm interaktiv anzeigen:

plt.show()

Speichere den Skript ab, und führe ihn wie üblich mit dem Befehl python planck_spektrum.py aus.

Wenn deine Rechnung von MM richtig ist, sollte ein Strahlungsmaximum bei ungefähr 500 nm zu sehen sein.

Anregungen

  • Setzte die Temperatur mal auf unsere eigene Körpertemperatur, also 37 °C. Bei welchen Wellenlängen befindet sich nun das Strahlungsmaximum? Die Werte der x-Achse wirst du anpassen müssen, um das Maximum zu finden.

Letzte Aktualisierung: 2021-12-20 13:06