本文包含AI生成内容,并经过作者严格考据审查,作者对AI生成内容的品质和可靠性负责。
所有教程由网友发布,仅供参考,请谨慎采纳。科创不对教程的科学性、准确性、可靠性负责。
零维内弹道方程龙格-库塔法
HSH2025/03/08原创 喷气推进 IP:山西
中文摘要
零维内弹道模型是一种简化的内弹道分析方法,假设燃烧过程在空间上是均匀的,仅随时间变化,忽略气体流动的空间梯度。该模型通常用于描述封闭空间内(如枪膛或火箭发动机燃烧室)的燃烧过程,核心方程包括质量守恒、能量守恒和状态方程。龙格-库塔法是一种数值求解常微分方程(ODEs)的方法,其中四阶龙格-库塔法(RK4)因其高精度和稳定性而被广泛应用。RK4通过计算多个中间点的斜率,加权平均后得到更精确的解,适用于求解复杂的非线性微分方程,如零维内弹道方程。  
Abstract
A zero-dimensional internal ballistics model is a simplified approach to analyze internal ballistics, assuming that the combustion process is spatially uniform and varies only with time, ignoring spatial gradients in gas flow. This model is commonly used to describe combustion processes in confined spaces (e.g., gun barrels or rocket engine chambers), with core equations including mass conservation, energy conservation, and the equation of state. The Runge-Kutta method is a numerical technique for solving ordinary differential equations (ODEs). The fourth-order Runge-Kutta method (RK4) is widely used due to its high accuracy and stability. RK4 calculates multiple intermediate slopes and combines them through weighted averaging to achieve a more accurate solution, making it suitable for solving complex nonlinear differential equations, such as zero-dimensional internal ballistics equations.
关键词
固体火箭内弹道学方程可以简画出曲线图

今日我们便以固体火箭发动机内弹道学的零维内弹道方程龙格库塔法进行最简单的陈述。首先我先声明一下,本帖有编程计算和手动计算两种形式,让我们先了一解一下零维内弹道方程:零维内弹道方程描述燃烧室内压力随时间变化,忽略空间分布,仅考虑时间变量。常用于分析火箭发动机或火炮的内弹道过程,通过燃烧释放热量和气体膨胀计算压力变化。再介绍一下龙格库塔法:龙格法(龙格-库塔法)是一种数值求解微分方程的方法,通过多步加权计算提高精度,尤其四阶龙格-库塔法广泛用于科学计算和工程仿真。


第一步:零维内弹道方程的主要构成。
零维内弹道方程是描述燃烧室内压力随时间变化的数学模型,通常用于分析火箭发动机或火炮的内弹道过程。龙格-库塔法(Runge-Kutta method)是一种数值求解微分方程的方法,适用于求解零维内弹道方程。

upload_downloader_1741422440468_81680776.jpeg

  • P是燃烧室压力

  • t是时间

  • Y是比热比

  • V是燃烧室体积

如果将V设为常数,便可简化式子为:

upload_downloader_1741422440173_30331025.jpeg

第二步:龙格库塔法
零维内弹道方程是描述燃烧室内压力随时间变化的数学模型,通常用于分析火箭发动机或火炮的内弹道过程。龙格-库塔法(Runge-Kutta method)是一种数值求解微分方程的方法,适用于求解零维内弹道方程。龙格-库塔法是一种数值积分方法,用于求解微分方程。对于方程:

1741433056257.png

四阶龙格-库塔法的迭代公式为

upload_downloader_1741422441173_68310175.jpeg

其中:

upload_downloader_1741422443858_58230224.jpeg


第三步:手绘气压随时间变化曲线
1. 初始化参数
   - 初始压力
   - 时间步长
   - 总时间
   - 燃烧释放的热量速率
   - 燃烧室体积
   - 比热比
2、迭代计算
3、绘图

第四步:编程代码
如下:

import numpy as np
import matplotlib.pyplot as plt

# 定义零维内弹道方程
def dPdt(P, t, gamma, V, Q_dot):
    return (gamma - 1) / V * Q_dot

# 四阶龙格-库塔法
def runge_kutta_4th_order(P0, t, h, gamma, V, Q_dot):
    P = np.zeros(len(t))
    P[0] = P0
    for i in range(1, len(t)):
        k1 = h * dPdt(P[i-1], t[i-1], gamma, V, Q_dot)
        k2 = h * dPdt(P[i-1] + 0.5 * k1, t[i-1] + 0.5 * h, gamma, V, Q_dot)
        k3 = h * dPdt(P[i-1] + 0.5 * k2, t[i-1] + 0.5 * h, gamma, V, Q_dot)
        k4 = h * dPdt(P[i-1] + k3, t[i-1] + h, gamma, V, Q_dot)
        P = P[i-1] + (k1 + 2*k2 + 2*k3 + k4) / 6
    return P

# 参数设置
P0 = 0.0  # 初始压力 (Pa)
gamma = 1.4  # 比热比
V = 1.0  # 燃烧室体积 (m³)
Q_dot = 1000  # 燃烧释放热量速率 (J/s)
t_end = 10  # 总时间 (s)
h = 0.1  # 时间步长 (s)

# 时间数组
t = np.arange(0, t_end + h, h)

# 计算压力随时间变化
P = runge_kutta_4th_order(P0, t, h, gamma, V, Q_dot)

# 绘制气压随时间变化曲线
plt.plot(t, P, label="Pressure (Pa)")
plt.xlabel("Time (s)")
plt.ylabel("Pressure (Pa)")
plt.title("Pressure vs Time in Zero-Dimensional Interior Ballistics")
plt.grid()
plt.legend()
plt.show()



第五步:实例

1741483466020.png

upload_downloader_1741422442978_41096120.jpeg

第六步:全部计算

题目

1741581483248.png

IMG_20250309_215318.jpg

第七步:燃烧时间曲线结合计算法

手算方式

upload_downloader_1741422442783_32755835.jpeg

代码

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
d = 88e-3  # 装药内径 (m)
D = 106e-3  # 装药外径 (m)
L = 200e-3  # 装药长度 (m)
rho_p = 1775  # 装药密度 (kg/m^3)
V_c = 0.0079  # 燃烧室初始自由容积 (m^3)
r_gas = 1.2  # 燃气比热比
c_star = 1500  # 燃气特征速度 (m/s)
d_t = 17e-3  # 喷喉直径 (m)
p_c_t = 1.5e6  # 点火压强 (Pa)
p_a = 0.098e6  # 环境压强 (Pa)
T_c = 3260  # 燃烧温度 (K)
burn_rate_coeff = 8.3e-5  # 燃速系数
burn_rate_exp = 0.3  # 燃速指数

# 计算装药燃烧厚度
e = (D - d) / 2

# 燃速公式
def burn_rate(p_c):
    return burn_rate_coeff * p_c ** burn_rate_exp

# 燃烧时间计算
def burn_time(p_c):
    return e / burn_rate(p_c)

# 零维内弹道方程
def dpcdt(p_c, t):
    if t <= burn_time(p_c):  # 燃烧阶段
        m_dot_p = burn_rate(p_c) * rho_p * np.pi * (D**2 - d**2) / 4 * L
    else:  # 燃烧结束,停止产生燃气
        m_dot_p = 0
    A_t = np.pi * (d_t / 2)**2  # 喷喉面积
    m_dot_g = p_c * A_t / (c_star * np.sqrt(T_c))  # 喷喉质量流量
    return (r_gas - 1) / V_c * (m_dot_p - m_dot_g)

# 四阶龙格-库塔法
def runge_kutta_4th_order(p_c0, t, h):
    p_c = np.zeros(len(t))
    p_c[0] = p_c0
    for i in range(1, len(t)):
        k1 = h * dpcdt(p_c[i-1], t[i-1])
        k2 = h * dpcdt(p_c[i-1] + 0.5 * k1, t[i-1] + 0.5 * h)
        k3 = h * dpcdt(p_c[i-1] + 0.5 * k2, t[i-1] + 0.5 * h)
        k4 = h * dpcdt(p_c[i-1] + k3, t[i-1] + h)
        p_c = p_c[i-1] + (k1 + 2*k2 + 2*k3 + k4) / 6
    return p_c

# 时间数组
t_end = 20  # 总时间 (s),确保覆盖燃烧和排气阶段
h = 0.01  # 时间步长 (s)
t = np.arange(0, t_end, h)

# 计算燃烧室压强随时间变化
p_c = runge_kutta_4th_order(p_c_t, t, h)

# 绘制燃烧室压强随时间变化曲线
plt.plot(t, p_c / 1e6, label="Chamber Pressure (MPa)")
plt.xlabel("Time (s)")
plt.ylabel("Pressure (MPa)")
plt.title("Chamber Pressure vs Time")
plt.grid()

见谅,望对大家有用

注:全部本人原创


[修改于 5天12时前 - 2025/03/23 11:27:05]

来自:航空航天 / 喷气推进包含人工智能产物:作者对AI生成内容负责严肃内容:教程/课程
6
5
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
HSH 作者
19天9时前 IP:山西
942542

大家说说话吧1f602


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
虎哥
18天14时前 IP:四川
942559
引用HSH发表于1楼的内容
大家说说话吧

第六步呢


引用
评论(3)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
HSH作者
17天11时前 IP:山西
942580

等我以后有时间用代码把图发出来


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
HSH作者
16天11时前 IP:山西
942601

等我以后有时间用代码把图发出来


引用
评论
2
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
THW
7天8时前 IP:山西
942825

厉害👍


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
HSH
进士 机友
文章
17
回复
73
学术分
0
2025/01/19注册,2时0分前活动

一个心怀壮志的人,一个爱国的人 SpaceX的信服者和心怀颠复者 相信每一个拥有星辰大海的人 柳暗花明终将来临 Star pass的始创者 国际火箭发射栏主 浪箭航天研究所管理员

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:山西
新版本公告
20天4时前
简单易读变化
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的