在我的论文中,我研究了车辆以非常高的速度穿过大气层的轨迹。我有一组运动方程,我使用 Runge-Kutta-Fehlberg (RKF) 7(8) 数值积分器进行传播,该积分器已经由我大学的系开发。整个代码是用 C++ 编写的。
对于我的车辆,我需要找到实现特定目标的特定倾斜角轮廓(不必了解倾斜角轮廓是什么,我只需要一个作为运动方程的输入)。优化算法提供了一个(随机)坡度曲线,我将其用作模拟的输入。基于该模拟的结果,优化算法改变坡度角轮廓并评估新轨迹。这不断重复,直到找到达到设定目标的倾斜角轮廓。让我们将由坡度角剖面产生的相应轨迹称为参考轨迹。
现在我也在开发一种引导算法。该算法需要不同的状态变量和派生值(例如高度或大气密度)在指定的时间间隔内,比如每 1.0 秒。我想将此引导算法应用于找到的参考轨迹。由于 RKF7(8) 算法具有自适应步长控制,这在优化过程中是有益的,因为它减少了函数评估的次数,因此肯定不能保证提供每 1.0 秒的输出。因此,为了实现每 1.0 秒的输出,在与参考轨迹相同的初始条件下再次执行积分,期望修改从 RKF7(8) 获得的步长以确保每 1.0 秒的输出。
然而,问题是在修改步长的情况下获得的轨迹与参考轨迹不同。我的猜测是,由于我每 1.0 秒减小步长以实现输出,因此由于步长更小,我会强制提高精度。我还尝试修改 RKF7(8) 算法中使用的容差,以及不同的排序方法(RKF4(5)、RKF5(6) 和 Adams-Bashfort-Moulton)。我将这个公差(绝对和相对)降低到 1e-15(我认为或多或少是极限,因为它接近机器精度),但我仍然获得不同的轨迹。相同 thi 为了让您对差异有一个印象,请参见下图:
可能会产生影响但我不确定的一件事是高速。如果我降低速度,仍然会有很小的差异,但这不会导致轨迹有明显的差异。然而,对于我的研究来说,拥有这些高速是必不可少的。
有人对我表现出的行为有解释吗?如果是这样,我能做些什么来解决这个问题?
编辑根据 Doug Lipinski 的评论,我使用固定步长积分器 Runge-Kutta 4 执行了多次运行,用于多个步长。见下图。从该图中可以看出,即使步长非常小,该解决方案也不会收敛到一个解决方案。