Eure Simulation funktioniert soweit? Und ihr habt euch auch schon mit der Physik der Luftreibung beschäftigt? Super, dann könnt ihr eure numerische Simulation nun verbessern in dem ihr euer Programm um eine Simulation einer Wurfbewegung mit Luftreibung ergänzt.
Das grundsätzliche Vorgehen ist dabei ganz ähnlich wie bei der Simulation vorhin, lediglich die Rechenvorschrift ändert sich. Außerdem werden die Variablen für die Simulation mit Luftreibung zur besseren Übersicht mit _L gekennzeichnet. Damit ihr nicht so viel schreiben müsst, gibt es dafür auch ein Gerüst. Kopiert dieses in einen neuen Block unter die Simulation ohne Luftreibung. Bearbeitet die Rechenvorschrift anschließend. Nutzt dafür die Überlegungen aus dem Laborbuch. Denkt am Ende daran in dem Block in dem die Bausteine miteinander verknüpft werden an den zwei markierten Stellen den Hashtag (#) zu entfernen.
def simulationLuft(N, dt, a_x_L, a_y_L, v_x_L, v_y_L, s_x_L, s_y_L):
# Für die Luftreibung gilt: F_Luft = 0.5*A*cw*Dichte*v^2 = const * v^2
# Eigenschaften des Wurfobjektes
# *** Passt die Werte an das von euch betrachtete Objekt an. ***
m = 1 # Masse in kg
A = 0.09 # Querschnittsfläche in m^2, 0.0009m^2 = 9cm^2
cw = 0.45 # für Kugel, s. https://de.wikipedia.org/wiki/Str%C3%B6mungswiderstandskoeffizient#Beispiele
Dichte = 1.2 # kg/m^3 (Luft)
# Hier werden leere Arrays ("Tabellen") zum Hineinschreiben der berechneten Werte erzeugt:
a_x_array_L = np.zeros([N+1])
v_x_array_L = np.zeros([N+1])
s_x_array_L = np.zeros([N+1])
a_y_array_L = np.zeros([N+1])
v_y_array_L = np.zeros([N+1])
s_y_array_L = np.zeros([N+1])
# Hier werden die Startwerte in die Tabelle übertragen:
a_x_array_L[0] = a_x_L
v_x_array_L[0] = v_x_L
s_x_array_L[0] = s_x_L
a_y_array_L[0] = a_y_L
v_y_array_L[0] = v_y_L
s_y_array_L[0] = s_y_L
# Simulation (Euler-Verfahren) startet:
for i in tqdm(range(N)):
# Hier werden die Werte aus dem vorherigen Iterationsschritt zwischengespeichert:
a_x_L_alt = a_x_L
v_x_L_alt = v_x_L
s_x_L_alt = s_x_L
a_y_L_alt = a_y_L
v_y_L_alt = v_y_L
s_y_L_alt = s_y_L
# Hinweis: Sinus, Cosinus und Tangens können mit np.sin(), np.cos()
# und np.tan() genutzt werden. Das gleiche gilt für arcsin, arccos, arctan.
# Hier wird der Winkel zwischen v_y und v_x berechnet:
alpha = np.arctan(v_y_L_alt / v_x_L_alt)
# Berechnung der neuen Werte:
# ***Tragt hier die Rechnenvorschrift für eine Wurfbewegung mit Luftreibung ein.***
a_x_L =
v_x_L =
s_x_L =
a_y_L =
v_y_L =
s_y_L =
# Hier werden die berechneten Werte in die Tabelle übertragen:
a_x_array_L[i+1] = a_x_L
v_x_array_L[i+1] = v_x_L
s_x_array_L[i+1] = s_x_L
a_y_array_L[i+1] = a_y_L
v_y_array_L[i+1] = v_y_L
s_y_array_L[i+1] = s_y_L
return s_x_array_L, s_y_array_L
Damit ihr im Video eurer Simulation auch die Simulation mit Luftreibung sehen könnt, entfernt in dem letzen Block eurer Programms an den folgenden Stellen den Hashtag (#):
#m, = plt.plot([], [], 'k-o')
#plt.plot(s_x_array_L, s_y_array_L, label="Sim. mit Luft", color="black")
# m.set_data(s_x_array_L[i], s_y_array_L[i]) #verbesserte Simulation
Hier geht es zurück zur Übersicht:
Feedback-Feld: Hier kannst du uns Hinweise oder ein Feedback zu dieser Seite oder der Aktivität dazu geben. Dies hilft uns bei der Weiterentwicklung dieser Lernumgebung. Klicke nach deiner Eingabe bitte auf „Absenden“, damit dein Feedback auch für uns gespeichert wird. Vielen Dank dir!