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 die Wellenlänge und die Temperatur darstellt:
Viele der Symbole dieses Gesetzes sind Konstanten: ist die Lichtgeschwindigkeit (die dir vielleicht schon mal begegnet ist), ist die sogenannte Planck-Konstante, und 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 ? gibt die Leistung an, mit der die Fläche des schwarzen Körpers bei dieser Wellenlänge 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 und mit einer Leistung (in Watt) von . Der Faktor kommt daher, dass wir ein Wellenlängenintervall von 1 nm, also m, gewählt haben. Der sperrige Name für ist "Spektrale spezifische Ausstrahlung". Aber behalten wir einfach im Kopf, dass dieses eine Leistung ist, die der Schwarze Körper bei der bestimmten Wellenlänge pro Wellenlängeninterval abstrahlt.
Das Gesetz hat also tatsächlich nur zwei Parameter: die Wellenlänge und die Temperatur . 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 ausrechnen.
Und diese Werte von wollen wir nun als Funktion von darstellen, für ein gewähltes .
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 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 ). - Die "Exponentialfunktion" schreibt man
np.exp(x)
in Python. Dafür braucht man natürlich Numpy, aber das haben wir ja schon mitimport 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 in Watt pro Quadratmeter pro Nanometer (an Stelle von Watt pro Quadratmeter pro Meter) angeben können, multiplizieren wir die Werte noch mit 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 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