Nehmen wir an, ich werfe ein Objekt horizontal von einer Klippe mit fester Höhe und ich kenne die Zeit, die es braucht, um zu fallen. Ich wollte wissen, wie weit es fährt, aber es hat aufgrund des Luftwiderstands eine Beschleunigung entgegen der Richtung der Anfangsgeschwindigkeit. Daher habe ich die Geschwindigkeit über die Zeit integriert; in diesem Fall war die Geschwindigkeit als Funktion der Zeit gleich v0 - at. Okay, was ist Beschleunigung (in diesem Fall)? Ich habe mir den Luftwiderstand angesehen, und es stellt sich heraus, dass er von der Fläche, einem Koeffizienten, der Luftdichte und ... der momentanen Geschwindigkeit abhängt ... Als Gymnasiast, der nur grundlegende Berechnungen durchgeführt hat, verwirrt mich das. Muss ich etwa Differentialgleichungen zweiter Ordnung lernen, bevor ich das lösen kann, oder fehlt mir etwas Grundlegendes? Jede Hilfe wäre sehr willkommen, und es tut mir leid, dass ich so etwas Grundlegendes frage :(.
Es ist keine dumme Frage - und es ist tatsächlich unmöglich, sie analytisch zu beantworten (für den Fall eines quadratischen Widerstands mit horizontaler Geschwindigkeit und vertikaler Beschleunigung).
Hier sind einige grundlegende Dinge, die Ihnen helfen, darüber nachzudenken:
Die Gleichung ist
Wenn Sie einen (nach vorne gerichteten) Bereich haben , dann bewegst du dich jede Sekunde durch eine Volumenluftsäule Wo ist die Geschwindigkeit. Die Masse dieser Säule ist . Wenn Sie all diese Luft mit der Geschwindigkeit Ihres Projektils bewegen, bekommt sie einen Schwung von . Dies sieht sehr nach Ihrer Drag-Gleichung aus. Wir brauchen nur den Faktor um die Art und Weise zu berücksichtigen, wie sich Luft wirklich bewegt (es ist nicht einfach "die gesamte Luftsäule mit der Geschwindigkeit des Projektils zu bewegen"), und da sind Sie.
Um die Trajektorie zu berechnen, müssen Sie die numerische Integration verwenden. Sie berechnen den Anfangswiderstand aus der Anfangsgeschwindigkeit. Damit können Sie die momentane Beschleunigung berechnen (Schwerkraft nicht vergessen); Lassen Sie diese Beschleunigung für eine sehr kurze Zeit wirken und berechnen Sie die neue (horizontale und vertikale Komponente der) Geschwindigkeit. Berechnen Sie aus der Geschwindigkeit die Verschiebung. Wiederholen Sie dies für den nächsten Zeitschritt.
Ich beschloss, ein einfaches Python-Skript zu schreiben, das den Ansatz demonstriert. Wenn Sie dies mit A = 0 (effektiv kein Widerstand) ausführen, können Sie das Ergebnis mit der analytischen Lösung vergleichen - dies zeigt, dass die Integration korrekt funktioniert. Wenn Sie "realistischen" Widerstand hinzufügen, können Sie die Trajektorie für jede andere Konfiguration berechnen. Wie üblich kommt mein Code ohne Garantie ("nicht unbedingt ein Beispiel für gute Codierung, nicht vollständig getestet, keine Fehlerprüfung usw."). Genießen.
# example of numerical integration of projectile motion in 2D
import matplotlib.pyplot as plt
from math import sin, cos, atan2, pi, sqrt
# constants
rho = 1.22 # density of medium
g = 9.81 # acceleration of gravity
# projectile properties
A = 0.05 # cross sectional area
Cd = 0.5 # drag factor
m = 0.1 # mass
# initial velocity & angle (radians)
v = 10. # m/s
theta = pi/4
# initial position, velocity, time
x = 0.
y = 5. # height above target surface
vx = v * cos(theta)
vy = v * sin(theta)
vx_init = vx
t = 0.
# storage for the result
X = [x]
Y = [y]
# step size
dt = 0.01
def drag(v, theta):
F =0.5*rho*v*v*A*Cd
return (F*cos(theta), F*sin(theta))
while ((y>0) | (vy>0)):
# instantaneous force:
Fx, Fy = drag(v, theta)
# acceleration:
ax = -Fx/m
ay = -Fy/m - g
# position update:
x = x + vx*dt + 0.5*ax*dt*dt
y = y + vy*dt + 0.5*ay*dt*dt
# update velocity components:
vx = vx + ax*dt
vy = vy + ay*dt
# new angle and velocity:
v = sqrt(vx*vx+vy*vy)
theta = atan2(vy,vx)
# store result for plotting:
X.append(x)
Y.append(y)
t = t + dt
# adjust last point to Y=0 - we may have "overshot":
ft = Y[-2]/(Y[-2]-Y[-1]) # fractional time to last point
X[-1] = X[-2] + (X[-1]-X[-2])*ft
Y[-1] = 0.
t = t - (1-ft)*dt
print('Total flight time: %.3f sec\n'%t)
print('Total distance: %.2f m'%X[-1])
print('Initial horizontal velocity: %.2f m/s'%vx_init)
print('Final horizontal velocity: %.2f m/s'%vx)
plt.figure()
plt.plot(X,Y)
plt.title('projectile motion')
plt.xlabel('X position')
plt.ylabel('Y position')
plt.show()
Und ein Beispiel für die Ausgabe des obigen:
Ich habe meine ursprüngliche Antwort aufgrund eines Kommentars von @Floris gelöscht, da für den Luftwiderstand, der vom Quadrat der Geschwindigkeit abhängt, die vertikalen und horizontalen Bewegungen nicht unabhängig voneinander sind.
Gemäß dieser Arbeit sind die Bewegungsgleichungen, die in diesem Fall gelöst werden müssen,:
Und Wo was nur numerisch möglich ist.
In Gegenwart von Luftwiderstand enthalten Newtons Gleichungen einen Term, der proportional zu v ist. deren Lösungen die allgemeine Lösung der homogenen Gleichung (mit g=0) plus eine spezielle Lösung sind (erhalten, indem man ins Unendliche geht, wenn dv/dt= 0). Lass es uns tun. Allgemeine Lösung für Ist .
Spezielle Lösung: oder Jetzt . Überprüfen: wie erwartet. Wie groß ist die Geschwindigkeit bei t=0?
Floris
Floris