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 Woyand (2021), welches auch in der Universitätsbibliothek (Link) als E-Book heruntergeladen werden kann.
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, insbesondere in den Bereichen numerische Mathematik, Datenanalyse und wissenschaftliches Rechnen, hat sich Python zu einer der wichtigsten Programmiersprachen entwickelt.
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 Programmiererinnen und Programmierern sehr beliebt, da man sich beim Schreiben von Programmen weniger mit technischen Details der Hardware beschäftigen muss. Stattdessen kann man sich stärker auf das eigentliche Problem konzentrieren.
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 zahlreichen 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 symbolisch 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 zahlreiche Erweiterungen, sogenannte Module, für unterschiedliche Anwendungen. 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 gängigen Betriebssystemen (Windows, MacOS, Linux).
Python und seine Erweiterungsmodule sind frei verfügbar. Dies ist auch ein wichtiger Unterschied zu kommerzieller Software wie Matlab.
Wann ist Python eher ungeeignet?
Python ist für Anwendungen, die eine hohe Ausführungsgeschwindigkeit erfordern, oft weniger geeignet. Aufgrund der dynamischen Typisierung und Interpreter-basierten Ausführung ist Python in vielen Fällen langsamer als kompilierte Programmiersprachen. Außerdem kann Python durch flexible Datentypen einen vergleichsweise hohen Speicherbedarf haben.
Vorbereitung¶
Bevor wir unser erstes Programm implementieren können, müssen wir unseren Rechner entsprechend einrichten. Wir benötigen eine Python-Umgebung, einen geeigneten Editor für den Quellcode sowie eine Möglichkeit externe Programmbibliotheken (Module) nachzuinstallieren. Im Folgenden wird eine Möglichkeit vorgestellt, die betriebssystemunabhä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 wie NumPy, SciPy und MatplotLib) zu installieren.
Im Internet findet man verschiedene Conda-Distributionen. Wir wollen hier die Distribution
Miniconda verwenden. Für alle gängigen Betriebssysteme findet man unter
https://
Für Windows-Nutzer ist es oft empfehlenswert, zunächst das Linux-Subsystem zu
installieren, siehe https://
Zur Installation von Miniconda öffnen wir eine Konsole und führen das heruntergeladene Shell-Script aus:
cd Downloads
sh Miniconda3-latest-Linux-x86_64.shAusgabe:
Welcome to Miniconda3 py313_25.11.1-1
In order to continue the installation process, please review the license
agreement.
Please, press ENTER to continue
Während des Installationsprozesses müssen wir einer Lizenz zustimmen (yes eingeben), gegebenenfalls einen alternativen Installationspfad angeben und unsere lokalen Konfigurationsdateien anpassen lassen (ebenfalls mit yes bestätigen).
Wenn die Installation erfolgreich war, öffnen wir eine neue Konsole und geben den Befehl
conda listein. 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 geben wir in der Konsole ein:
conda create --name myenvDies geschieht nur einmalig. Immer wenn wir nun in unsere Python-Umgebung wechseln wollen, geben wir ein:
conda activate myenvEs fällt auf, dass die Konsolen-Wingabeaufforderung nun von
(base) user@machine:~$zu
(myenv) user@machine:~$ändert. Um zu testen ob die Python-Installation innerhalb unserer Umgebung erfolgreich war tippen wir ein:
python3 --versionAusgabe: Python 3.10.0
Wir können nun bereits anfangen, in Python zu programmieren. Wir wechseln mit
python3in die Python-Konsole und schreiben unser erstes Programm, das “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 deactivatewieder verlassen.
JupyterLab¶
Zuletzt müssen wir noch einen passenden Editor für unseren 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 übersichtlich formatiert (Code Layout).
Beliebte Editoren sind beispielsweise:
Vim und Emacs (für die Profis)
Python-Skripte werden in der Regel mit der Endung .py (z.B. mein_skript.py) abgespeichert.
Um ein solches Skript auf der Konsole auszuführen schreibt man einfach:
python3 mein_skript.pyDer Editor, den wir in dieser Vorlesung verwenden wollen, ist JupyterLab. Dieser funktioniert etwas anders als die oben genannten Programme. JupyterLab ist browserbasiert und läuft beispielsweise in Chrome, Firefox oder einem anderen Webbrowser..
Mit JuypterLab können wir nicht nur reine Python-Skripts schreiben, sondern interaktive Arbeitsblätter, die neben Code auch Text, Formeln, Grafiken 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 jupyterMit der Option -c conda-forge teilen wir Conda mit, dass es auf der Suche
nach dem Paket jupyter auch in einem öffentlichen Archiv (Channel) namens
“conda-forge” suchen soll. Wir testen mit
jupyter --versionAusgabe: z.B. JupyterLab 6.4.9
ob die Installation funktioniert hat. Anschließend starten wir JuypterLab mit der Eingabe
jupyter labNun sollte sich ein neuer Tab im Browser öffnen (eventuell unbemerkt im Hintergrund).

Mit der Schaltfläche Python 3 (ipykernel) können wir nun ein neues Python-Notebook
anlegen und direkt beginnen die Code-Zellen mit Programmcode zu
füllen. Eine Code-Zelle wird mit SHIFT+ENTER ausgeführt:

Notebooks werden mit der Endung .ipynb gespeichert. Änderungen können
über File → Save Notebook oder mit STRG+S gespeichert werden.
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:

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

- Woyand, H.-B. (2021). Python für Ingenieure und Naturwissenschaftler. Hanser.