资源描述
课程设计报告
一.题目
运载火箭运载性能分析
1. 总体参数
表 1 两种改进型的总体参数
状态
名称
一子级加长 1m(改进型 1)
二子级加长 1m(改进型 2)
第一级 第二级
第一级 第二级
有效载荷质量(kg)
3100
3100
起飞质量(kg)
200509 40713
200543 50995
关机点质量(kg)
51013 6943
61034 7344
有效推进剂质量比
0.7456 0.8295
0.69566 0.8560
发动机比冲(s)
289 296.13
289 296.13
推重比
1.417
1.417
有效推进剂质量(kg)
149496 33770
139509 43651
结构质量(kg)
10300 3843
10039 4244
发动机推力(N)
2786093 565711
2786565 708580
发动机秒流量(kg/s)
983.119 194.933
983.285 244.014
发动机工作时间(s)
152.063 173.239
141.881 178.887
参考面积
S = d 2 =8.81413m 2 ,其中 d = 3.35m ;
4
阻力系数
Cd= 0.2
2. 俯仰角的设计
z 改进型 1 程序角设计方案为:一子级从 90 度线性变化到 14 度,二子级从 14 度线性变 化到 2 度。
z 改进型 1 程序角设计方案为:一子级从 90 度线性变化到 18 度,二子级从 18 度线性变 化到 4 度。
二.所用到的计算公式
m dv =
dt
d
p − 0.5ρv2c
− mg sin θ
dx = v cosθ
dt
dy = v sin θ
dt
三.编程思想及框图
由于编程的目的是解决求解微分方程的解,所以可以采用计算方法里面的龙格库 塔求解法,或者欧拉求解法,我选用的是龙格库塔求解法,我的设计思想是这样的 主函数是解方程,另外建立火箭的模型,大气密度用函数计算,整合到 mian 函数中 进行解算,对比两种改进型的高度,速度及距离随时间的变化规律,作出判断。
大气密度模
块
龙格库塔积 分模块
火箭模型分 改进型一号 和改进型二 号及第一和 第二级
四.程序代码
//头文件 rocket3.h
//完成两种改进型火箭的弹道特性计算,作者:胡攀 最后修改:2008-12-23 19:30
#include "stdio.h"
#include "math.h"
#ifndef ROCKET_H
#define ROCKET_H
double ru(double h);
void kuta (int n, double t, double midu, double h, double* y, void Fct( double t, double midu, double* y, double* f));//龙格库塔积分函数
void Fct1(double t, double midu, double* y, double* f);
//改进型一号的第一级火箭模型
void Fct2(double t, double midu, double* y, double* f);
//改进型一号的第二级火箭模型
void Fct3(double t, double midu, double* y, double* f);
//改进型二号的第一级火箭模型
void Fct4(double t, double midu, double* y, double* f);
//改进型二号的第二级火箭模型
double ru(double h);
//大气密度函数
#endif
//主函数
#include<stdio.h>
#include<math.h>
#include"rocket3.h" void main()
{
//主函数中各变量定义 n 是模型状态量数 ,h 是步长,t 是时间,midu 为大气密度
int n,j;
double h,t,tf,midu;
double *y; FILE *fp;
printf("请输入积分步长 'h'.\n"); scanf("%lf",&h); printf("开始计算改进型一号的运载特性\n"); n=3;
y=new double[n]; fp=fopen("a.text","w"); y[0]=0;
y[1]=0; y[2]=0; tf=152.063; t=0; for(j=0;1;j++)
//改进型一号第一级火箭发动机
{
midu=ru(y[2]);
kuta(n, t,midu, h, y, Fct1);
t=h*j;
fprintf(fp,"%lf %lf %lf %lf\n",t,y[0],y[1],y[2]);
//写进文件 a.text if(t>=tf)
break;
}
printf(" 第一级火箭分离时,火箭速度 %lf m/s ,射程 %lf m,高度 %lf m\n",y[0],y[1],y[2]);
tf=173.239; t=0; for(j=0;1;j++)
//改进型一号第二级火箭发动机
{
midu=ru(y[2]);
kuta(n, t,midu, h, y, Fct2);
t=h*j;
if(t>=tf)
break;
fprintf(fp,"%lf %lf %lf %lf\n",t+152.063,y[0],y[1],y[2]);
//写进文件 a.text
}
printf(" 第二级火箭分离时,火箭速度 %lf m/s ,射程 %lf m,高度 %lf m\n",y[0],y[1],y[2]);
printf("开始计算改进型二号的运载特性\n");
fp=fopen("b.text","w");
y[0]=0; y[1]=0; y[2]=0; tf=141.881; t=0;
for(j=0;1;j++)
//改进型二号第一级火箭发动机
{
midu=ru(y[2]);
kuta(n, t,midu, h, y, Fct3);
t=h*j;
if(t>=tf)
break;
fprintf(fp,"%lf %lf %lf %lf\n",t,y[0],y[1],y[2]);
//写进文件 b.text
}
printf(" 第一级火箭分离时,火箭速度 %lf m/s ,射程 %lf m,高度 %lf m\n",y[0],y[1],y[2]);
tf=178.887; t=0; for(j=0;1;j++)
//改进型二号第二级火箭发动机
{
midu=ru(y[2]);
kuta(n, t,midu, h, y, Fct4);
t=h*j;
if(t>=tf)
break;
fprintf(fp,"%lf %lf %lf %lf\n",t+141.881,y[0],y[1],y[2]);
//写进文件 b.text
}
printf(" 第二级火箭分离时,火箭速度 %lf m/s ,射程 %lf m,高度 %lf m\n",y[0],y[1],y[2]);
//火箭各级的函数模型
#include"rocket3.h"
void Fct1( double t, double midu, double* y, double* f)
{
double m,p,Cd,d,s,g,g0,R,st,mf,tf;
Cd=0.2;//改进型一号 第一级火箭发动机
R=6378135; Cd=0.2; d=3.35; s=d*d/4; tf=152.063; g0=9.8; mf=983.119; p=2786093;
st=3.1415926/2-t*(76*3.1415926/180)/tf; m=200509-t*mf; g=g0*(R/(R+y[2]))*(R/(R+y[2]));
f[0]=(p-0.5*midu*y[0]*y[0]*Cd*s-m*g*sin(st))/m;
f[1]=y[0]*cos(st);
f[2]=y[0]*sin(st);
}
void Fct2( double t, double midu, double* y, double* f)
{
double m,p,Cd,d,s,g,g0,R,st,mf,tf;
Cd=0.2; //改进型一号 第二级火箭发动机
R=6378135; Cd=0.2; d=3.35; s=d*d/4;
tf=173.239; g0=9.8; mf=194.933; p=565711;
st=14*3.1415926/180-t*(12*3.1415926/180)/tf;
m=40713-t*mf;
g=g0*(R/(R+y[2]))*(R/(R+y[2]));
f[0]=(p-0.5*midu*y[0]*y[0]*Cd*s-m*g*sin(st))/m;
f[1]=y[0]*cos(st);
f[2]=y[0]*sin(st);
}
void Fct3( double t, double midu, double* y, double* f)
{
double m,p,Cd,d,s,g,g0,R,st,mf,tf;
Cd=0.2; //改进型二号 第一级火箭发动机
R=6378135; Cd=0.2; d=3.35; s=d*d/4; tf=141.881; g0=9.8; mf=983.285; p=2786565;
st=3.1415926/2-t*(72*3.1415926/180)/tf; m=200543-t*mf; g=g0*(R/(R+y[2]))*(R/(R+y[2]));
f[0]=(p-0.5*midu*y[0]*y[0]*Cd*s-m*g*sin(st))/m;
f[1]=y[0]*cos(st);
f[2]=y[0]*sin(st);
}
void Fct4( double t, double midu, double* y, double* f)
{
double m,p,Cd,d,s,g,g0,R,st,mf,tf;
Cd=0.2; //改进型二号 第二级火箭发动机
R=6378135; Cd=0.2; d=3.35; s=d*d/4; tf=178.887; g0=9.8; mf=244.014; p=708580;
st=18*3.1415926/180.0-t*(14*3.1415926/180)/tf;
m=50995-t*mf;
g=g0*(R/(R+y[2]))*(R/(R+y[2]));
f[0]=(p-0.5*midu*y[0]*y[0]*Cd*s-m*g*sin(st))/m;
f[1]=y[0]*cos(st);
f[2]=y[0]*sin(st);
}
}
#include"rocket3.h" double ru(double h)
{
double T,T0=288.15,ru,ru0=1.2495;
if (h>=0&&h<=11000)
{
T=(288.15-0.0065*h);
ru=ru0*pow((T/T0),4.25588);
}
else if(h>=11000&&h<=20000)
{
T=216.65;
ru=0.36392/pow(2.718281828459,(h-11000)/6341.62);
}
else if(h>=20000&&h<=32000)
{
T=(228.65+0.001*(h-20000));
ru=0.088035*pow(216.6/T,35.1632);
}
else if(h>=32000&&h<=47000)
{
T=228.65+0.0028*(h-32000);
ru=0.013225*pow(228.65/T,13.2011);
}
else if(h>=47000&&h<=51000)
{
T=270.65;
ru=0.00142754/pow(2.718281828459,((h-47000)/7922.27));
}
else if(h>=51000&&h<=71000)
{
T=270.65-0.0028*(h-51000);
ru=0.0008616*pow(T/270.65,11.2011);
}
else if(h>=71000&&h<=86000)
{
T=214.65-0.002*(h-71000);
ru=0.000064211*pow(T/214.65,16.0818);
}
else if(h>=86000)
ru=0;
return(ru);
}
#include "rocket3.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//n 为状态数,t 为时间,h 为步长,y 为状态指针
void kuta (int n, double t, double midu, double h, double* y, void Fct( double t, double midu, double* y, double* f))
{
int i;
double *f;
double k1,k2,k3,k4,k;
f=new double[n];
(*Fct)( t, midu, y, f);
for(i=0;i<n;i++)
{
k=y[i]; k1=f[i]; y[i]=y[i]+k1*h/2; (*Fct)( t, midu, y, f); k2=f[i]; y[i]=y[i]+k2*h/2; (*Fct)( t, midu, y, f); k3=f[i];
y[i]=y[i]+k3*h;
(*Fct)( t, midu, y, f);
k4=f[i];
y[i]=k+(k1+2*k2+2*k3+k4)*h/6;
}
}
五.结果 图片对比
从上面的图片对比中,我们可以很明白看出,改进型一的发动机工作完毕后速度大,而改进型 二的高度大,各有所长。
六课程设计编程体会
从这次的课程设计中,我还是学到了不少东西,比如努力的方向,要在航 天方面有所作为,需要学好的东西还有很多。编程的技巧还有很多,还有 C 语言中 的很多不常用的功能需要补充进知识体系。
针对的课程设计的这次作业,我感觉还是准备不够,虽然说程序自己编出来了, 但还是感觉不够令人满意,需要提高的地方还有很多!我也在努力完善。
展开阅读全文