Solving Advanced Problems with Python

Idee & Ziele:

  • Verschiedene anspruchsvolle Probleme aus dem mathematisch-naturwissenschaftlichen Bereich mit Python lösen.
  • Mit Jupyter-Notebooks arbeiten

Zeit: 1 Woche

Erstelle ein Jupyter-NB mit Namen 01_einfache_dgl.ipynb im entsprechenden Repo.

Bei einer Gleichung (hier: quadratische Gleichung) wie z.B. $$x^2 = 20 - x$$ sucht man alle Zahlen, die man für die Variable $x$ einsetzen kann, so dann die Gleichung erfüllt ist. Die Gleichung in diesem Beispiel hat zwei Lösungen: $x=-5$ und $x=4$.

Eine Differentialgleichungen (DGL) ist vom Prinzip her ähnlich. Allerings sucht man als Lösung(en) nicht Zahlen, sondern Funktionen, die eine gewisse Bedingung erfüllen. Ein Beispiel wäre:

$$y'(x) = \frac{2 \cdot y(x)}{x}$$

Hier suchen wir alle Funktionen $y(x)$, deren Ableitung $y'(x)$ gleich ist wie zwei mal die ursprüngliche Funktion dividiert durch die Variable $x$. Die Lösung von dieser Differentialgleichung ist die Funktion

$$y(x) = k \cdot x^2$$

Dabei ist $k$ eine beliebige Zahl. Da wir für $k$ unendlich viele Möglichkeiten haben, gibt es also unendlich viele Lösungen.

Zum Schluss wollen wir uns noch vergewissern, dass die gefundene Funktion tatsächlich die DGL löst:

$$y'(x) = 2 k x = \frac{2kx^2}{x} = \frac{2 \cdot y(x)}{x}$$

Differentialgleichungen von Hand zu lösen kann sehr anspruchsvoll und oft sogar unmöglich sein. Wie dem auch sei, dies ist nicht das, was wir hier machen wollen - dies wird im PHAM behandelt. Hier geht es um das numerische Lösen von Differentialgleichungen, wir überlassen also dem Computer das Lösen.

Beispiel

Wir betrachten die Differentialgleichung

$$y'(x) = - k y(x)$$

wobei $k$ irgend eine konstante Zahl ist. Wir suchen also eine Funktion $y(x)$, die, wenn man sie ableitet, minus sich selbst mal eine fixe Konstante ergibt.

Wir wollen nun diese DGL mithilfe von Python lösen. Dazu verwenden wir den ODEINT Solver. ODE steht für Ordinary Differential Equation (Gewöhnliche Differentialgleichungen) und INT für Integrate. ODEs sind Differentialgleichungen, die von nur einer Variablen, hier $x$, abhängen. Im Gegensatz dazu hängen Partielle Differentialgleichung von mehreren Variablen ab.

Beachte: Es gibt unendlich viele Funktionen $y(x)$, die die DGL erfüllen, alle haben aber die gleiche Form. Um eine eindeutige Lösung zu erhalten, muss man deshalb eine Anfangsbedingung festlegen. Zum Beispiel kann man sagen, dass für $x=0$ der Funktionswert $y=5$ sein soll. Diese Anfangsbedingung muss dem Solver als Argument übergeben werden. Die gesamte Information, die man benötigt, um eine eindeutige Lösung zu finden, sieht dann wie folgt aus:

$$y'(x) = - k y(x)$$ $$y(0) = 5$$

Wichtig ist, dass in der DGL die Ableitung alleine auf der linken Seite steht.

Links:

Lösung mit odeint:

from scipy.integrate import odeint
import numpy as np
import matplotlib.pyplot as plt
 
def dgl(y,x):
    k = 0.4
    y_prime = - k * y
    return y_prime
 
X = np.linspace(0,20,100)
 
y0 = 15
 
Y = odeint(dgl,y0,X)
 
plt.plot(X,Y)
  • Wissen, was DGL sind …
  • und wozu sie nützlich sind
  • Wissen, warum DGL Anfangsbedingungen brauchen
  • DGL mit odeint lösen können
  • Mit matplotlib ansprechende Figuren erstellen können

Aufgabe B1: Beispiel oben

Part I
  1. Gehe das Beispiel oben Schritt für Schritt durch, stelle sicher, dass du alles verstehst. Studiere dazu z.B. das Manual von ODEINT.
  2. Um was für eine Funktion $y(x)$ handelt es sich hier?
  3. Spiele mit dem Wert für den Parameter $k$. Welchen Einfluss hat dieser auf die Funktion?
  4. Was kann im real life durch eine solche Funktion beschrieben werden? Mache ein Beispiel
Part II
  1. Verschönere die Figur, unter anderem sollst du folgendes machen:
    1. Achsen beschriften
    2. Kurve dicker und andere Farbe
    3. Legende hinzufügen
    4. Titel hinzufügen
  2. Nun soll die DGL für verschiedene Werte für $k$ gelöst werden. Finde dazu einen Weg, wie dem odeint-Solver ein zusätzliches Argument übergeben werden kann. Visualisiere dann alle Funktionsgraphen in einer Figur und beschrifte die Graphen in der Legende.
Part III

Mache eine Kopie des Codes und füge einen Slider ein, mit dem man den Wert von $k$ einstellen kann.

Aufgabe B2

  1. Löse die Differentialgleichung $$f'(x) = a$$ mit odeint, wobei $a$ ein beliebiger Parameter ist.
  2. Stelle die Funktion $f(x)$ graphisch dar.
  3. Um was für eine Funktion handelt es sich bei $f(x)$?

Aufgabe B3

  1. Löse die DGL vom Theorieteil am Anfang des Kapitels: $$f'(x) = \frac{2 \cdot f(x)}{x}$$
  2. Stelle die Lösung graphisch dar und vergleiche sie mit der exakten Lösung $f(x) = k x^2$.

Aufgabe B4: Matplotlib

Finde heraus, wie du die Darstellung deiner Figur verändern kannst, z.B.:

  1. Grösse der Figur
  2. Farbe und Liniendicke von Graph
  3. Hintergrundfarbe
  4. Ticks auf Achsen
  5. Beschriftungen: Titel, Achsen, Graph, Legende
  • talit/python_advanced_problems.1754902848.txt.gz
  • Zuletzt geändert: 2025-08-11 09:00
  • von sca