Mathematisches Programmieren#

Vorwort#

In dieser Vorlesung und der zugehörigen Übung wollen wir uns mit der Programmiersprache Python und deren Anwendungen in der Mathematik vertraut machen. Die Vorlesung orientiert sich stark an dem Buch [1], welches auch in der Universitätsbibliothek (Link) als E-Book heruntergeladen werden kann.

[1]

Hans-Bernhard Woyand. Python für Ingenieure und Naturwissenschaftler. Hanser, München, 2021.

Was ist Python?

Python ist eine Programmiersprache, die häufig in Webanwendungen, Softwareentwicklung, in der Datenwissenschaft und im Machine Learning verwendet wird. Auch für mathematische Anwendungen ist Python sehr gut geeignet.

Python ist eine sogenannte Skriptsprache, das bedeutet, dass jede Programmzeile aus der Quelldatei nach und nach von einem Interpreter ausgeführt wird. Dies vereinfacht die Programmierung, da im Gegensatz zu anderen Programmiersprachen wie C/C++, Fortran und Java der Programmcode nicht erst aufwändig in Maschinencode übersetzt (kompiliert) werden muss.

Python ist bei Programmierern sehr beliebt, da sich der Programmierer bzw. die Programmiererin nicht damit beschäftigen muss, was der Computer eigentlich genau im Hintergrund macht. Man kann sich stets auf das zu lösende Kernproblem fokusieren.

Ziele der Vorlesung

In dieser Vorlesung wollen wir die Programmiersprache Python erlernen und diese zur Lösung mathematischer Problemstellungen einsetzen. Besonders mächtig wird Python durch die unzähligen Erweiterungsmodule. Wir wollen uns diese zunutze machen und folgende Aspekte, die für mathematische Anwendungen relevant sind, diskutieren.

  • Rechnen mit Matrizen und Vektoren

    Neben den üblichen Anwendungen in der linearen Algebra, beispielsweise das Lösen linearer Gleichungssysteme, ist das Rechnen mit Matrizen und Vektoren essentiell in der numerischen Mathematik. So treten lineare Gleichungssysteme bei der numerischen Lösung von Differentialgleichungen, bei Interpolationsaufgaben und bei der numerischen Integration auf.

  • Visualisierung

    Wichtig ist oft die graphische Aufbereitung der Lösung eines mathematischen Problems. Wir werden daher lernen Funktionen zu plotten und Datensätze in Diagrammen geeignet darzustellen.

  • Mathematische Berechnungen

    Python lässt sich nicht nur als Taschenrechner verwenden, es gibt Erweiterungsmodule, die es sogar erlauben Funktionen zu Differenzieren und zu Integrieren sowie nichtlineare Gleichungen und Differentialgleichungen exakt zu lösen.

  • Wissenschaftliches Rechnen

    Viele Algorithmen für eine Vielzahl von Anwendungen sind in diversen Erweiterungsmodulen bereits implementiert, beispielsweise für die numerische Lösung von Optimierungsproblemen, Differentialgleichungen, nichtlinearer Gleichungen und Integrationsaufgaben.

Warum Python?

Die Programmiersprache Python bietet einige Vorteile, die wir uns bei der Programierung mathematischer Anwendungen zunutze machen:

  • Python ist leicht zu erlernen, unterstützt die üblichen Programmierparadigmen und ist dabei gut lesbar.

  • Python eignet sich perfekt für die schnelle Entwicklung von Software-Prototypen. Mit nur wenigen Code-Zeilen lassen sich bereits recht komplexe Anwendungen schreiben.

  • Es gibt unzählige Erweiterungen, sogenannte Module, für alle möglichen Zwecke. Wir werden in dieser Vorlesung einige dieser Module kennenlernen:

    • NumPy: Rechnen mit Matrizen und Vektoren

    • SciPy: Sammlung von Algorithmen für das wissenschaftliche Rechnen

    • SymPy: Ein Computeralgebrasystem für symbolische Brechnungen

    • Matplotlib: Zum Erzeugen von Plots und Diagrammen

  • Python ist portabel. In Python geschriebener Programmcode läuft auf allen Betriebssystemen (Windows, MacOS, Linux).

  • Python und deren Erweiterungsmodule sind kostenlos, was unser Hauptargument gegen Matlab ist.

Wann ist Python eher ungeeignet?

Python ist für Anwendungen, die eine hohe Geschwindigkeit erfordern, ungeeignet, denn Python ist aufgrund der zeilenweisen Ausführung und der dynamischen Typisierung langsamer als andere Sprachen. Python verbraucht aufgrund seiner Eigenschaften wie flexible Datentypen viel Speicher.

Vorbereitung#

Bevor wir unser erstes Programm implementieren können, müssen wir unseren Rechner entsprechend einrichten. Wir benötigen mindestens eine Python-Umgebung, einen geeigneten Editor für den Quellcode und eine Möglichkeit externe Programmbibliotheken (Module) nachzuinstallieren. Im Folgenden soll eine Möglichkeit vorgestellt werden, die betriebssystem unabhängig und zuverlässig funktioniert.

Installation von Conda#

Conda ist ein Paketmanager, der über die Kommandozeile bedient werden kann. Conda erlaubt es innerhalb einer isolierten Umgebung Programmpakete wie beispielsweise Python selbst, sowie externe Programmbibliotheken (Module) zu installieren.

Man findet im Internet verschiedene Conda-Distributionen. Wir wollen hier die Distribution MiniConda verwenden. Für alle gängigen Betriebssysteme findet man unter https://docs.conda.io/en/latest/miniconda.html die entsprechenden Installationsdateien sowie eine Installationsanleitung.

Wenn die Installation erfolgreich war, öffnen wir eine Konsole und geben den Befehl

conda list

ein. Hier sollte nun eine Liste aller vorinstallierten Pakete erscheinen.

Conda konfigurieren#

In Conda lassen sich Umgebungen erstellen, welche weitestgehend unabhängig vom restlichen System sind. In diesen Umgebungen lässt sich eine Python-Distribution sowie weitere Python-Module, welche im Verlauf der Vorlesung verwendet werden, installieren.

Zunächst erstellen wir eine neue Umgebung Namens myenv. Dazu tippen wir in die Konsole ein:

conda create --name myenv

Dies geschieht nur einmalig. Immer wenn wir nun in unsere Python-Umgebung wechseln wollen, tippen wir ein:

conda activate myenv

Es fällt auf, dass die Konsoleneingabe nun von

(base) user@machine:~$

auf

(myenv) user@machine:~$

wechselt. Um zu testen ob die Python-Installation innerhalb unserer Umgebung erfolgreich war tippen wir ein:

python3 --version

Ausgabe: Python 3.10.0

Wir können nun bereits anfangen in Python zu programmieren. Wir wechseln mit

python3

in die Python-Konsole und schreiben unser erstes Programm, welches ein “Hello world!” auf der Konsole ausgeben soll:

print("Hello world!")

Wir verlassen die Python-Konsole mit dem Befehl exit() oder mit STRG+D. Haben wir unsere Arbeit beendet können wir die Conda-Umgebung mit

conda deactivate

wieder verlassen.

Jupyter-Notebook#

Zuletzt müssen wir noch einen passenden Texteditor für den Quellcode installieren. Theoretisch könnte man auch im Windows Nodepad oder unter Linux mit gedit, kate oder einem beliebigen anderen Texteditor programmieren. Wünschenswert wäre allerdings ein Editor, der automatisch programmiersprachenspezifische Keywords hervorhebt (Code-Highliting) und den Programm Code logisch formattiert (Code Layout). Beliebte Editoren sind beispielsweise:

Python-Skripte werden in der Regel mit der Endung .py (z.B. mein_skript.py) abspeichern. Um das Skript auf der Konsole auszuführen schreibt man dann einfach:

python3 mein_skript.py

Der Editor, den wir in dieser Vorlesung verwenden wollen, ist das Jupyter-Notebook, und funktioniert etwas anders als die oben genannten. Zunächst ist das Jupyter-Notebook browserbasiert, läuft also in Chrome, Firefox, etc.. Mit Juypter-Notebook können wir nicht nur reine Python-Skripts schreiben, sondern interaktive Arbeitsblätter, die neben Code auch Text und Bilder enthalten können. Dazu später mehr.

Wir installieren zunächst das Jupyter-Notebook direkt in unsere Conda-Umgebung:

conda activate myenv
conda install -c conda-forge notebook

Mit der Option -c conda-forge teilen wir Conda mit, dass es auf der Suche nach dem Paket notebook auch in einem öffentlichen Archiv (Channel) namens “conda-forge” suchen soll. Wir testen mit

jupyter-notebook --version

Ausgabe: 6.4.9

ob die Installation funktioniert hat. Wir starten das Juypter-Notebook anschließend mit der Eingabe

jupyter-notebook &

und es sollte sich ein neuer Tab im Browser öffnen (eventuell unbemerkt im Hintergrund).

Jupyter-Notebook

Mit der Schaltfläche New \(\Rightarrow\) Python3 können wir nun ein neues Python-Skript anlegen und direkt anfangen die Code-Zellen mit Programmcode zu füllen. Eine Code-Zelle wird mit SHIFT+ENTER ausgeführt:

Jupyter-Notebook

Neben Code-Zellen gibt es im Jupyter-Notebook auch noch Markdown-Zellen. Um Markdown-Zellen zu verwenden müssen wir in der Symbolleiste im Auswahlfeld auf die Option “Markdown” umschalten:

Jupyter-Notebook

Wir können nun die Zelle mit Text füllen und diese schön gestalten. Auf dieser Webseite ist die Syntax der Markdown-Language erklärt. Wir können beispielsweise den Text mit Überschriften gliedern, Bilder und Querverweise einbinden, Tabellen und Auflistungen erstellen, und vieles mehr.

Der Markdown-Code

# Meine Studienarbeit

## Einführung

Die Arbeit beschäftigt sich mit

* Grundlagen der Programmierung
* Mathematische Anwendungen

Falls Fragen auftreten, suche selbst auf [Google](https://www.google.de).

Hier noch ein kurzes Symbolverzeichnis:

|Symbol|Bedeutung|
|:-|:-|
|$\alpha$|Wärmeleitkoeffizient|
|$\nu$|Querkontraktionszahl|

liefert die Ausgabe

Jupyter-Notebook