Diese Seite bezieht sich auf die erste Auflage (2020) des Buches.   ➜   Zur aktuellen Auflage.

Errata

Wenn Sie einen Fehler im Buch finden, eine Frage haben, oder eine Verbesserung vorschlagen möchten, können Sie mich gerne unter der im Impressum angegebenen E-Mail-Adresse kontaktieren.

Änderungen mit Matplotlib 3.7

Mit Matplotlib 3.7 haben sich einige Änderungen ergeben, die dazu führen, dass einige Programme aus dem Buch nicht mehr korrekt ausgeführt werden oder eine Warnung liefern.

Fehler beim Aufruf von set_data

Bis zur Version 3.6 von Matplotlib konnte man, wenn ein Plot nur aus einem Punkt besteht, für die Koordinaten jeweils eine Zahl angeben. Wenn der Plot aus mehreren Punkten besteht, musste man entsprechend für jede Koordinate eine Sequenz (Liste, Tupel oder ein Array) übergeben. Seit Matplotlib 3.7 muss man stets eine Sequenz übergeben.

Examplarisch sei die Änderung an dem Programm Programm 4.5 erläutert. Dort wurde in Zeile 111 die Position des Hundes wie folgt aktualisiert:

    
hund.set_data(r_hund[n])
    
  
Dabei ist r_hund ein 599×2-Array mit den Koordinaten des Hundes zu jedem berechneten Zeitpunkt. Demzufolge ist r_hund[n] ein eindimensionales Array mit 2 Elementen. Matplotlib 3.7 beschwert sich nun, dass es sich bei den einzelnen Koordinaten um Zahlen handelt und nicht um Sequenzen. Wir müssen daher aus dem Array mit 2 Elementen zunächst ein 2×1-Array erzeugen. Dies gelingt am einfachsten wir folgt:
    
hund.set_data(r_hund[n].reshape(-1, 1))
    
  

Betroffen sind alle Programme, in denen ein Plot mit nur einem einzelnen Punkt erzeugt wird. Die auf dieser Webseite bereitgestellten Programme wurden bereits entsprechend korrigiert.

Warnung beim Erzeugen eines Farbbalkens mit fig.colorbar

In einigen Programmen werden physikalische Größen mithilfe einer Farbtabelle dargestellt. In einigen Fällen wird dazu explizit ein sogenannter Mapper erzeugt, beispielsweise in den Programm Programm 5.4:

  
mapper = mpl.cm.ScalarMappable(cmap=mpl.cm.jet)
  
Später wird dann ein Farbalken wie folgt erzeugt:
  
fig.colorbar(mapper, label='Kraft [N]')
  
Dabei kommt es zu einer Warnung: Der Mapper enthält keinerlei Information darüber, auf welche Axis sich die Farbdarstellung bezieht. Um den Farbbalken darzustellen, muss aber der Platz für den Balken von einer Axis weggenommen werden. Matplotlib muss also erraten, zu welcher Axis der Farbbalken gehört. Dieses Verhalten wird in zukünftigen Versionen von Matplotlib wegfallen. Daher muss man die Axis, auf die sich der Farbbalken bezieht, explizit mithilfe des Arguments ax= angeben:
  
fig.colorbar(mapper, label='Kraft [N]', ax=ax)
  

Betroffen sind alle Programme, in denen ein Farbalken für einen explizit erzeugten Mapper dargestellt werden soll. Die auf dieser Webseite bereitgestellten Programme wurden bereits entsprechend korrigiert.

Kapitel 2

S. 37:

In der vorletzten Zeile von Abschn. 2.16 muss es anstelle von »in Zeile 10« korrekt »in Zeile 6« heißen.

S. 44:

In der ersten Zeile von Tab. 2.4 muss es anstelle von »$2^4-1=127$« korrekt »$2^7-1=127$« heißen.

Kapitel 3

S. 82:

Die Beschreibung des Arrays p, das von der Methode ax.hist zurückgegeben wird, ist ungenau: Das Array gibt nicht die relative Häufigkeit in jeder Gruppe an, sondern die Wahrscheinlichkeitsdichte. Dazu werden die relativen Häufigkeiten so normiert, dass das Integral des Histogramms eins ergibt.

S. 83:

Die vertikale Achse in Abb. 3.2 muss mit dem Begriff »Wahrscheinlichkeitsdichte« anstelle »Wahrscheinlichkeit« beschriftet werden.

S. 83:

Im Programm 3.8 sollte der Datentyp besser mit dtype=float anstelle von dtype=np.float angegeben werden. Neuere Versionen von Numpy (ab Version 1.20) geben sonst eine Warnung aus.

S. 86:

Im Programm 3.9 fehlen bei der Ausgabe der Fit-Ergebnisse Klammern um das Ergebnis:
  
# Gib das Ergebnis der Kurvenanpassung aus.
print(f'Ergebnis der Kurvenanpassung:')
print(f'     n_u = {n_u:4.0f} +- {d_n_u:2.0f} 1/min.')
print(f'     n_0 = {n_0:4.0f} +- {d_n_0:2.0f} 1/min.')
print(f'   alpha = {alpha:.2f} +- {d_alpha:.2f} 1/mm.')
  
Die korrekte Angabe der Mittelwerte und der Fehler erhält man mit dem folgenden Code:
  
# Gib das Ergebnis der Kurvenanpassung aus.
print(f'Ergebnis der Kurvenanpassung:')
print(f'     n_u = ({n_u:4.0f} +- {d_n_u:2.0f}) 1/min.')
print(f'     n_0 = ({n_0:4.0f} +- {d_n_0:2.0f}) 1/min.')
print(f'   alpha = ({alpha:.2f} +- {d_alpha:.2f}) 1/mm.')
  
Das herunterladbare Programm wurde bereits entsprechend korrigiert.

S. 86:

Im letzten Absatz muss es »in Zeile 31« anstelle von »in Zeile 29« heißen.

Kapitel 4

S. 91:

Die Beschreibung der mittleren Geschwindigkeit unterhalb von Gleichung (4.2) ist ungenau. Korrekt muss es heißen: »Die mittlere Geschwindigkeit $\langle \vec v\rangle$, die der Körper in diesem Zeitintervall hat« anstelle von: »Die mittlere Geschwindigkeit $\langle \vec v\rangle$, die der Körper in dieser Zeit zurückgelegt hat«.

S. 109:

Damit das Programm 4.7 auch mit Matplotlib 3.5.0 korrekt funktioniert, muss der Aufruf von set_data wir folgt korrigiert werden:
  
    punkt.set_data(np.array([r[n, 0]]), np.array([r[n, 1]]))
    punkt.set_3d_properties(np.array([r[n, 2]]))
  
Das herunterladbare Programm wurde bereits entsprechend korrigiert.

Hinweis: Seit Matplotlib 3.1.0 kann man die Daten eines 3D-Plots auch mit nur einem Aufruf der Methode set_data_3d aktualisieren:
  
    punkt.set_data3d(r[n, :])
  

Kapitel 5

S. 125:

In Abb. 5.8. müssen die Stäbe besser von 0 bis 6 anstelle von 1 bis 7 nummeriert werden, damit die Indizes in Programm 5.2 konsistent mit der Abbildung sind.

S. 126:

Im Programm 5.2 wurden die Stäbe Nr. 6 und Nr. 7 gegenüber der Abb. 5.8 vertauscht. Korrekt muss es heißen:
  
# Jeder Stab verbindet genau zwei Punkte. Wir legen dazu die
# Indizes der zugehörigen Punkte in einem Array ab.
staebe = np.array([[1, 2], [2, 3], [3, 0],
                   [0, 4], [1, 4], [3, 4], [2, 4]])
  
Die grafische Ausgabe des Programms ändert sich dadurch nicht, da der Fehler nur die Nummerierung der Stäbe und der Stabkräfte betrifft. Das herunterladbare Programm wurde bereits entsprechend korrigiert.

Kapitel 6

S. 157:

In dem Code zur Verwendung von scipy.interpolate.interp1d muss es anstelle von
  
>>> x1 = np.linspace(0, 2, 8)
  
korrekt heißen:
  
>>> x1 = np.linspace(0, 2, 4)
  

S. 157 / 158:

In Programm Programm 6.5 in Zeile 24 und im Text auf S. 158 muss das Wort »Luftdruck« durch »Luftdichte« ersetzt werden.

Kapitel 7

S. 179:

Im Programm 7.1 hat die Zeile 151 keinerlei Funktion und kann entfernt werden. Im herunterladbaren Programmcode wurde diese Zeile durch eine Leerzeile ersetzt, damit die nachfolgenden Zeilennummern mit dem Buchtext übereinstimmen.

S. 186:

Im Programm 7.5 wurde eine Zeile zu wenig abgedruckt, die die Variablen m, t, r und v zuordnet. Das herunterladbare Programm ist korrekt.

Kapitel 8

S. 221:

In Abb. 8.4 steht der Vektor der Gesamtkraft im Allgemeinen nicht wie eingezeichnet tangential zur Bahn des Pendelkörpers. Das Bild stellt lediglich die Situation an einem der Umkehrpunkte des Pendels dar. Während der Bewegung des Pendels muss die Zwangskraft zusätzlich noch die notwendige Zentripetalkraft aufbringen, sodass die Gesamtkraft im Allgemeinen schräg nach innen zeigt.

S. 232:

Gleichung (8.53) lautet korrekt: \[ \tag{8.53} m_i \ddot {\vec r_i} = \vec F_i + \lambda_1 \frac{\partial h_1}{\partial \vec r_i} + \lambda_2 \frac{\partial h_2}{\partial \vec r_i} + \lambda_3 \frac{\partial h_3}{\partial \vec r_i} \qquad \text{mit} \qquad i=1\dots N \] Im Buch steht im dritten Term auf der rechten Seite anstelle von $h_3$ ein $h_2$.

Kapitel 10

S. 320:

Im Programm 10.5 sollte der Datentyp besser mit dtype=complex anstelle von dtype=np.complex angegeben werden. Neuere Versionen von Numpy (ab Version 1.20) geben sonst eine Warnung aus.

Kapitel 11

S. 346

In dem blauen Kasten zur Installtion von Qt muss es python3-pyqt5 anstelle von python3-pytqt5 heißen.