我对如何使用ode45
有疑问,因为我知道它使用了内部可变步长。例如,在我的特定情况下,我有一个ODE的模型,我使用5分钟的采样时间。因此,在我的主要模拟循环中,我有以下行,通过使用ode45
:求解来获得我的模型的输出
[T,X] = ode45(@(t,x) model(t,x,u,data),[t t+scenario.Ts],x0);
其中u
是模型的输入,data
是具有参数的结构,x0
是当前时间步长的初始条件,[t t+scenario.Ts]
是初始和最终时间。我的怀疑是,在t
和t+scenario.Ts
之间,ode45
-求解器使用可变的时间步长,因此我介绍输入动作u
的方式可能会受到影响。因此,我理解特定输入u
的值通过[t t+scenario.Ts]
之间的内部时间步长保持恒定。然后,如果我有一个通量,即水箱中的水,时间步长对u
有直接影响。
让我用一个例子来解释一下。如果超过[t t+scenario.Ts]
,我知道u(1) = 10
。那么我应该使用的实际输入是u(1)=10/(# of time steps between [t0 tend])
。然而,由于内部步骤是可变的,我必须使用哪个输入?
我希望你能理解我的问题,并能帮助我。
您应该制定输入,使其独立于时间离散化。如果你的方程是在连续时间内公式化的,这应该不是问题。如果控制变量不是常量,那么应该使其显式依赖于t
,并编写一个函数u(t)
。
如果我的答案不足以帮助你,请添加更多关于你的应用程序的细节,尤其是你正在模拟的动态模型。那么我们可以进一步帮助您。