Datei:Water-rocket-altitude-graph.svg
aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen
Zur Suche springen
Größe der PNG-Vorschau dieser SVG-Datei: 450 × 320 Pixel. Weitere aus SVG automatisch erzeugte PNG-Grafiken in verschiedenen Auflösungen: 320 × 228 Pixel | 640 × 455 Pixel | 1.024 × 728 Pixel | 1.280 × 910 Pixel | 2.560 × 1.820 Pixel
Originaldatei (SVG-Datei, Basisgröße: 450 × 320 Pixel, Dateigröße: 43 KB)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
Beschreibung
BeschreibungWater-rocket-altitude-graph.svg |
English: Computed maximum altitude of a water rocket vs. initial water volume fraction, for various initial air pressures from 2 to 5 bar. The plot was computed by numerically solving the initial value problem using Scipy solve_ivp. |
Datum | |
Quelle | Eigenes Werk |
Urheber | Geek3 |
SVG‑Erstellung InfoField | Dieser Plot wurde mit Matplotlib erstellt. |
Quelltext InfoField | Python code#! /usr/bin/env python3
# -*- coding:utf8 -*-
import matplotlib.pyplot as plt
import numpy as np
from scipy.integrate import solve_ivp
from math import *
plt.style.use('classic')
plt.rcParams['font.sans-serif'] = 'DejaVu Sans'
plt.rcParams['mathtext.default'] = 'regular'
plt.rcParams['lines.linewidth'] = 2.4
m_bottle = 0.08 # kg
g = 9.81 # m/s**2
V_bottle = 1e-3 # m**3
rho_water = 1e3 # density of water
rho_air = 1.2e0 # density of air
p_atm = 1e5 # one bar in pascal
gamma_air = 1.4 # https://en.wikipedia.org/wiki/Heat_capacity_ratio
A_rocket = 5e-3 # m**2
A_nozzle = 3.8e-4 # m**2
c_drag = 0.35 # https://doi.org/10.1088/0143-0807/30/5/012
def trajectory(frac_water, tt):
# numerical calculation of a vertical water rocket trajectory
# considers the mass of air.
V0_air = V_bottle * (1. - frac_water)
m0_water = V_bottle * frac_water * rho_water
m0_air = V0_air * rho_air * (1. + p0 / p_atm)
p1 = (p0 + p_atm) * (V0_air / V_bottle) ** gamma_air - p_atm
def dif(t, vec):
y, vy, m_water, m_air = vec
m_water = max(0., m_water)
V_water = m_water / rho_water
V_air = V_bottle - V_water
v_jet = 0.
mass_rate = 0.
mass_rate_air = 0.
if V_air > 0.:
if m_water > 0.:
# water expulsion. adiabatic pressure change of air
p = (p0 + p_atm) * (V0_air / V_air) ** gamma_air - p_atm
if p >= 0.:
v_jet = sqrt(2. * p / rho_water) # Bernoulli's equation
mass_rate = rho_water * A_nozzle * v_jet
else:
# adiabatic expansion inside the bottle
p = (p1 + p_atm) * (m_air / m0_air) ** gamma_air - p_atm
if p > 0.:
rho_air_bottle = m_air / V_bottle
# air is expanded to atmospheric pressure
# use Bernoulli for compressible fluid
rho_air_jet = rho_air_bottle * (p_atm/(p_atm+p)) ** (1./gamma_air)
v_jet = sqrt(2. / (1 - 1/gamma_air) *
((p+p_atm)/rho_air_bottle - p_atm/rho_air_jet))
mass_rate_air = rho_air_jet * A_nozzle * v_jet
m = m_bottle + m_water + m_air - V_bottle * rho_air
acc = -g
# add thrust force
acc += (mass_rate + mass_rate_air) * v_jet / m
# add drag force of atmosphere
acc -= 0.5 * rho_air * vy * fabs(vy) * c_drag * A_rocket / m
# introduce damping force close to ground
y0 = 0.1
if y < y0:
omega = sqrt(g / y0)
acc_damped = -2.*omega*vy - omega**2 * y
acc = max(acc, acc_damped)
if y > 0. and vy < 0. and vy**2 >= 2 * y * g:
acc = max(acc, 0.5 * vy**2 / y)
return [vy, acc, -mass_rate, -mass_rate_air]
# solve the differential equation numerically
# use a the vector function vec = [y, vy, m_water, m_air]
sol = solve_ivp(dif, [0., max(tt)], [0., 0., m0_water, m0_air],
t_eval=tt, method='RK23', atol=1e-7, max_step=0.1)
# return y(tt), vy(tt), m_water(tt) and m_air(tt)
return sol.y[0,:], sol.y[1,:], sol.y[2,:], sol.y[3,:]
fig = plt.figure(figsize=(450 / 90.0, 320 / 90.0), dpi=72)
fig.gca().set_position([0.12, 0.15, 0.77, 0.76])
fig.gca().set_prop_cycle(color=['#0072bd', '#d95319', '#edb120', '#7e2f8e'])
m_array = np.linspace(0., 1., 201)
def hmax(mw):
tarr = np.linspace(0., 10., 41)
yarr, varr, marr, marr_air = trajectory(mw, tarr)
imax = np.argmax(yarr)
h_max = yarr[imax] + varr[imax]**2 * 0.5 / g
return h_max
p0 = 5e5
h_array = [hmax(mw) for mw in m_array]
plt.plot(m_array*100, h_array, label=r'$p_0 = 5$ bar')
p0 = 4e5
h_array = [hmax(mw) for mw in m_array]
plt.plot(m_array*100, h_array, label=r'$p_0 = 4$ bar')
p0 = 3e5
h_array = [hmax(mw) for mw in m_array]
plt.plot(m_array*100, h_array, label=r'$p_0 = 3$ bar')
p0 = 2e5
h_array = [hmax(mw) for mw in m_array]
plt.plot(m_array*100, h_array, label=r'$p_0 = 2$ bar')
plt.grid(True)
plt.xlim(0)
plt.ylim(0)
plt.xlabel('water volume [%]')
plt.ylabel(r'peak altitude [m]')
plt.title('1 liter water rocket')
plt.legend(loc='upper right', handletextpad=0.4, bbox_to_anchor=(1.14, 1.01))
plt.savefig('Water-rocket-altitude-graph.svg')
|
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
Diese Datei ist lizenziert unter der Creative-Commons-Lizenz „Namensnennung – Weitergabe unter gleichen Bedingungen 4.0 international“.
- Dieses Werk darf von dir
- verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
- neu zusammengestellt werden – abgewandelt und bearbeitet werden
- Zu den folgenden Bedingungen:
- Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
- Weitergabe unter gleichen Bedingungen – Wenn du das Material wiedermischst, transformierst oder darauf aufbaust, musst du deine Beiträge unter der gleichen oder einer kompatiblen Lizenz wie das Original verbreiten.
In dieser Datei abgebildete Objekte
Motiv
Einige Werte ohne einen Wikidata-Eintrag
image/svg+xml
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 00:35, 6. Dez. 2019 | 450 × 320 (43 KB) | Geek3 | now considering the finite mass of air for thrust and drag | |
14:17, 7. Jun. 2019 | 450 × 320 (43 KB) | Geek3 | increased nozzle area | ||
01:52, 7. Jun. 2019 | 450 × 320 (44 KB) | Geek3 | x-axis | ||
01:40, 7. Jun. 2019 | 450 × 320 (45 KB) | Geek3 | User created page with UploadWizard |
Dateiverwendung
Die folgende Seite verwendet diese Datei:
Globale Dateiverwendung
Die nachfolgenden anderen Wikis verwenden diese Datei:
- Verwendung auf uk.wikipedia.org
Metadaten
Diese Datei enthält weitere Informationen (beispielsweise Exif-Metadaten), die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.
Breite | 360pt |
---|---|
Höhe | 256pt |