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, genauer gesagt eine Skriptsprache, bei der jede Programmzeile nach und nach direkt 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.

Vorbereitung

Installation von Conda

Wir wollen hier kurz diskutieren, wie eine Python-Umgebung auf dem eigenen Computer installiert werden kann. Der einfachste Weg, welcher sowohl für Windows-, Linux und Mac-Computer funktioniert, ist über den Paketmanager Conda. Es gibt verschiedene Conda-Distributionen, für unsere Zwecke reicht MiniConda aus. Für alle gängigen Betriebssysteme findet man unter https://docs.conda.io/en/latest/miniconda.html die entsprechenden Installationsdateien.

Um zu testen, ob 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, welche die aktuellste Python-Version, 3.10, verwendet. Dazu tippen wir in die Konsole ein:

conda create --name myenv python=3.10

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:

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

Es gibt verschiedene Möglichkeiten um in Python zu programmieren. Kurze Berechnungen kann man natürlich direkt in der Python-Konsole vornehmen. Man kann auch ein Python-Skript in einem Texteditor seiner Wahl schreiben, dieses mit der Dateiendung .py abspeichern und mit

python3 mein_skript.py

ausführen.

Eine sehr schöne Lösung liefert allerdings das Jupyter-Notebook, ein Browserbasierter Editor, welcher alle Funktionen bereit stellt, die wir für unsere Zwecke benötigen. Wir installieren 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 neues Browserfenster öffnen.

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