求解微分方程直到周期

时间:2017-05-03 11:26:56

标签: matlab ode differential-equations periodicity

我想在MATLAB中求解微分方程

odeopts = odeset('MaxStep',dt);
[t,X] = ode113(@MyDiff,tSpan,X0,odeopts);

此处dtMyDifftSpanX0在代码中已定义。问题是,离散步骤dt非常小,而总模拟时间tSpan(end)非常大。此外,预期该解决方案将从某个时间段T开始具有周期P。此处,句点P是先验已知的,而时间T则不是。

我想要做的是在解X成为周期性时自动停止ode113-solver,以节省计算时间。我很感激有关如何做到这一点的任何想法。

我的想法直到现在:

  1. 第一个子问题是如何在发现周期时停止Matlab求解器。 MATLAB包含了通过事件函数停止ode113-solver的选项:

    odeopts = odeset('MaxStep',dt,'Events',MyEventFcn);

  2. 但是,MyEventFcn必须是当前时间步tX的函数。通过这些信息确定周期性似乎是不可能的。在我看来,唯一的方法就是使用一个全局参数,该参数在之前的所有时间都包含X值,最多可达预期期间P的两倍。然而,这对我来说似乎相当不优雅和低效,我希望有更好的方法。

    1. 第二个问题是如何确定解决方案X是周期性的P。目前我认为最好的方法是使用自相关函数的阈值xcorr(X),但我还不确定细节,所以这里的任何建议也都有用。
    2. 编辑:我实现了一个解决方案,几乎遵循我之前的想法,使用全局变量来跟踪X值并使用xcorr来检测周期性。经过一段时间的思考,这实际上似乎是最简单的方法。

0 个答案:

没有答案