为什么我的有限差分近似不起作用?

计算科学 有限差分 计算物理学
2021-12-04 16:09:23

我试图根据非均匀采样的 3D 位置数据找出我的对象的加速度大小。我在非均匀网格上使用二阶导数的标准近似值(参见例如此处,第 121 页):

f2h+f0(h+h+)f1+hf2h+h(h++h)

其中是第一个采样间隔,是第二个采样间隔,是采样点。hh+fn

我正在尝试通过以下方式实现它:

class ComputeAcceleration
{
    Vector3D prevPosition;
    Vector3D prevPrevPosition;
    float prevTimeStep;

    float acceleration;

    // This function gets called every time step with the time step
    // since the last data input as argument.
    void Update(const float timeStep)
    {
        float doubleTimeStep = prevTimeStep + timeStep;
        Vector3D currentPosition = getCurrentPosition();
        Vector3D accelerationVector = prevTimeStep * currentPosition - 
                                      doubleTimeStep * prevPosition + 
                                      timeStep * prevPrevPosition;      
        accelerationVector  *= 2 / (doubleTimeStep * prevTimeStep * timeStep);
        acceleration = sqrt(accelerationVector.X * accelerationVector.X +
                            accelerationVector.Y * accelerationVector.Y+
                            accelerationVector.Z * accelerationVector.Z);

        prevPrevPosition = prevPosition;
        prevPosition = currentPosition;
    }
}

我找不到其中的错误,但是当我实时绘制它时,我得到的曲线根本不像加速度,而是速度,以某种不稳定的方式。我根据速度(我知道这是正确的)绘制它,它看起来大致是这样的:

在此处输入图像描述

我在这里做一些根本错误的事情吗?

0个回答
没有发现任何回复~