有效地计算物体的位置、速度和其他运动导数

Calculating an object's position, velocity and other derivatives of motion efficiently

好的,这里有一个 programming/physics 拼图,假设是 Java(虽然这并不重要 - 但为了保持一致性,我们将使用 Java)。

我有一个双精度数组,其中每个元素代表对象位置的连续导数。所以:

d[0] // position
d[1] // velocity
d[2] // accelleration

等...

至少有 1 个元素,可能有任意数量的元素(但实际上,可能不超过 5 个)。数组末尾以外的所有元素都假定为零。

我们还有 double t 的时间。

所以如果 d.length 是 3 那么非常具体:

d[0] += d[1] * t + d[2] * t * t / 2
d[1] += d[2] * t

但是我们如何编写一个迭代解决方案(没有递归!)来更新数组的所有元素在时间 t 内任意长度的 a?

应该为效率和简洁性投票。

编辑: 运动定律在这个网站的物理页面上,但基本上 每个术语的形式为:

power(t,n) / factorial(n)

所以第一个方程的下一项是d[3] * t*t*t / 6

如果你不熟悉这些方程式,请不要让我解释。

一个测试用例:

final static double[] D = { 5.0, 4.0, 3.0, 2.0, 1.0 };
double t = 10.0

应该给:

[945.0, 300.66666666666663, 73.0, 12.0, 1.0]

第二个元素可能因精度误差而有所不同。

已更新:

for (int i = 0; i < d.length - 1; i++) {
    d[i] = 0;
    int f = 1;
    double p = 1;
    for (int j = i+1; j < d.length; j++) {
        f *= j - i;
        p *= t;
        d[i] += d[j] * p / f;
    }
}

我认为这样的方法可行。

int length = d.length;
for (int i = 0; i < length - 1; i++) {
    double temp = 0;
    for (int j = length - 1; j > i; j--)
        temp = (temp + d[j]) * t / (j - i);
    d[i] += temp;
}