12.2    Richtungsfelder

Richtungsfelder veranschaulichen die Lösung einer DGL. Sie geben beim Betrachten auch »ein Gefühl« dafür, wie der Verlauf der Kurve je nach Anfangswert aussieht und in welchen Bereichen der Verlauf besonders interessante Eigenschaften hat. Für ausgewählte Punkte (xi,yi) werden in der x,y-Ebene eines kartesischen Koordinatensystems Tangenten mit der Steigung Δy/Δx gezeichnet. Die Steigungen der Tangenten deuten den Verlauf der Lösungskurve einer DGL an. Die Position der Lösungskurve wird durch den Anfangswert y(0) festgelegt. Sie »schmiegt« sich an die Tangenten an (siehe Abbildung 12.2).

Die Tangenten können mit y' = ƒ(x,y) in den Positionen x und y berechnet werden.

Das Modul matplotlib stellt die Methode

quiver([x, y], dx, dy, width=0.002, headwidth=0,color='r')

für die Darstellung von Vektoren (Pfeilen) zur Verfügung.

Die Koordinaten x und y legen die aktualisierten Anfangspositionen der Pfeile fest. Die Parameter dx und dy bestimmen die Pfeilrichtungen. Die Eigenschaft width legt die Schaftbreite eines Pfeils fest, und die Eigenschaft headwidth definiert die Breite einer Pfeilspitze. Wenn keine Pfeilspitzen gezeichnet werden sollen, muss die Eigenschaft headwidth=0 als Argument übergeben werden. Der Defaultwert von headwidth ist das Dreifache der Schaftbreite von width.

Listing 12.3 stellt das Richtungsfeld für DGL formula dar. Außerdem wird die Lösung formula für den Anfangswert y(0) = 1 gezeichnet.

01  #03_richtungsfeld.py
02 import numpy as np
03 import matplotlib.pyplot as plt
04 a=1 #Anfangswert
05 b=-2 #Wachstumskonstante
06 Nx,Ny = 20,20 #Anzahl der Tangenten
07 x1,x2 = 0,2
08 y1,y2 = 0,1
09 #Steigungsfunktion
10 def f(t,y):
11 dy_dt = b*y
12 return dy_dt
13 #Gitter des Richtungsfeldes
14 x12 = np.linspace(x1,x2,Nx)
15 y12 = np.linspace(y1,y2,Ny)
16 x,y = np.meshgrid(x12,y12)
17 #Lösungskurve
18 t = np.linspace(x1,x2,200)
19 f_t=a*np.exp(b*t)
20 #Grafikbereich
21 fig,ax = plt.subplots()
22 #Richtungsfeld zeichnen
23 ax.quiver(x,y,np.ones_like(x),f(x,y),width=0.002,headwidth=0,color='r')
24 #Lösungskurve zeichnen
25 ax.plot(t,f_t,'b--',lw=2)
26 #Beschriftungen
27 ax.set_title("Richtungsfeld")
28 ax.set_xlabel("t")
29 ax.set_ylabel(r"$\dot{y}$",rotation=0)
30 plt.show()

Listing 12.3     Richtungsfelder zeichnen

Ausgabe

Richtungsfeld für negatives Wachstum

Abbildung 12.2     Richtungsfeld für negatives Wachstum

Analyse

In Zeile 16 erzeugt die NumPy-Funktion meshgrid() ein Gitternetz aus 20 × 20 = 400 Punkten.

In Zeile 19 steht die analytische Lösung der DGL. Der Verlauf der Lösungskurve beginnt mit dem Anfangswert a=1.

In Zeile 23 zeichnet die Matplotlib-Methode quiver() 400 Tangenten des Richtungsfeldes.