我对如何使用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-solver使用了可变的时间步长,因此我引入输入操作的方式u可能会受到影响。因此,我理解在[t t+scenario.Ts]之间的内部时间步长中,特定输入u的值保持不变。然后,如果我有一个流量,也就是进入水箱的水,时间步长对这个u有直接的影响。
让我用一个例子来解释一下这一点。如果超过了[t t+scenario.Ts],我就知道u(1) = 10。那么我应该使用的实际输入是u(1)=10/(# of time steps between [t0 tend])。但是,由于内部步骤是可变的,我必须使用哪个输入?
我希望你能理解我的问题,并能帮助我。
发布于 2016-06-01 03:37:43
您应该制定输入,使其独立于时间离散化。如果你的方程式是连续的,这应该不是问题。如果控制变量不是常量,那么您应该使其显式依赖于t,并编写一个函数u(t)。
如果我的回答不足以帮助您,请添加有关您的应用程序的更多详细信息,特别是您正在模拟的动态模型。然后我们可以进一步帮助你。
https://stackoverflow.com/questions/37551971
复制相似问题