嗨,我们应该为最终项目在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(真的吗?您正在以英制为单位进行火箭计算吗?),这意味着火箭永远没有足够的推力来抵消重力,只是坐在垫子上。



编辑:那将是现实。因为这是一个相当简单的模拟,并且不包含“垫”,所以在该模型中,火箭开始自由落体到地球中心。

09-05 23:24