Matlab 直到周期解微分方程

Matlab 直到周期解微分方程,matlab,ode,differential-equations,periodicity,Matlab,Ode,Differential Equations,Periodicity,我想在MATLAB中解一个微分方程 odeopts = odeset('MaxStep',dt); [t,X] = ode113(@MyDiff,tSpan,X0,odeopts); 此处,dt、MyDiff、tSpan和X0在代码中前面定义。问题是,离散步骤dt非常小,而总模拟时间tSpan(end)非常大。此外,预计从某个时间T开始,溶液将变得周期性,周期P。这里,周期P是先验的,而时间T不是先验的 我想做的是在解X变得周期性时自动停止ode113解算器,以节省计算时间。如果你能想到我该怎

我想在MATLAB中解一个微分方程

odeopts = odeset('MaxStep',dt);
[t,X] = ode113(@MyDiff,tSpan,X0,odeopts);
此处,
dt
MyDiff
tSpan
X0
在代码中前面定义。问题是,离散步骤
dt
非常小,而总模拟时间
tSpan(end)
非常大。此外,预计从某个时间T开始,溶液将变得周期性,周期
P
。这里,周期
P
是先验的,而时间
T
不是先验的

我想做的是在解
X
变得周期性时自动停止ode113解算器,以节省计算时间。如果你能想到我该怎么做,我将不胜感激

我至今的想法是:

  • 第一个子问题是如何在发现周期性时停止Matlab解算器。MATLAB包含通过事件函数停止ode113解算器的选项:

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

  • 但是,
    MyEventFcn
    必须是当前时间步的
    t
    X
    的函数。似乎不可能通过这些信息来确定周期性。在我看来,唯一的解决办法似乎是使用一个全局参数,该参数包括以前所有时间的
    X
    值,最多为预期周期的两倍
    P
    。然而,这对我来说似乎很不雅观和低效,我希望有更好的方法

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