Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

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://www.anaconda.com/download die entsprechenden Installationsdateien sowie eine Installationsanleitung. Der Installationslink für Miniconda befindet sich am Ende der Seite. Prinzipiell könnten wir auch die Distribution Anaconda verwenden. Diese bringt jedoch bereits sehr viele Pakete mit und ist daher für unsere Zwecke unnötig groß.

Für Windows-Nutzer ist es oft empfehlenswert, zunächst das Linux-Subsystem zu installieren, siehe https://learn.microsoft.com/en-us/windows/wsl/install. Dieses Skript wurde von Linux-Nutzern geschrieben, und einige Erklärungen sind daher Linux-spezifisch.

Zur Installation von Miniconda öffnen wir eine Konsole und führen das heruntergeladene Shell-Script aus:

cd Downloads
sh Miniconda3-latest-Linux-x86_64.sh

Ausgabe:

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 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 geben wir in der Konsole ein:

conda create --name myenv

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

conda activate myenv

Es 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 --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, 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 deactivate

wieder 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:

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.py

Der 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 jupyter

Mit 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 --version

Ausgabe: z.B. JupyterLab 6.4.9

ob die Installation funktioniert hat. Anschließend starten wir JuypterLab mit der Eingabe

jupyter lab

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

Jupyter-Notebook

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:

Jupyter-Notebook

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:

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
References
  1. Woyand, H.-B. (2021). Python für Ingenieure und Naturwissenschaftler. Hanser.