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

Programme

Alle Programme, die in diesem Buch besprochen werden, und die Programme zu den Musterlösungen der Übungsaufgaben können Sie auch als ein zip-Archiv herunterladen.

Download    Programm 6.2 Dynamik/ausrollen2.py

"""Simulation des Ausrollens eines Fahrzeugs mit
der Funktion solve_ivp. """

import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate

# Zeitdauer, die simuliert werden soll [s].
t_max = 200

# Masse des Fahrzeugs [kg].
m = 15.0

# Reibungskoeffizient [kg / m].
b = 2.5

# Anfangsort [m].
x0 = 0

# Anfangsgeschwindigkeit [m/s].
v0 = 10.0


def F(v):
    """Kraft als Funktion der Geschwindigkeit v. """
    return - b * v * np.abs(v)


def dgl(t, u):
    x, v = u
    return np.array([v, F(v) / m])


# Lege den Zustandsvektor zum Zeitpunkt t=0 fest.
u0 = np.array([x0, v0])

# Löse die Bewegungsgleichung im Zeitintervall
# von t = 0 bis t = t_max.
result = scipy.integrate.solve_ivp(dgl, [0, t_max], u0)

# Gib die Statusmeldung aus und verteile das Ergebnis
# auf entsprechende Arrays.
print(result.message)
t = result.t
x, v = result.y

# Erzeuge eine Figure.
fig = plt.figure(figsize=(9, 4))
fig.set_tight_layout(True)

# Plotte das Geschwindigkeits-Zeit-Diagramm.
ax1 = fig.add_subplot(1, 2, 1)
ax1.set_xlabel('t [s]')
ax1.set_ylabel('v [m/s]')
ax1.grid()
ax1.plot(t, v0 / (1 + v0 * b / m * t),
         '-b', label='analytisch')
ax1.plot(t, v, '.r', label='simuliert')
ax1.legend()

# Plotte das Orts-Zeit-Diagramm.
ax2 = fig.add_subplot(1, 2, 2)
ax2.set_xlabel('t [s]')
ax2.set_ylabel('x [m]')
ax2.grid()
ax2.plot(t, m / b * np.log(1 + v0 * b / m * t),
         '-b', label='analytisch')
ax2.plot(t, x, '.r', label='simuliert')
ax2.legend()

# Zeige die Grafik an.
plt.show()