Eine kleine Einführung in die Programmiersprache Python

Die Programmiersprache Python ist auch eine sehr gute Objekt-orientierte Programmiersprache und im Prinzip hätten wir die gesamte Vorlesung nur mittels Python gestalten können. Jedoch finden viele erfahrene Programmierer die Programmiersprache Python ein wenig unstrukturiert und auch, hinsichtlich der Performance der erstellten Programme ist die Programmiersprache C++ ein wenig besser und große, aufwendige Simulationsprogramme werden oft nicht mittels Python programmiert. Im Bereich der Visualisierung von Daten und im Bereich der Illustration von mathematisch/physikalischen Gleichungen hat Python jedoch sicherlich Vorteile gegenüber C++ und bietet mittels des Python-Moduls "matplotlib" (siehe Matplotlib: Visualization with Python) einen einfachen Weg Bilder and Animationen des simulierten Systems zu erzeugen.

Im Folgenden werde ich Ihnen keine strukturierte "Einführung in die Programmiersprache Python" geben, sondern es werden nur ganz spezielle Themen der Programmiersprache Python vorstellt, die wir zur Visualisierung der mittels unserer C++ Programme erstellten Daten und zum Verständnis der Vorlesung Einführung in die Programmierung für Studierende der Physik benötigen. Strukturierte Einführungen in die Programmiersprache Python finden Sie z.B. unter den folgenden Links:

Literatur zu Python

Im Speziellen werden wir in diesem Unterpunkt das Python-Skript (Python-Skript: PythonPlot_While_4.py) näher betrachten, welches im vorigen Unterpunkt Anwendungsbeispiel: Folgen und Reihen zur Datenvisualisierung verwendet wurde. Zusätzlich werden wir die im nächsten Unterpunkt Die Computerarithmetik und der Fehler in numerischen Berechnungen besprochene C++ Computerarithmetik mittels eines Python Jupyter Notebooks verdeutlichen und dabei die Verwendung von Listen, Arrays und for-Schleifen in der Programmiersprache Python kennenlernen.

Visualisierung der C++ Ausgabedaten mittels der Programmiersprache Python

Im Folgenden werden wir das Python-Skript (Python-Skript: PythonPlot_While_4.py, siehe untere Abbildung) näher betrachten.

Python-Skript: PythonPlot_While_2.py
# Python Programm zum Plotten der berechneten Daten von (While_2.cpp)
import matplotlib.pyplot as plt                                           # Python Bibliothek zum Plotten (siehe https://matplotlib.org/ )
import numpy as np                                                        # Python Bibliothek fuer Mathematisches (siehe https://numpy.org/ )

data = np.genfromtxt("./While_2.dat")                                     # Einlesen der berechneten Daten von While_2.cpp

plt.title(r'Approximation der Kreiszahl $\pi$ mittels der Leibniz-Reihe') # Titel der Abbildung
plt.ylabel(r'$\pi_{approx}$')                                             # Beschriftung y-Achse
plt.xlabel('Index k')                                                     # Beschriftung x-Achse
plt.plot(data[:,0],data[:,1], marker='+', color="blue")                   # Plotten der Daten
plt.plot([data[0,0],data[-1,0]],[np.pi,np.pi], color="red")               # Horizontale Linie, die den exakten Wert von Pi markiert

plt.savefig("PythonPlot_While_2.png", bbox_inches="tight")                # Speichern der Abbildung als Bild
plt.show()                                                                # Zusaetzliches Darstellen der Abbildung in einem separaten Fenster

In dem oben dargestellten Python-Skript möchten wir eingelesenen Daten in einem x-y-Diagramm visualisieren. Hierbei benutzen wir das Python-Modul "matplotlib" (siehe Matplotlib: Visualization with Python), welches wir zunächst einlesen (importieren) müssen. Unsere von den C++ Programmen ausgegebenen Daten ja oft aus mehreren Einträgen, eine Art von Matrizen oder Listen von Listen. Das Python-Modul numpy lesen wir danach ein. Beim Importieren benennen wir das eingelesene Modul in "np" um, sodass wir bei der Verwendung von NumPy-Befehlen stets ein "np." vor den jeweiligen Befehl schreiben müssen. NumPy ist ein Akronym für "Numerisches Python" und es stellt ein Erweiterungsmodul für Python dar, welches zum größten Teil in der Programmiersprache C geschrieben ist. NumPy ermöglicht das effiziente Rechnen mit großen Arrays und Matrizen und zusätzlich sind viele mathematische Funktionen dort definiert.

VisDataPython.ipynb (View Notebook, Download Notebook)

Wir lesen uns nun die ausgegebenen Daten 'While_4.dat' des C++ Programms While_4.cpp ein. Hierbei benutzen wir das Python-Modul numpy. Die eingelesenen Daten speichern wir unter der Variable 'data', wobei Sie bei der verwendeten Angabe der Datei darauf achten müssen, dass sich die Datei 'While_4.dat' in demselben Verzeichnis wie das Python-Skript befindet. Dann stellen wir uns die Datenpunkte mittels des Befehls 'plt.plot(...)' dar (näheres siehe matplotlib.pyplot.plot und Pyplot tutorial). Hierbei werden die x-Werte der Datenpunkte (data[:,0]) gegen die y-Werte (data[:,1]) aufgetragen. Unsere Variable 'data' hat den Python-Typ eines sogenannten "NumPy ndarrays", eine mehrdimensionale Matrix (Array) von Zahleneinträgen (die Deklaration und Initialisierung von C++ Arrays werden wir in der Vorlesung erst später kennenlernen). Um die Verwendung von mehrdimensionalen Datenarrays in Python zu verstehen, sollte man sich mehr Zeit nehmen (näheres siehe z.B. Sequentiellen Python-Datentyp). Unsere "NumPy Datenarrys" haben Ähnlichkeit mit dem Python-Datentyp der Liste, jedoch ist der Zugriff auf die einzelnen Elemente ein wenig unterschiedlich und Python-Listen sind ein allgemeines Konstrukt.

Das nebenstehende Python Jupyter Notebook 'VisDataPython.ipynb' (View Notebook, Download Notebook) führt kurz in den Themenbereich der Python-Listen ein und verdeutlicht nochmals die einzelnen Schritte des Python-Skriptes PythonPlot_While_4.py.

Computerarithmetik mit Python

In der Mathematik werden Zahlen mit einer unendlichen Anzahl von Nachkommastellen zugelassen und die definierte Arithmetik auf diesem Zahlenraum ℝ ist exakt. Der Zahlenraum in dem der Computer rechnet (ℝ$_C$) benutzt jedoch Zahlen die nur eine endliche Anzahl von Nachkommastellen haben und es wird hierbei nur eine relativ kleine Teilmenge der reellen Zahlen benutzt. Diese Teilmenge ℝ$_C$ umfasst nur rationale Zahlen und speichert den gebrochenen Teil, der mit Mantisse bezeichnet wird, zusammen mit dem exponentiellen Teil, welchen man Charakteristik nennt. Hierbei speichert der Computer die Zahl als eine binäre Liste von Nullen und Einsen.

Computerarithmetik.ipynb (View Notebook, Download Notebook)

In dem nebenstehenden Jupyter Notebook 'Computerarithmetik.ipynb' (View Notebook, Download Notebook) werden die im Unterpunkt Die Computerarithmetik und der Fehler in numerischen Berechnungen besprochene C++ Computerarithmetik an einem Beispiel mittels der Programmiersprache Python verdeutlicht. Es wird dabei eine Python-Liste der binären Computerzahl definiert und und mittels einer for-Schleife die entsprechende Gleitkommazahl berechnet.