Quadratische Drag-Projektilbewegung

Ich habe Formeln mit 1-dimensionaler Bahnbewegung (freier Fall) einschließlich quadratischem Widerstand berechnet und die folgenden Gleichungen erstellt.Formel ist erstellt

Diese Bewegungsgleichungen sind für sich genommen nicht von großem Nutzen, daher möchte ich entweder eine analytische Methode / eine numerische Methode, um die zweidimensionale Projektilbewegung in einem Diagramm y gegen x darzustellen. Mir ist jedoch bewusst, dass die Bewegungsgleichungen für zweidimensionale Projektile die folgenden sind:

M A X = k v X 2 + v j 2 v X
M A j = M G k v X 2 + v j 2 v j
Ich habe festgestellt, dass es aufgrund der Formeln mit Zirkelbezug keine allgemeine Lösung gibt, daher gibt es keine analytische Methode zum Zeichnen dieses Diagramms, da der Widerstand in x-Richtung das Projektil verlangsamt und den Widerstand ändert sowohl in y-Richtung als auch umgekehrt.

Daher kenne ich hier die Herangehensweise an das Problem nicht, ich bin mit numerischen Methoden zum Lösen von Gleichungen nicht sehr vertraut. Gibt es eine Möglichkeit, dies in einer Tabellenkalkulation oder in MATLAB zu tun und dabei ein hohes Maß an Genauigkeit beizubehalten (wenn möglich, mit RK4).

Hinweis: Die x-Geschwindigkeit ist auf der rechten Seite orientiert und die y-Geschwindigkeit direkt nach oben.

Bitte korrigieren Sie mich, wenn ich Fehler gemacht habe.

Der quadratische 2D-Widerstand wurde auch in diesem Phys.SE-Beitrag und den darin enthaltenen Links berücksichtigt.
Ich schlage vor, auf velocity verletund verlet velocityauf dieser Seite zu suchen. Es gibt viele Antworten, die darüber sprechen, und es ist viel einfacher zu implementieren als RK4. Wikipedia hat auch Infos dazu.

Antworten (1)

Sie haben im Grunde zwei ODEs zu lösen:

(1) D v μ D T = 1 M F ( X μ , v μ ) (2) D X μ D T = v μ
was für die meisten Kräfte in der Newtonschen Mechanik so ziemlich der Fall ist. Um dies numerisch zu lösen, wollen Sie Raum & Zeit diskretisieren . Mit einem solchen System wie (1) & (2) müssen wir uns wirklich nur Gedanken über die Aufteilung der Zeit machen.

Eine der stabileren Routinen ist eigentlich nicht RK4, sondern eine Variation der Leapfrog-Integration namens Velocity verlet . Dies macht (1) & (2) zu einem mehrstufigen Prozess:

A 1 μ = F ( X ich μ ) / M X ich + 1 μ = X ich μ + ( v ich + 1 2 A 1 μ Δ T ) Δ T A 2 μ = F ( X ich + 1 μ ) / M v ich + 1 μ = v ich μ + 1 2 ( A 1 μ + A 2 μ ) Δ T
was eigentlich ziemlich einfach numerisch zu implementieren ist, es ruft buchstäblich nur die Funktion für die Kraft auf und aktualisiert dann ein paar Arrays ( x,y,vx,vy).

Wo sich Ihr Problem unterscheidet, ist das A μ = A μ ( X μ , v μ ) , was die Berechnung der zweiten Beschleunigung etwas schwierig macht A 2 kommt drauf an v ich + 1 μ und umgekehrt. Diese Antwort bei GameDev (auf jeden Fall lesenswert für einige numerische Aspekte des Problems) legt nahe, dass Sie den folgenden Algorithmus verwenden können

A 1 μ = F ( X ich μ , v ich μ ) / M X ich + 1 μ = X ich μ + ( v ich + 1 2 A 1 μ Δ T ) Δ T v ich + 1 μ = v ich μ + 1 2 A 1 μ Δ T A 2 μ = F ( X ich + 1 μ , v ich + 1 μ ) / M v ich + 1 μ = v ich μ + 1 2 ( A 2 μ A 1 μ ) Δ T
obwohl der Autor dieses Beitrags sagt,

Es ist nicht ganz so genau wie Runge-Kutta vierter Ordnung (wie man es von einer Methode zweiter Ordnung erwarten würde), aber es ist viel besser als Euler oder naive Geschwindigkeit Verlet ohne die Zwischengeschwindigkeitsschätzung und behält immer noch die symplektische Eigenschaft von normal Geschwindigkeits-Verlet für konservative, nicht geschwindigkeitsabhängige Kräfte.

Da dies eine Projektilbewegung ist, X = j = 0 ist wahrscheinlich eine natürliche Wahl für Anfangsbedingungen, mit v j = v 0 Sünde ( θ ) Und v X = v 0 cos ( θ ) wie es normal ist.

Schauen Sie sich auch Yoshidas Variante von Leapfrog an ; Der artcompsci-Link im Abschnitt „Referenzen“ auf der Wikipedia-Seite zeigt, wie Versionen höherer Ordnung erstellt werden, die einfach in Code zu implementieren sind.