使用ODE45 MATLAB求解延迟的微分方程



我正在尝试使用MATLAB中的ODE45求解DDE。我的问题是关于我解决这个方程式的方式。我不知道我是对的还是我错的,我应该使用dde23。我有以下等式:

xdot(t)=Ax+BU(t-td)+E(t) & U(t-td)=Kx(t-td) & K=constant

通常,当我的方程式没有延迟时,我会使用ODE45解决此问题。现在,随着我的方程式延迟,我再次使用ode45来获得结果。我在每个步骤中都有确切的u(t-t-td(,然后更换其数量并解决方程。

我的解决方案是否正确,还是我应该使用dde23?

您在这里有两个问题:

  1. ode45是具有自适应步长大小的求解器。这意味着您的抽样步骤不一定等同于实际集成步骤。取而代之的是,积分器根据需要将采样步骤分为几个集成步骤,以达到所需的准确性(有关更多信息,请参见科学计算的问题(。结果,即使您认为这样做,您也可能不会在集成的每个步骤中提供正确的 U延迟值。

    但是,如果您的采样步骤足够小,则每个采样步骤确实会有一个时间步骤。这样做的原因是,您通过使您的时间步骤比所需的时间小(因此浪费计算时间(有效地禁用自适应整合。

  2. 高阶runge – kutta方法(例如ode45(不仅在每个集成步骤中使用衍生物的值,而且在中间进行评估(不,它们不能为其提供可用的解决方案这个内部时间步长(。

    例如,假设您的延迟和集成步骤为TD = 16。要使整合步骤从t = 32到t = 48,您不仅需要在t = 32-16 = 16和t = 48-16 = 32时评估 U,而且还需要在t = 40-16 = 24。,您可能会说:好的,让我们整合,以便我们在所有时间点都有集成步骤。但是,对于这些集成步骤,您再次需要中间的步骤,例如,如果要从t = 16到t = 24的集成,则需要在t = 0,t = 4和t = 8时评估 U。您将获得一个永无止境的级联,越来越小的时间步骤。

由于问题2,除了单步集成符外,不可能提供过去的确切状态 - 在您的情况下,这可能不是一个好主意。因此,如果要将DDE与多步集成器集成在一起,则不可避免地使用某种插值来获得过去的值。dde23使用良好的插值以复杂的方式来执行此操作。

如果您仅在集成步骤中提供U,则本质上是执行分段构成插值,这是最糟糕的插值,因此要求您使用非常小的集成步骤。虽然您真的可以这样做,但dde23具有更复杂的分段立方体插值可以使用更大的时间步骤并适应性地集成,因此会更快。另外,您以某种方式犯了错误的可能性较小。最后,如果您喜欢这种事情,则dde23可以处理很小的延迟(比集成步骤小(。

最新更新