Zurück zur Startseite

Ballistik-Modellierung mit Cx(M) und ρ(h) in Python

Der Artikel beschreibt die numerische Modellierung der Außenballistik unter Berücksichtigung der Cx-Abhängigkeit von der Mach-Zahl und der exponentiellen Luftdichte. Vollständiger Python-Code mit RK4 wird bereitgestellt, Simulationsergebnisse: 29 km Reichweite, 11.5 km Höhe.

RK4 für Ballistik: Cx aus Geschwindigkeit und ρ aus Höhe
Advertisement 728x90

Numerische Modellierung der äußeren Ballistik mit variabler Luftdichte

In Fortsetzung der Analyse von Problemen der äußeren Ballistik werden Fälle untersucht, bei denen der Luftwiderstandsbeiwert Cx von der Geschwindigkeit und die Luftdichte von der Höhe abhängen. Der vierte und fünfte Fall erfordern numerische Methoden, da eine analytische Lösung unmöglich ist. Der Flug eines Projektils wird mit den Anfangsparametern simuliert: Geschwindigkeit 600 m/s, Winkel 55°, Masse 50 kg.

Das Luftwiderstandsgesetz von 1943 definiert Cx als Funktion der Mach-Zahl M = v/a. Die Dichte ρ(h) wird durch eine exponentielle Abhängigkeit angenähert: ρ(h) = ρ₀ × exp(-h/H), wobei H = 8000 m die Skalenhöhe ist.

Abhängigkeit von Cx von der Mach-Zahl

Der Koeffizient Cx ist eine stückweise Funktion:

Google AdInline article slot
  • M ≤ 0,73: Cx = 0,157
  • 0,73 < M < 0,82: Cx = 0,033M + 0,133
  • 0,82 ≤ M < 0,91: Cx = 0,161 + 3,9(M - 0,823)²
  • 0,91 ≤ M < 1,00: Cx = 1,5M - 1,176
  • M ≥ 1,00: Cx = 0,384 - 1,6(M - 1,176)²

Die Widerstandskraft F = 0,5 ρ(h) v² S Cx (v/|v|), wobei S die Querschnittsfläche (0,01 m²) ist. Bewegungsgleichungen:

ẋ = vx

ẏ = vy

Google AdInline article slot

v̇x = -Fx/m

v̇y = -g - Fy/m

g = 9,81 m/s², a = 343 m/s.

Google AdInline article slot

Implementierung der numerischen Integration

Zur Lösung des Systems von ODEs wird die Runge-Kutta-Methode 4. Ordnung (RK4) angewendet. Integrationsschritt dt = 0,01 s, Endzeit t_end = 98,4 s.

Vollständiger Simulationscode in Python:

import numpy as np
import matplotlib.pyplot as plt

# Konstanten
g = 9.81  # m/s²
m = 50.0  # Körpermasse, kg
S = 0.01  # Querschnittsfläche, m²
rho0 = 1.225  # Luftdichte auf Meereshöhe, kg/m³
H = 8000  # Skalenhöhe, m
a = 343  # Schallgeschwindigkeit, m/s
v0 = 600  # Anfangsgeschwindigkeit, m/s
theta = np.radians(55)  # Anfangswinkel, rad
dt = 0.01  # Integrationsschritt, s
t_end = 98.4  # Endzeit, s

# Anfangsbedingungen
x, y = 0, 0
vx, vy = v0 * np.cos(theta), v0 * np.sin(theta)

# Arrays zur Speicherung der Ergebnisse
t = np.arange(0, t_end, dt)
X, Y = np.zeros_like(t), np.zeros_like(t)
VX, VY = np.zeros_like(t), np.zeros_like(t)


# Funktion zur Berechnung von cx(M)
def cx(M):
    if M <= 0.73:
        return 0.157
    elif M < 0.82:
        return 0.033 * M + 0.133
    elif M < 0.91:
        return 0.161 + 3.9 * (M - 0.823) ** 2
    elif M < 1.00:
        return 1.5 * M - 1.176
    else:
        return 0.384 - 1.6 * (M - 1.176) ** 2


# Luftdichtefunktion
def rho(h):
    return rho0 * np.exp(-h / H)


# System von ODEs
def f(state, t):
    x, y, vx, vy = state
    v = np.sqrt(vx ** 2 + vy ** 2)
    M = v / a
    rho_h = rho(y)
    cx_val = cx(M)

    Fx = 0.5 * rho_h * v ** 2 * S * cx_val * vx / v
    Fy = 0.5 * rho_h * v ** 2 * S * cx_val * vy / v

    dxdt = vx
    dydt = vy
    dvxdt = -Fx / m
    dvydt = -g - Fy / m

    return np.array([dxdt, dydt, dvxdt, dvydt])


# Runge-Kutta-Methode 4. Ordnung
def rk4_step(state, t, dt):
    k1 = dt * f(state, t)
    k2 = dt * f(state + 0.5 * k1, t + 0.5 * dt)
    k3 = dt * f(state + 0.5 * k2, t + 0.5 * dt)
    k4 = dt * f(state + k3, t + dt)
    return state + (k1 + 2 * k2 + 2 * k3 + k4) / 6


# Integration
state = np.array([x, y, vx, vy])
for i, t_val in enumerate(t):
    X[i], Y[i], VX[i], VY[i] = state
    state = rk4_step(state, t_val, dt)

# Visualisierung
plt.figure(figsize=(10, 6))
plt.plot(X, Y, label='Flugbahn')
plt.xlabel('X, m')
plt.ylabel('Y, m')
plt.title('Flugbahn des Körpers')
plt.grid(True)
plt.legend()
plt.show()

# Ausgabe der Ergebnisse
print(f"Flugweite: {X[-1]:.2f} m")
print(f"Maximale Höhe: {np.max(Y):.2f} m")

Simulationsergebnisse

Flugweite: 29 km. Maximale Höhe: 11,5 km. Die Flugbahn berücksichtigt den Übergang durch Überschallgeschwindigkeiten und die Luftverdünnung in der Höhe.

Wichtige Annahmen:

  • Exponentielles Dichtemodell (vereinfacht; die reale Atmosphäre erfordert genauere Profile).
  • Quadratischer Luftwiderstand ohne Berücksichtigung anderer Effekte (Drall, Wind).

| Parameter | Wert |

|-----------|-------|

| Flugweite | 29.000 m |

| Max. Höhe | 11.500 m |

| Flugzeit | 98,4 s |

| Anfangsgeschwindigkeit | 600 m/s |

Wichtige Erkenntnisse

  • Numerische Methoden sind unerlässlich für realistische Modelle mit variablem Cx(M) und ρ(h).
  • RK4 gewährleistet Genauigkeit mit dt=0,01 s für ballistische Aufgaben.
  • Das Gesetz von 1943 modelliert den transsonischen Bereich (M≈0,8–1,0) genau.
  • Exponentielle ρ(h) bietet eine sinnvolle Näherung bis 15 km.

— Editorial Team

Advertisement 728x90

Weiterlesen