内弹道程序报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
内弹道程序报告
姓名:
学号:
专业:武器发射工程
学院:能源与动力工程学院
指导教师:***
1.程序功能
对于一般的内弹道方程组,微分方程是非线性的,编制通过数值解法进行求解的程序。
2.设计思路和整体方案
(1)输入已知的数据,包括火炮构造,弹丸诸元,装药条件,起始条件,步长等参数。
(2)进行一些常量的计算,方便在程序中进行使用。
(3)计算内弹道方程中变量的初值。
(4)将内弹道方程组进行量纲化,然后使用龙格库塔法计算微分方程,包括最大压力搜索和特征点判断,得出各个过程的数
据。
(5)将程序输出成表格和曲线。
3.程序遇到的主要问题和解决方案
(1)在程序中首先要编制一个四阶的龙格库塔子函数,同时还要编制一个微分方程右端子函数。在龙格库塔子函数编制过程中借鉴了之前导弹运动弹道程序的编制。
void rk(n, h)
int n;
double h;
{
extern void dery();
double a[4], old_y[6], Y1[6], *dy;
int i, j;
dy = calloc(n, sizeof(double));
a[0] = a[1] = h / 2;
a[2] = a[3] = h;
dery(n, dy, Y);
for (i = 0; i < n; i++)
old_y[i] = Y[i];
for (j = 0; j < 3; j++)
{
for (i = 0; i < n; i++)
{
Y1[i] = old_y[i] + a[j] * dy[i];
Y[i] = Y[i] + a[j + 1] * dy[i] / 3;
}
dery(n, dy, Y1);
}
for (i = 0; i < n; i++)
Y[i] = Y[i] + a[0] * dy[i] / 3;
free(dy);
return;
}
(2)在最大压力点的判断上也出现了问题,为了判断最大压力点设置三个数组分别记录三组数据,当第二组的压强大于第一和第三组的
压强时,那最大压强点就在第二组附近,然后减小步长进行精确的计算。
do {
t[0] = Y[0]; kesai[0] = Y[1]; z[0] = Y[2]; l[0] = Y[3]; v[0] = Y[4]; p[0] = Y[5];
ta = t[0]; kesaia = kesai[0]; za = z[0]; la = l[0]; va = v[0]; pa = p[0];
t[0] = t[1]; v[0] = v[1]; p[0] = p[1]; kesai[0] = kesai[1]; z[0] = z[1]; l[0] = l[1];
t[1] = ta; v[1] = va; p[1] = pa; kesai[1] = kesaia; z[1] = za; l[1] = la;
rk(6, 0.005);
t[2] = Y[0]; kesai[2] = Y[1]; z[2] = Y[2]; l[2] = Y[3]; v[2] = Y[4]; p[2] = Y[5];
if (p[2] < p[1]) //寻找最大压强点
break;
result();
} while (Y[3]* lo<= 3.624);
4.程序图像和分析
p-t图像
p-l图像
v-t图像
v-l图像
图像分析:最后输出的四个图像与书上实验得出的很相似,P不断增
大达到最大值308MPa,与实验结果相差不大,然后不断减。其他数据也变化正常,例如ψ和Z都是不断增大然后分别达到 1.0000和1.4434.。