Файл:Water-rocket-altitude-graph.svg
Розмір цього попереднього перегляду PNG для вихідного SVG-файлу: 450 × 320 пікселів. Інші роздільності: 320 × 228 пікселів | 640 × 455 пікселів | 1024 × 728 пікселів | 1280 × 910 пікселів | 2560 × 1820 пікселів.
Повна роздільність (SVG-файл, номінально 450 × 320 пікселів, розмір файлу: 43 КБ)
Відомості про цей файл містяться на Вікісховищі — централізованому сховищі вільних файлів мультимедіа для використання у проектах Фонду Вікімедіа. |
Опис файлу
ОписWater-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. |
Час створення | |
Джерело | Власна робота |
Автор | Geek3 |
SVG розвиток InfoField | Вихідний код цього SVG-файлу правильний. Це векторне зображення було створено з допомогою Matplotlib |
Сирцевий код 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')
|
Ліцензування
Я, власник авторських прав на цей твір, добровільно публікую його на умовах такої ліцензії:
Цей файл ліцензований на умовах Creative Commons Із зазначенням автора - Розповсюдження на тих самих умовах 4.0 Міжнародна
- Ви можете вільно:
- ділитися – копіювати, поширювати і передавати твір
- модифікувати – переробляти твір
- При дотриманні таких умов:
- зазначення авторства – Ви повинні вказати авторство, надати посилання на ліцензію і вказати, чи якісь зміни було внесено до оригінального твору. Ви можете зробити це в будь-який розсудливий спосіб, але так, щоб він жодним чином не натякав на те, наче ліцензіар підтримує Вас чи Ваш спосіб використання твору.
- поширення на тих же умовах – Якщо ви змінюєте, перетворюєте або створюєте іншу похідну роботу на основі цього твору, ви можете поширювати отриманий у результаті твір тільки на умовах такої ж або сумісної ліцензії.
Об'єкти, показані на цьому файлі
зображує
Якесь значення без елемента на сайті Вікідані
7 червня 2019
image/svg+xml
Історія файлу
Клацніть на дату/час, щоб переглянути, як тоді виглядав файл.
Дата/час | Мініатюра | Розмір об'єкта | Користувач | Коментар | |
---|---|---|---|---|---|
поточний | 22:35, 5 грудня 2019 | 450 × 320 (43 КБ) | Geek3 | now considering the finite mass of air for thrust and drag | |
12:17, 7 червня 2019 | 450 × 320 (43 КБ) | Geek3 | increased nozzle area | ||
23:52, 6 червня 2019 | 450 × 320 (44 КБ) | Geek3 | x-axis | ||
23:40, 6 червня 2019 | 450 × 320 (45 КБ) | Geek3 | User created page with UploadWizard |
Використання файлу
Така сторінка використовує цей файл:
Глобальне використання файлу
Цей файл використовують такі інші вікі:
- Використання в de.wikipedia.org
Метадані
Файл містить додаткові дані, які зазвичай додаються цифровими камерами чи сканерами. Якщо файл редагувався після створення, то деякі параметри можуть не відповідати цьому зображенню.
Ширина | 360pt |
---|---|
Висота | 256pt |