嗨,我们应该为最终项目在c ++中为火箭的高度和速度建模。让用户输入他们希望测量的飞行中各点的总飞行时间和增量时间。以下是我为该项目编写的代码。假定速度开始为正,并且在60秒后,此时没有剩余燃料,因此没有推力,速度应开始变为负。但是,我的身高和速度从一开始都是负数,到最后达到无限负数。
#include <iostream>
using namespace std;
int main()
{
float *v;
float *h;
float a;
double mass=0.0, thrust, time, dt;
double g = 32.2;
double K = 0.008;
cout << "enter time";
cin >> time;
cout << "enter dt";
cin >> dt;
a = (time/dt);
v = new float[a];
h = new float[a];
v[0] = 0;
h[0] = 0;
float tt = 0;
// for loop to calculate velocity and time
for(int i = 0; i <= (time/dt) ; i++)
{
tt = dt + tt;
if( tt <= 60)
{
mass = (3000-(40*tt)/g);
thrust = 7000;
}
if ( tt > 60)
{
mass = 3000/g;
thrust = 0;
}
// these are the formulas for velocity and height position our prof gave us
v[i+1] = v[i] - (K/mass)*v[i]*v[i-1] * dt + (thrust/mass - g)*dt;
h[i+1] = v[i+1] * dt + h[i];
}
// for loop to output
for(int i = 0; i <= (time/dt); i++)
{
cout << i << " - " << "Velocity:" << v[i+1] << " Position:" << h[i+1] <<endl;
}
return 0;
}
样本输出:
enter time120
enter dt.01
0 - Velocity:-0.298667 Position:-0.00298667
1 - Velocity:-0.597333 Position:-0.00896
2 - Velocity:-0.895999 Position:-0.01792
3 - Velocity:-1.19467 Position:-0.0298666
4 - Velocity:-1.49333 Position:-0.0448
5 - Velocity:-1.792 Position:-0.0627199
6 - Velocity:-2.09066 Position:-0.0836266
7 - Velocity:-2.38933 Position:-0.10752
<...i left out a lot of numbers in the middle to not make this post too long...>
11994 - Velocity:-inf Position:-inf
11995 - Velocity:-inf Position:-inf
11996 - Velocity:-inf Position:-inf
11997 - Velocity:-inf Position:-inf
11998 - Velocity:-inf Position:-inf
11999 - Velocity:-inf Position:-inf
12000 - Velocity:-inf Position:-inf
Program ended with exit code: 0
我已经与取得良好结果的朋友进行了比较,我们无法确定他们的代码与我的代码之间的区别。我的程序其余部分都已完成并且工作正常,我只是无法弄清楚为什么我的计算错误
最佳答案
当v[-1]
为零时,忽略对i
的越界访问,则推力,质量或g会有问题。
推力为7000,时间为0时质量为3000。这意味着推力/质量刚好超过2。g = 32(真的吗?您正在以英制为单位进行火箭计算吗?),这意味着火箭永远没有足够的推力来抵消重力,只是坐在垫子上。
编辑:那将是现实。因为这是一个相当简单的模拟,并且不包含“垫”,所以在该模型中,火箭开始自由落体到地球中心。