一.题目
运载火箭运载性能分析 1. 总体参数
表 1 两种改进型的总体参数 状态 名称 有效载荷质量(kg) 起飞质量(kg) 关机点质量(kg) 有效推进剂质量比 发动机比冲(s) 推重比 有效推进剂质量(kg) 结构质量(kg) 发动机推力(N) 发动机秒流量(kg/s) 发动机工作时间(s) 参考面积 阻力系数 2. 俯仰角的设计 一子级加长 1m(改进型 1) 第一级 3100 200509 51013 0.7456 289 1.417 149496 10300 2786093 983.119 152.063 33770 3843 565711 194.933 173.239
2
二子级加长 1m(改进型 2) 第一级 3100 第二级
第二级
40713 6943 0.8295 296.13
200543 50995 61034 7344
0.69566 0.8560 289 1.417 139509 10039 2786565 983.285 141.881 43651 4244 708580 244.014 178.887 296.13
S=d
2
4
=8.81413m ,其中 d = 3.35m ;
Cd= 0.2
改进型 1 程序角设计方案为:一子级从 90 度线性变化到 14 度,二子级从 14 度线性变 化到 2 度. 改进型 1 程序角设计方案为:一子级从 90 度线性变化到 18 度,二子级从 18 度线性变 化到 4 度.
二.所用到的计算公式
m
dv = p 0.5 ρ v 2 cd mg sin θ dt 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));//龙格库塔积分函数 t, double midu, double* y, double* f); void Fct1(double //改进型一号的第一级火箭模型 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 //大气密度函数 #endif //主函数
ru(double
h);
#include #include #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&&h=20000&&h=32000&&h=47000&&h=51000&&h=71000&&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
从上面的图片对比中,我们可以很明白看出,改进型一的发动机工作完毕后速度大,而改进型 二的高度大,各有所长. 六课程设计编程体会
从这次的课程设计中,我还是学到了不少东西,比如努力的方向,要在航 天方面有所作为,需要学好的东西还有很多.编程的技巧还有很多,还有 C 语言中 的很多不常用的功能需要补充进知识体系. 针对的课程设计的这次作业,我感觉还是准备不够,虽然说程序自己编出来了, 但还是感觉不够令人满意,需要提高的地方还有很多!我也在努力完善.