0

在我的练习中,我需要使用练习中给出的一些数学方程来计算跳伞者的速度变化。我输入质量 = 80kg 高度 = 39000 m

我必须在屏幕上显示此消息: System.out.printf("%.0f, %.4f, %.4f, %.5f\n", t, height, speed, accel);

通常,我应该有这个结果:

> 133, 1991.2751, 284.9225, -79.22827
> 134, 1742.1436, 216.8788, -57.96464
> 135, 1551.4499, 167.0971, -42.40784
> 136, 1403.5103, 130.6760, -31.02624

但不幸的是,这就是我屏幕上的内容:

< 133, 1991.2751, 284.9224, -79.22826
< 134, 1742.1436, 216.8788, -57.96463
< 135, 1551.4499, 167.0971, -42.40783
< 136, 1403.5103, 130.6759, -31.02623

这是我的代码:

    final double g = 9.8100;
    float surface = 2;
    int tf = 171;
    double v0 = 00.0;
    double t0 = 00.0;

    for (double t = 0; t < tf; t++) 
    {
        double height= h0;
        double speed= v0;
        double accel = 9.81;

        double s = surface / mass;
        double q = Math.exp(-s * (t - t0));

        speed= (g / s) * (1 - q) + (v0 * q);
        accel = g - (s * vitesse);
        height= h0 - ((g / s) * (t - t0)) - ((v0 - (g / s)) / s) * (1 - q);  

        if ((height<= 2500) && (height> 2300))
        {
            surface = 25;
            System.out.println("## The parachutist open his parachute");
            t0 = 132;
            v0 = 377.927;
            h0 = 2320.2818f;
        }

        // Display on the screen
        System.out.printf("%.0f, %.4f, %.4f, %.5f\n",
                t, height, speed, accel);
    }

你能帮我吗 ?

编辑:方程式:http ://www.casimages.com/img.php?i=131027115003602313.png

4

2 回答 2

1

将您的打印声明更改为

System.out.printf("%.0f, %.3e, %.3e, %.3e\n", t, height, speed, accel);

如果有人向您提出挑战,请说将计算结果引用到比输入时使用的常数更高的精度(在您的情况下,g=9.81限制精度)会产生误导。我们甚至不打算谈论作为高度函数的事实(正如 SJuan76 在其中一条评论中所提到的),它g是高度的函数,并且在地球表面以上 39 公里处,它偏离了一个重要因素. 而且这里还有许多其他近似值(他的表面不光滑,阻力是方向和空气密度的函数,等等......)

供您参考,由于重力为1/r^2,且 r~6300 km,有效 r 变化 ~0.6%,因此 g 将变化超过 1%。这甚至使三个重要数字变得慷慨。

所以别担心了。第七位有效数字的舍入误差是不争的事实。但几乎从来没有一个重要的事实......

于 2013-10-28T00:09:03.707 回答
1

如果您扩展问题以说出您想要帮助的内容,这会有所帮助,但看起来基本答案是您在某些时候截断而不是四舍五入。如果这是针对数值分析类的,您应该考虑如何重新排列术语以减少舍入误差。如果这是一门编程课,你应该询问你的助教,这个错误是否可以接受。我还注意到这surfacefloat大多数其他术语都是doubles 的地方,因此可能会有一点准确性损失。

于 2013-10-27T22:42:04.050 回答